From 34ee151c2ff6b24fe0d32985aa1b4368fcc1a459 Mon Sep 17 00:00:00 2001 From: dibs Date: Tue, 26 Mar 2013 22:12:23 +0900 Subject: [PATCH] [DIBSweb] add project lock status --- .../controllers/admin_project_controller.rb | 38 +++++ .../app/controllers/projects_controller.rb | 5 + .../javascripts/admin-distribution-modify.js | 2 +- .../public/javascripts/admin-project-add.js | 22 ++- .../javascripts/admin-project-modify.js | 42 +++++- dibs-web/public/javascripts/admin-project.js | 32 ++++- dibs-web/public/javascripts/admin-user.js | 2 + dibs-web/public/javascripts/build.js | 134 +++++++++++------- dibs-web/public/javascripts/dibs-api.js | 5 + 9 files changed, 220 insertions(+), 62 deletions(-) diff --git a/dibs-web/app/controllers/admin_project_controller.rb b/dibs-web/app/controllers/admin_project_controller.rb index e125bc6..7f7d5b4 100644 --- a/dibs-web/app/controllers/admin_project_controller.rb +++ b/dibs-web/app/controllers/admin_project_controller.rb @@ -79,6 +79,7 @@ class AdminProjectController < ApplicationController project_list = Project.find_by_sql("SELECT projects.id , projects.name , projects.ptype + , projects.status FROM projects , distributions WHERE distributions.name = \"#{dist_name}\" @@ -89,6 +90,7 @@ class AdminProjectController < ApplicationController doc.Project { doc.ProjectName(project.name) doc.Type(project.ptype) + doc.ProjectStatus(project.status) os_list = ProjectOs.find_by_sql("SELECT supported_os.name AS name FROM project_os @@ -133,6 +135,7 @@ class AdminProjectController < ApplicationController project_type = change_item[:ProjectType].upcase project_dist_name = change_item[:Distribution] project_password = change_item[:ProjectPass] + project_status = change_item[:ProjectStatus].upcase if project_name.nil? or project_name.empty? then errmsg = "Can't find [Name] information" @@ -140,6 +143,12 @@ class AdminProjectController < ApplicationController return end + if not project_status.eql? "OPEN" and not project_status.eql? "CLOSE" + errmsg = "project status is invalid" + render :json => { :error => errmsg }, :status => 406 + return + end + distribution = Distribution.find(:first, :conditions => ["name = ?", project_dist_name]) project = Project.find(:first, :conditions => ["name = ? and distribution_id = ? and ptype = ?", project_name, distribution.id, project_type]) @@ -158,6 +167,7 @@ class AdminProjectController < ApplicationController project = Project.new project.name = project_name project.ptype = project_type + project.status = project_status project.password = project_password project.distribution_id = distribution.id #TODO: set project user is admin. admin user id is '1' @@ -247,6 +257,7 @@ class AdminProjectController < ApplicationController dist_name = change_item[:Distribution] old_project_name = change_item[:Name] project_type = change_item[:ProjectType].upcase + project_status = change_item[:ProjectStatus].upcase if old_project_name.nil? or old_project_name.empty? then errmsg = "Can't find [#{old_project_name}] information" @@ -260,10 +271,17 @@ class AdminProjectController < ApplicationController return end + if not project_status.eql? "OPEN" and not project_status.eql? "CLOSE" + errmsg = "project status is invalid" + render :json => { :error => errmsg }, :status => 406 + return + end + distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) project = Project.find(:first, :conditions => ["name = ? and distribution_id = ? and ptype = ?", old_project_name, distribution.id, project_type]) project.name = change_item[:NewProjectName] project.password = change_item[:ProjectPass] + project.status = project_status # remove project os and reset project os ProjectOs.delete_all(["project_id = ?", project.id]) @@ -303,4 +321,24 @@ class AdminProjectController < ApplicationController project.save render :json => { :success => "OK!" } end + + def changeAllProjectStatus + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + dist_name = change_item[:Distribution] + projectStatus = change_item[:ProjectStatus] + + if projectStatus.nil? or not (projectStatus.eql? "OPEN" or projectStatus.eql? "CLOSE") then + errmsg = "project status must be OPEN or CLOSE" + render :json => { :error => errmsg }, :status => 406 + return + end + + distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + Project.update_all("status=\"#{projectStatus}\"", :distribution_id => distribution.id) + + render :json => { :success => "OK!" } + end end diff --git a/dibs-web/app/controllers/projects_controller.rb b/dibs-web/app/controllers/projects_controller.rb index 947b5e0..21c5cc1 100644 --- a/dibs-web/app/controllers/projects_controller.rb +++ b/dibs-web/app/controllers/projects_controller.rb @@ -272,6 +272,7 @@ class ProjectsController < ApplicationController doc.supportedOs(os.name) end end + doc.DistributionStatus(distribution.status) } projects.each do |project| @@ -280,6 +281,7 @@ class ProjectsController < ApplicationController if checkUserAccessProject(user_id, project.id) doc.BinaryProject { doc.ProjectName(project.name) + doc.ProjectStatus(project.status) if not bin.nil? then doc.PackageName(bin.pkg_name) end @@ -287,6 +289,7 @@ class ProjectsController < ApplicationController else doc.OtherBinaryProject { doc.ProjectName(project.name) + doc.ProjectStatus(project.status) if not bin.nil? then doc.PackageName(bin.pkg_name) end @@ -304,11 +307,13 @@ class ProjectsController < ApplicationController if checkUserAccessProject(user_id, project.id) doc.Project { doc.ProjectName(project.name) + doc.ProjectStatus(project.status) doc.OsList(buildOsNameList.join(",")) } else doc.OtherProject { doc.ProjectName(project.name) + doc.ProjectStatus(project.status) doc.OsList(buildOsNameList.join(",")) } end diff --git a/dibs-web/public/javascripts/admin-distribution-modify.js b/dibs-web/public/javascripts/admin-distribution-modify.js index 679e46a..21c1c92 100644 --- a/dibs-web/public/javascripts/admin-distribution-modify.js +++ b/dibs-web/public/javascripts/admin-distribution-modify.js @@ -73,7 +73,7 @@ function adminDistributionModifyPopupInit() { if(serverStatusText.toUpperCase() == "CLOSE") { option = ''; } else { - option = ''; + option = ''; } $("#adminDistributionModify-status").append(option); $("#adminDistributionModify-status").selectmenu("refresh"); diff --git a/dibs-web/public/javascripts/admin-project-add.js b/dibs-web/public/javascripts/admin-project-add.js index 8aa5ddb..4ee55da 100644 --- a/dibs-web/public/javascripts/admin-project-add.js +++ b/dibs-web/public/javascripts/admin-project-add.js @@ -31,6 +31,14 @@ function adminProjectAddGitInit() { $("#adminProjectAddGit-password").val(""); $("#adminProjectAddGit-address").val(""); $("#adminProjectAddGit-branch").val(""); + $("#adminProjectAddGit-status").empty(); + + var option; + option = ''; + $("#adminProjectAddGit-status").append(option); + option = ''; + $("#adminProjectAddGit-status").append(option); + $("#adminProjectAddGit-status").selectmenu("refresh"); queryAllOS( function (xml) { var osList = $(xml).find("Data").find("OsName"); @@ -55,6 +63,14 @@ function adminProjectAddBinaryInit() { $("#adminProjectAddBinary-name").val(""); $("#adminProjectAddBinary-password").val(""); $("#adminProjectAddBinary-packagename").val(""); + $("#adminProjectAddBinary-status").empty(); + + var option; + option = ''; + $("#adminProjectAddBinary-status").append(option); + option = ''; + $("#adminProjectAddBinary-status").append(option); + $("#adminProjectAddBinary-status").selectmenu("refresh"); queryAllOS( function (xml) { var osList = $(xml).find("Data").find("OsName"); @@ -84,6 +100,7 @@ function adminProjectAddGitProject() { var password = $("#adminProjectAddGit-password").val(); var address = $("#adminProjectAddGit-address").val(); var branch = $("#adminProjectAddGit-branch").val(); + var projectStatus = $("#adminProjectAddGit-status option:selected").val(); var selectOsList = []; var selectArray = $("input[name='adminProjectAddGit-os-checkbox']"); @@ -98,7 +115,7 @@ function adminProjectAddGitProject() { return; } - changeInfoItem = {"Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "Address":address, "Branch":branch, "OSNameList":selectOsList.toString()}; + changeInfoItem = {"Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "Address":address, "Branch":branch, "ProjectStatus":projectStatus, "OSNameList":selectOsList.toString()}; changeInfoList.push(changeInfoItem); addProject(changeInfoList, function () { @@ -114,6 +131,7 @@ function adminProjectAddBinaryProject() { var name = $("#adminProjectAddBinary-name").val(); var password = $("#adminProjectAddBinary-password").val(); var pkgName = $("#adminProjectAddBinary-packagename").val(); + var projectStatus = $("#adminProjectAddBinary-status option:selected").val(); var selectOsList = []; var selectArray = $("input[name='adminProjectAddBinary-os-checkbox']"); @@ -128,7 +146,7 @@ function adminProjectAddBinaryProject() { return; } - changeInfoItem = {"Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "PackageName":pkgName, "OSNameList":selectOsList.toString()}; + changeInfoItem = {"Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "PackageName":pkgName, "ProjectStatus":projectStatus, "OSNameList":selectOsList.toString()}; changeInfoList.push(changeInfoItem); addProject(changeInfoList, function () { diff --git a/dibs-web/public/javascripts/admin-project-modify.js b/dibs-web/public/javascripts/admin-project-modify.js index 16930e2..338d83d 100644 --- a/dibs-web/public/javascripts/admin-project-modify.js +++ b/dibs-web/public/javascripts/admin-project-modify.js @@ -29,14 +29,33 @@ Contributors: function adminProjectModifyBinaryProjectInit() { var projectName = localStorage.projectName; var packageName = $("#adminProject-binary-packageName-"+projectName).html(); + var projectStatusText = $("#adminProject-binary-"+projectName+"-status").html(); $("#adminProjectModifyBinary-oldName").val(projectName); $("#adminProjectModifyBinary-newName").val(projectName); $("#adminProjectModifyBinary-password").val(""); $("#adminProjectModifyBinary-packageName").val(packageName); + $("#adminProjectModifyBinary-status").empty(); $("#adminProjectModifyBinary-os").empty(); $("#adminProjectModifyBinary-os").append(" os list "); + $("#adminProjectModifyBinary-status").empty(); + var option; + if(projectStatusText.toUpperCase() == "OPEN") { + option = ''; + } else { + option = ''; + } + $("#adminProjectModifyBinary-status").append(option); + + if(projectStatusText.toUpperCase() == "CLOSE") { + option = ''; + } else { + option = ''; + } + $("#adminProjectModifyBinary-status").append(option); + $("#adminProjectModifyBinary-status").selectmenu("refresh"); + queryAllOS( function (xml) { var osList = $(xml).find("Data").find("OsName"); var selectedOsList = []; @@ -72,14 +91,31 @@ function adminProjectModifyGitProjectInit() { var projectName = localStorage.projectName; var projectAddress = $("#adminProject-git-"+projectName+"-address").html(); var projectBranch = $("#adminProject-git-"+projectName+"-branch").html(); + var projectStatusText = $("#adminProject-git-"+projectName+"-status").html(); $("#adminProjectModifyGit-oldName").val(projectName); $("#adminProjectModifyGit-newName").val(projectName); $("#adminProjectModifyGit-password").val(""); $("#adminProjectModifyGit-address").val(projectAddress); $("#adminProjectModifyGit-branch").val(projectBranch); + $("#adminProjectModifyGit-status").empty(); $("#adminProjectModifyGit-os").empty(); $("#adminProjectModifyGit-os").append(" os list "); + var option; + if(projectStatusText.toUpperCase() == "OPEN") { + option = ''; + } else { + option = ''; + } + $("#adminProjectModifyGit-status").append(option); + + if(projectStatusText.toUpperCase() == "CLOSE") { + option = ''; + } else { + option = ''; + } + $("#adminProjectModifyGit-status").append(option); + $("#adminProjectModifyGit-status").selectmenu("refresh"); queryAllOS( function (xml) { var osList = $(xml).find("Data").find("OsName"); @@ -119,6 +155,7 @@ function adminProjectModfyBinaryProject() { var oldProjectName = $("#adminProjectModifyBinary-oldName").val(); var newProjectName = $("#adminProjectModifyBinary-newName").val(); var projectPassword = $("#adminProjectModifyBinary-password").val(); + var projectStatus = $("#adminProjectModifyBinary-status option:selected").val(); var packageName = $("#adminProjectModifyBinary-packageName").val(); var selectOsList = []; @@ -134,7 +171,7 @@ function adminProjectModfyBinaryProject() { return; } - changeInfoItem = {"Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":"BINARY", "ProjectPass":projectPassword, "PackageName":packageName, "OSNameList":selectOsList.toString()}; + changeInfoItem = {"Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":"BINARY", "ProjectPass":projectPassword, "ProjectStatus":projectStatus, "PackageName":packageName, "OSNameList":selectOsList.toString()}; changeInfoList.push(changeInfoItem); modifyProject(changeInfoList, function () { @@ -151,6 +188,7 @@ function adminProjectModfyGitProject() { var projectPassword = $("#adminProjectModifyGit-password").val(); var projectAddress = $("#adminProjectModifyGit-address").val(); var projectBranch = $("#adminProjectModifyGit-branch").val(); + var projectStatus = $("#adminProjectModifyGit-status option:selected").val(); var selectOsList = []; var selectArray = $("input[name='adminProjectModifyGit-os-checkbox']"); @@ -165,7 +203,7 @@ function adminProjectModfyGitProject() { return; } - changeInfoItem = {"Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":"GIT", "ProjectPass":projectPassword, "ProjectAddress":projectAddress, "ProjectBranch":projectBranch, "OSNameList":selectOsList.toString()}; + changeInfoItem = {"Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":"GIT", "ProjectPass":projectPassword, "ProjectAddress":projectAddress, "ProjectBranch":projectBranch, "ProjectStatus":projectStatus, "OSNameList":selectOsList.toString()}; changeInfoList.push(changeInfoItem); modifyProject(changeInfoList, function () { diff --git a/dibs-web/public/javascripts/admin-project.js b/dibs-web/public/javascripts/admin-project.js index f28ef05..b09953a 100644 --- a/dibs-web/public/javascripts/admin-project.js +++ b/dibs-web/public/javascripts/admin-project.js @@ -94,11 +94,12 @@ function adminProjectUpdateTable(projectList) { $("#adminProject-binary").empty(); // Project table header - var tableHeader = "ProjectGit reposBranchOS listModifyDelete"; + var tableHeader = "ProjectGit reposBranchOS listStatusModifyDelete"; $("#adminProject-git").append(tableHeader); // Binary project table header - var tableHeader = "ProjectPackage nameOS listModifyDelete"; + var tableHeader = "ProjectPackage nameOS listStatusModifyDelete"; + $("#adminProject-binary").append(tableHeader); var projectIdx = 1; @@ -107,6 +108,7 @@ function adminProjectUpdateTable(projectList) { projectList.each(function(){ var name = $(this).find("ProjectName").text(); var type = $(this).find("Type").text(); + var project_status = $(this).find("ProjectStatus").text(); var osList = $(this).find("OS"); if(type.toUpperCase() == "GIT") @@ -132,6 +134,10 @@ function adminProjectUpdateTable(projectList) { div = adminProjectApendOsCell(osList, name, "GIT"); cell.appendChild(div); + cell = row.insertCell(-1); + cell.setAttribute('id',"adminProject-git-"+name+"-status"); + cell.innerHTML = project_status; + cell = row.insertCell(-1); var button = document.createElement('a'); button.setAttribute('href','#adminProjectModifyGit'); @@ -146,7 +152,6 @@ function adminProjectUpdateTable(projectList) { cell = row.insertCell(-1); var button = document.createElement('input'); button.setAttribute('type','button'); - button.setAttribute('id','button:git:'+projectIdx+':'+name); button.setAttribute('data-mini','true'); button.setAttribute('name',name); button.setAttribute('class','binaryProjectTableButton'); @@ -173,6 +178,10 @@ function adminProjectUpdateTable(projectList) { div = adminProjectApendOsCell(osList, name, "BINARY"); cell.appendChild(div); + cell = row.insertCell(-1); + cell.setAttribute('id',"adminProject-binary-"+name+"-status"); + cell.innerHTML = project_status; + cell = row.insertCell(-1); var button = document.createElement('a'); button.setAttribute('href','#adminProjectModifyBinary'); @@ -233,4 +242,21 @@ function adminProjectApendOsCell(osList, projectName, projectType) { return div; } +function adminProjectAllProjectStatusChange(projectStatus) { + var distName = $("#adminProject-distribution-select option:selected").val(); + var changeInfoList = []; + var changeInfoItem; + + var r=confirm("All project status is changed to "+projectStatus+"!!!"); + if (r==false) + { + return; + } + changeInfoItem = {"Distribution":distName, "ProjectStatus":projectStatus} + changeInfoList.push(changeInfoItem); + + changeAllProjectStatus(changeInfoList, function () { + $.mobile.changePage("#adminProject"); + }); +} diff --git a/dibs-web/public/javascripts/admin-user.js b/dibs-web/public/javascripts/admin-user.js index c41f888..671dc83 100644 --- a/dibs-web/public/javascripts/admin-user.js +++ b/dibs-web/public/javascripts/admin-user.js @@ -68,6 +68,7 @@ function adminUserFillTable(userList) { button.setAttribute('href','#adminUserModify'); button.setAttribute('data-role','button'); button.setAttribute('data-rel','dialog'); + button.setAttribute('data-mini','ture'); button.setAttribute('class','adminUser-contentsButton'); button.setAttribute('onClick','adminUserModifySetup('+userId+')'); button.innerHTML = " " @@ -77,6 +78,7 @@ function adminUserFillTable(userList) { var button = document.createElement('input'); button.setAttribute('type','button'); button.setAttribute('name',email); + button.setAttribute('data-mini','ture'); button.setAttribute('class','adminUser-contentsButton'); button.setAttribute('onClick','adminUserRemoveUser('+userId+')'); cell.appendChild(button); diff --git a/dibs-web/public/javascripts/build.js b/dibs-web/public/javascripts/build.js index f204833..781f9f6 100644 --- a/dibs-web/public/javascripts/build.js +++ b/dibs-web/public/javascripts/build.js @@ -68,10 +68,21 @@ function buildQueryProjectList() { $("#build-binary-table").empty(); var xmlBody = $(xml).find("Data"); + var distributionStatus = xmlBody.find("BuildServerInfo").find("DistributionStatus").text(); + if (distributionStatus == "CLOSE") { + var distributionLock = document.getElementById("build-distribution-lock"); + distributionLock.innerHTML = '

Distribution is locked

'; + } else { + var distributionLock = document.getElementById("build-distribution-lock"); + distributionLock.innerHTML = ''; + } + buildAddTableRow( xmlBody.find("BuildServerInfo").find("supportedOs"), + distributionStatus, xmlBody.find("Project"), xmlBody.find("OtherProject")); - buildAddBinaryTableRow( xmlBody.find("BinaryProject"), + buildAddBinaryTableRow( distributionStatus, + xmlBody.find("BinaryProject"), xmlBody.find("OtherBinaryProject")); }); } @@ -117,7 +128,7 @@ function contains(a, obj) { return false; } -function buildAddTableRow(supportedOs, projectList, otherProjectList) { +function buildAddTableRow(supportedOs, distributionStatus, projectList, otherProjectList) { // Table header var idx = 0; var tableHeader = ""; @@ -142,8 +153,9 @@ function buildAddTableRow(supportedOs, projectList, otherProjectList) { projectList.each(function(){ var name = $(this).find("ProjectName").text(); - var osLists = $(this).find("OsList").text(); - var osList = osLists.split(","); + var projectOsArray = $(this).find("OsList").text().split(","); + var projectStatus = $(this).find("ProjectStatus").text(); + var buildAvailable = true; var row = projectTable.insertRow(-1); @@ -152,40 +164,11 @@ function buildAddTableRow(supportedOs, projectList, otherProjectList) { cell.setAttribute('bgcolor', '#dcddc0'); cell.innerHTML = name; - for (i=0;i'; row += '' + packageName + '' - row += 'REGISTER'; + if (distributionStatus == "CLOSE" || projectStatus == "CLOSE") { + row += ''; + } else { + row += 'REGISTER'; + } row += '' $("#build-binary-table tr:last").after(row); @@ -273,6 +247,58 @@ function buildAddBinaryTableRow(binaryProjectList, otherProjectList) { }); } +function buildAddBinaryTableCell(projectName, osArray, projectOsArray, buildAvailable, row) { + for (i=0;i