From: dibs Date: Mon, 3 Dec 2012 07:59:54 +0000 (+0900) Subject: [Title] append dibsweb 2.0 version X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=498d1bf713d8e98cab33f1a99ccfe280c8100f45;p=sdk%2Ftools%2Fsdk-build.git [Title] append dibsweb 2.0 version --- diff --git a/dibs-web/.project b/dibs-web/.project new file mode 100644 index 0000000..acb2d68 --- /dev/null +++ b/dibs-web/.project @@ -0,0 +1,57 @@ + + + dibs + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + json.validation.builder + + + + + org.tizen.web.jslint.nature.JSLintBuilder + + + + + org.tizen.web.css.nature.CSSBuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.tizen.web.project.builder.WebBuilder + + + usedLibraryType + jQueryMobile + + + + + + json.validation.nature + org.tizen.web.jslint.nature.JSLintNature + org.tizen.web.css.nature.CSSNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.tizen.web.project.builder.WebNature + + diff --git a/dibs-web/Gemfile b/dibs-web/Gemfile index e8419ca..49c22d0 100644 --- a/dibs-web/Gemfile +++ b/dibs-web/Gemfile @@ -23,6 +23,9 @@ end gem 'jquery-rails' +# mysql +gem 'mysql2', '> 0.3' # as stated above + # user gem 'builder' diff --git a/dibs-web/Gemfile.lock b/dibs-web/Gemfile.lock new file mode 100644 index 0000000..0ba6f06 --- /dev/null +++ b/dibs-web/Gemfile.lock @@ -0,0 +1,117 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (3.2.8) + actionpack (= 3.2.8) + mail (~> 2.4.4) + actionpack (3.2.8) + activemodel (= 3.2.8) + activesupport (= 3.2.8) + builder (~> 3.0.0) + erubis (~> 2.7.0) + journey (~> 1.0.4) + rack (~> 1.4.0) + rack-cache (~> 1.2) + rack-test (~> 0.6.1) + sprockets (~> 2.1.3) + activemodel (3.2.8) + activesupport (= 3.2.8) + builder (~> 3.0.0) + activerecord (3.2.8) + activemodel (= 3.2.8) + activesupport (= 3.2.8) + arel (~> 3.0.2) + tzinfo (~> 0.3.29) + activeresource (3.2.8) + activemodel (= 3.2.8) + activesupport (= 3.2.8) + activesupport (3.2.8) + i18n (~> 0.6) + multi_json (~> 1.0) + arel (3.0.2) + bcrypt-ruby (3.0.1) + builder (3.0.3) + coffee-rails (3.2.2) + coffee-script (>= 2.2.0) + railties (~> 3.2.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.3.3) + erubis (2.7.0) + execjs (1.4.0) + multi_json (~> 1.0) + hike (1.2.1) + i18n (0.6.1) + journey (1.0.4) + jquery-rails (2.1.3) + railties (>= 3.1.0, < 5.0) + thor (~> 0.14) + json (1.7.5) + mail (2.4.4) + i18n (>= 0.4.0) + mime-types (~> 1.16) + treetop (~> 1.4.8) + mime-types (1.19) + multi_json (1.3.6) + mysql2 (0.3.11) + polyglot (0.3.3) + rack (1.4.1) + rack-cache (1.2) + rack (>= 0.4) + rack-ssl (1.3.2) + rack + rack-test (0.6.2) + rack (>= 1.0) + rails (3.2.8) + actionmailer (= 3.2.8) + actionpack (= 3.2.8) + activerecord (= 3.2.8) + activeresource (= 3.2.8) + activesupport (= 3.2.8) + bundler (~> 1.0) + railties (= 3.2.8) + railties (3.2.8) + actionpack (= 3.2.8) + activesupport (= 3.2.8) + rack-ssl (~> 1.3.2) + rake (>= 0.8.7) + rdoc (~> 3.4) + thor (>= 0.14.6, < 2.0) + rake (0.9.2.2) + rdoc (3.12) + json (~> 1.4) + sass (3.2.1) + sass-rails (3.2.5) + railties (~> 3.2.0) + sass (>= 3.1.10) + tilt (~> 1.3) + sprockets (2.1.3) + hike (~> 1.2) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + sqlite3 (1.3.6) + thor (0.16.0) + tilt (1.3.3) + treetop (1.4.10) + polyglot + polyglot (>= 0.3.1) + tzinfo (0.3.33) + uglifier (1.3.0) + execjs (>= 0.3.0) + multi_json (~> 1.0, >= 1.0.2) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt-ruby + builder + coffee-rails (~> 3.2.1) + jquery-rails + json + mysql2 (> 0.3) + rails (= 3.2.8) + sass-rails (~> 3.2.3) + sqlite3 + uglifier (>= 1.0.3) diff --git a/dibs-web/README.rdoc b/dibs-web/README.rdoc new file mode 100644 index 0000000..7c36f23 --- /dev/null +++ b/dibs-web/README.rdoc @@ -0,0 +1,261 @@ +== Welcome to Rails + +Rails is a web-application framework that includes everything needed to create +database-backed web applications according to the Model-View-Control pattern. + +This pattern splits the view (also called the presentation) into "dumb" +templates that are primarily responsible for inserting pre-built data in between +HTML tags. The model contains the "smart" domain objects (such as Account, +Product, Person, Post) that holds all the business logic and knows how to +persist themselves to a database. The controller handles the incoming requests +(such as Save New Account, Update Product, Show Post) by manipulating the model +and directing data to the view. + +In Rails, the model is handled by what's called an object-relational mapping +layer entitled Active Record. This layer allows you to present the data from +database rows as objects and embellish these data objects with business logic +methods. You can read more about Active Record in +link:files/vendor/rails/activerecord/README.html. + +The controller and view are handled by the Action Pack, which handles both +layers by its two parts: Action View and Action Controller. These two layers +are bundled in a single package due to their heavy interdependence. This is +unlike the relationship between the Active Record and Action Pack that is much +more separate. Each of these packages can be used independently outside of +Rails. You can read more about Action Pack in +link:files/vendor/rails/actionpack/README.html. + + +== Getting Started + +1. At the command prompt, create a new Rails application: + rails new myapp (where myapp is the application name) + +2. Change directory to myapp and start the web server: + cd myapp; rails server (run with --help for options) + +3. Go to http://localhost:3000/ and you'll see: + "Welcome aboard: You're riding Ruby on Rails!" + +4. Follow the guidelines to start developing your application. You can find +the following resources handy: + +* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html +* Ruby on Rails Tutorial Book: http://www.railstutorial.org/ + + +== Debugging Rails + +Sometimes your application goes wrong. Fortunately there are a lot of tools that +will help you debug it and get it back on the rails. + +First area to check is the application log files. Have "tail -f" commands +running on the server.log and development.log. Rails will automatically display +debugging and runtime information to these files. Debugging info will also be +shown in the browser on requests from 127.0.0.1. + +You can also log your own messages directly into the log file from your code +using the Ruby logger class from inside your controllers. Example: + + class WeblogController < ActionController::Base + def destroy + @weblog = Weblog.find(params[:id]) + @weblog.destroy + logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") + end + end + +The result will be a message in your log file along the lines of: + + Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! + +More information on how to use the logger is at http://www.ruby-doc.org/core/ + +Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are +several books available online as well: + +* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) +* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) + +These two books will bring you up to speed on the Ruby language and also on +programming in general. + + +== Debugger + +Debugger support is available through the debugger command when you start your +Mongrel or WEBrick server with --debugger. This means that you can break out of +execution at any point in the code, investigate and change the model, and then, +resume execution! You need to install ruby-debug to run the server in debugging +mode. With gems, use sudo gem install ruby-debug. Example: + + class WeblogController < ActionController::Base + def index + @posts = Post.all + debugger + end + end + +So the controller will accept the action, run the first line, then present you +with a IRB prompt in the server window. Here you can do things like: + + >> @posts.inspect + => "[#nil, "body"=>nil, "id"=>"1"}>, + #"Rails", "body"=>"Only ten..", "id"=>"2"}>]" + >> @posts.first.title = "hello from a debugger" + => "hello from a debugger" + +...and even better, you can examine how your runtime objects actually work: + + >> f = @posts.first + => #nil, "body"=>nil, "id"=>"1"}> + >> f. + Display all 152 possibilities? (y or n) + +Finally, when you're ready to resume execution, you can enter "cont". + + +== Console + +The console is a Ruby shell, which allows you to interact with your +application's domain model. Here you'll have all parts of the application +configured, just like it is when the application is running. You can inspect +domain models, change values, and save to the database. Starting the script +without arguments will launch it in the development environment. + +To start the console, run rails console from the application +directory. + +Options: + +* Passing the -s, --sandbox argument will rollback any modifications + made to the database. +* Passing an environment name as an argument will load the corresponding + environment. Example: rails console production. + +To reload your controllers and models after launching the console run +reload! + +More information about irb can be found at: +link:http://www.rubycentral.org/pickaxe/irb.html + + +== dbconsole + +You can go to the command line of your database directly through rails +dbconsole. You would be connected to the database with the credentials +defined in database.yml. Starting the script without arguments will connect you +to the development database. Passing an argument will connect you to a different +database, like rails dbconsole production. Currently works for MySQL, +PostgreSQL and SQLite 3. + +== Description of Contents + +The default directory structure of a generated Ruby on Rails application: + + |-- app + | |-- assets + | |-- images + | |-- javascripts + | `-- stylesheets + | |-- controllers + | |-- helpers + | |-- mailers + | |-- models + | `-- views + | `-- layouts + |-- config + | |-- environments + | |-- initializers + | `-- locales + |-- db + |-- doc + |-- lib + | `-- tasks + |-- log + |-- public + |-- script + |-- test + | |-- fixtures + | |-- functional + | |-- integration + | |-- performance + | `-- unit + |-- tmp + | |-- cache + | |-- pids + | |-- sessions + | `-- sockets + `-- vendor + |-- assets + `-- stylesheets + `-- plugins + +app + Holds all the code that's specific to this particular application. + +app/assets + Contains subdirectories for images, stylesheets, and JavaScript files. + +app/controllers + Holds controllers that should be named like weblogs_controller.rb for + automated URL mapping. All controllers should descend from + ApplicationController which itself descends from ActionController::Base. + +app/models + Holds models that should be named like post.rb. Models descend from + ActiveRecord::Base by default. + +app/views + Holds the template files for the view that should be named like + weblogs/index.html.erb for the WeblogsController#index action. All views use + eRuby syntax by default. + +app/views/layouts + Holds the template files for layouts to be used with views. This models the + common header/footer method of wrapping views. In your views, define a layout + using the layout :default and create a file named default.html.erb. + Inside default.html.erb, call <% yield %> to render the view using this + layout. + +app/helpers + Holds view helpers that should be named like weblogs_helper.rb. These are + generated for you automatically when using generators for controllers. + Helpers can be used to wrap functionality for your views into methods. + +config + Configuration files for the Rails environment, the routing map, the database, + and other dependencies. + +db + Contains the database schema in schema.rb. db/migrate contains all the + sequence of Migrations for your schema. + +doc + This directory is where your application documentation will be stored when + generated using rake doc:app + +lib + Application specific libraries. Basically, any kind of custom code that + doesn't belong under controllers, models, or helpers. This directory is in + the load path. + +public + The directory available for the web server. Also contains the dispatchers and the + default HTML files. This should be set as the DOCUMENT_ROOT of your web + server. + +script + Helper scripts for automation and generation. + +test + Unit and functional tests along with fixtures. When using the rails generate + command, template test files will be generated for you and placed in this + directory. + +vendor + External libraries that the application depends on. Also includes the plugins + subdirectory. If the app has frozen rails, those gems also go here, under + vendor/rails/. This directory is in the load path. diff --git a/dibs-web/Rakefile b/dibs-web/Rakefile new file mode 100644 index 0000000..f818fd1 --- /dev/null +++ b/dibs-web/Rakefile @@ -0,0 +1,7 @@ +#!/usr/bin/env rake +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Dibs::Application.load_tasks diff --git a/dibs-web/app/assets/images/rails.png b/dibs-web/app/assets/images/rails.png new file mode 100644 index 0000000..d5edc04 Binary files /dev/null and b/dibs-web/app/assets/images/rails.png differ diff --git a/dibs-web/app/controllers/admin_controller.rb b/dibs-web/app/controllers/admin_controller.rb index dbda1ae..bc41fc6 100644 --- a/dibs-web/app/controllers/admin_controller.rb +++ b/dibs-web/app/controllers/admin_controller.rb @@ -2,213 +2,25 @@ class AdminController < ApplicationController before_filter :check_login_status, :check_admin_group - def user - end - - def queryAdminAllGroupName - group_list = Group.all - - doc = Builder::XmlMarkup.new( :target => out_string = "") - - doc.AllGroup { - group_list.each do |group| - doc.Name(group.name) - end - } - - #send_data - render :text => out_string, :content_type => "text/xml" - end - - def queryAdminAllProject - project_list = Project.all(:order => "name") - - doc = Builder::XmlMarkup.new( :target => out_string = "") - - doc.AllProject{ - project_list.each do |project| - doc.Project{ - doc.Name(project.name) - doc.Id(project.id) - doc.DistName(project.dist_name) - } - end - } - - #send_data - render :text => out_string, :content_type => "text/xml" - end - - def queryAdminAllOS + def queryAllOS os_list = SupportedOs.all(:order => "name") - doc = Builder::XmlMarkup.new( :target => out_string = "") - - doc.AllOS{ - os_list.each do |os| - doc.Name(os.name) - end - } - - #send_data - render :text => out_string, :content_type => "text/xml" - end - - def queryAdminUser - users_list = User.all - - doc = Builder::XmlMarkup.new( :target => out_string = "") - - doc.Users { - users_list.each do |user| - doc.User { - doc.Name(user.name) - doc.Email(user.email) - if user.group_id.nil? - doc.GroupName("") - else - group_name = Group.find(:first, :conditions => ["id = ?", user.group_id]).name - doc.GroupName(group_name) - end - } - end - } - - #send_data - render :text => out_string, :content_type => "text/xml" - end - - def changeAdminUser - change_user_list = params[:ChangeInfoList] - change_item = change_user_list[0] - errmsg = "" - - email = change_item[:Email] - if email.nil? or email.empty? - render :text => "Email is invalid", :status => 406 - return - else - user = User.find(:first, :conditions => ["email = ?", email]) - end - - case change_item[:Type] - when "RemoveUser" - if user.nil? - errmsg = "Can't find user information" - break - end - - user.destroy - when "ModifyUser" - if user.nil? - errmsg = "Can't find user information" - break - end - - group_name = change_item[:GroupName] - if group_name.nil? or group_name.empty? - render :text => "Group name is invalid", :status => 406 - break - else - group = Group.find(:first, :conditions => ["name = ?", group_name]) - end - - if group.nil? - errmsg = "Can't find group information" - break - end - - user_name = change_item[:UserName] - - user.update_attributes(:name => user_name) - user.update_attributes(:group_id => group.id) - user.save - else - errmsg = "Undefined request : [[#{change_item[:Type]}]]" - end - - if errmsg.empty? - render :json => { :success => "OK!" } - else - render :text => errmsg, :status => 406 - end - end - - def group - end - - def queryAdminGroups - project_list = Project.all(:order => "name") - group_list = Group.all - - doc = Builder::XmlMarkup.new( :target => out_string = "") - - doc.Groups { - project_list.each do |project| - doc.AllProject { - doc.Name(project.name) - doc.Id(project.id) - doc.DistName(project.dist_name) - } - end - - group_list.each do |group| - group_access_list = GroupProjectAccesses.find(:all, :conditions => ["group_id = ?", group.id]) - - if group_access_list.empty? - doc.Group { - doc.Name(group.name) - } - else - project_id_list = [] - group_access_list.each do |group_right| - project_id_list.push group_right.prj_id + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + + doc.Data { + if not os_list.nil? + os_list.each do |os| + doc.OS { + doc.OsName(os.name) + category = OsCategory.find(:first, :conditions => ["id = ?", os.os_category_id]) + if not category.nil? + doc.OsCategory(category.name) + end + } end - doc.Group { - doc.Name(group.name) - doc.ProjectList(project_id_list.join(",")) - } end - end - } - - #send_data - render :text => out_string, :content_type => "text/xml" - end - - def queryAdminGroupInfo - group_name = params[:groupName] - if group_name.nil? or group_name.empty? - render :text => "Group name is empty", :content_type => "text/xml" - end - - group = Group.find(:first, :conditions => ["name = ?", group_name]) - project_list = Project.all(:order => "name") - - group_access_list = GroupProjectAccesses.find(:all, :conditions => ["group_id = ?", group.id]) - project_id_list = [] - group_access_list.each do |group_right| - project_id_list.push group_right.prj_id - end - - #generate to XML - doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) - doc.GroupInfo { - project_list.each do |project| - doc.AllProject { - doc.Name(project.name) - doc.Id(project.id) - doc.DistName(project.dist_name) - } - end - - doc.Group { - if group_access_list.empty? - doc.Name(group.name) - else - doc.Name(group.name) - doc.ProjectList(project_id_list.join(",")) - end } } @@ -216,387 +28,24 @@ class AdminController < ApplicationController render :text => out_string, :content_type => "text/xml" end - def changeAdminGroup - change_group_list = params[:ChangeInfoList] - change_item = change_group_list[0] - errmsg = "" - - group_name = change_item[:Name] - if group_name.nil? or group_name.empty? - render :text => "Group name is invalid", :status => 406 - return - else - group = Group.find(:first, :conditions => ["name= ?", group_name]) - end - - case change_item[:Type] - when "RemoveGroup" - if group.nil? - errmsg = "Can't find group" - else - group.destroy - end - when "AddGroup" - group = Group.new - group.name = change_item[:Name] + def queryAllOSCategory + os_category_list = OsCategory.all(:order => "name") - if(change_item[:Name].nil? or change_item[:Name].empty?) - render :text => "Error! Name must needed", :content_type => "text/xml" - end - - group.save - - project_id_list = change_item[:ProjectList].split(",") - - project_id_list.each do |project_id| - sql = "INSERT INTO group_project_accesses VALUES (?,?,?)" - st = ActiveRecord::Base.connection.raw_connection.prepare(sql) - st.execute(group.id, project_id, "TRUE") - st.close - end - - when "ChangeGroup" - old_group_name = change_item[:Name] - new_group_name = change_item[:NewGroupName] - project_id_list = change_item[:ProjectList].split(",") - group = Group.find(:first, :conditions => ["name = ?", old_group_name]) - - if(not old_group_name.eql? new_group_name) - group.name = new_group_name - group.save - end - - sql = "DELETE FROM group_project_accesses WHERE group_id = ?" - st = ActiveRecord::Base.connection.raw_connection.prepare(sql) - st.execute(group.id) - st.close - - project_id_list.each do |project_id| - sql = "INSERT INTO group_project_accesses VALUES (?,?,?)" - st = ActiveRecord::Base.connection.raw_connection.prepare(sql) - st.execute(group.id, project_id, "TRUE") - st.close - end - - end - - - render :text => "", :content_type => "text/xml" - end - - def server - end - - def queryAdminServer - - # get full distribution list - servers = RemoteBuildServers.all - - #generate to XML doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) - doc.Servers { - servers.each do |server| - doc.Server { - doc.Address(server.svr_addr) - } - end - } - - #send_data - render :text => out_string, :content_type => "text/xml" - end + doc.Response { + generate_xml_header(doc) - def changeAdminServer - change_group_list = params[:ChangeInfoList] - change_item = change_group_list[0] - errmsg = "" - - address = change_item[:Address] - if address.nil? or address.empty? - errmsg = "Server address is empty" - render :json => { :error => errmsg }, :status => 406 - return - end - - case change_item[:Type] - when "AddServer" - # get server for error check - server = RemoteBuildServers.find(:first, :conditions => ["svr_addr = ?", address]) - - if server.nil? - server = RemoteBuildServers.new - server.svr_addr = address - server.save - else - errmsg = "Server already exist" - end - when "RemoveServer" - server = RemoteBuildServers.find(:first, :conditions => ["svr_addr = ?", address]) - - if server.nil? - errmsg = "Server does not exist" - else - server.destroy - end - when "ModifyServer" - server = RemoteBuildServers.find(:first, :conditions => ["svr_addr = ?", address]) - - if server.nil? - errmsg = "Server does not exist" - else - new_address = change_item[:NewAddress] - - new_server = RemoteBuildServers.find(:first, :conditions => ["svr_addr = ?", new_address]) - if new_address.nil? - server.svr_addr = new_address - server.save - else - errmsg = "Server already exist" - end - end - end - - if errmsg.empty? - render :json => { :success => "OK!" } - else - render :json => { :error => errmsg }, :status => 406 - end - end - - def project - end - - def queryAllProject - - # get full distribution list - projects = Project.all(:order => "name") - - #generate to XML - doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) - doc.Projects { - doc.Project { - projects.each do |project| - doc.Name(project.name) - doc.Type(project.ptype) - doc.DistName(project.dist_name) + doc.Data { + if not os_category_list.nil? + os_category_list.each do |category| + doc.OsCategoryName(category.name) + end end } } - - #send_data - render :text => out_string, :content_type => "text/xml" - end - - def changeAdminProject - change_group_list = params[:ChangeInfoList] - change_item = change_group_list[0] - errmsg = "" - - if change_item[:Name].nil? or change_item[:Name].empty? then - errmsg = "Can't find [Name] information" - render :json => { :error => errmsg }, :status => 406 - return - end - - case change_item[:Type] - when "AddDistribution" - dist_name = change_item[:Name] - dist = Distribution.find(:first, :conditions => ["name = ?", dist_name]) - if dist.nil? - dist = Distribution.new - dist.name = change_item[:Name] - dist.pkgsvr_url = change_item[:URL] - dist.pkgsvr_addr = change_item[:Address] - dist.status = change_item[:DistStatus] - dist.save - else - errmsg = "Distribution already exist" - end - - when "ModifyDistribution" - dist_name = change_item[:Name] - dist = Distribution.find(:first, :conditions => ["name = ?", dist_name]) - if dist.nil? - errmsg = "Distribution does not exist" - else - dist.pkgsvr_url = change_item[:URL] - dist.pkgsvr_addr = change_item[:Address] - dist.status = change_item[:DistStatus] - dist.save - end - when "RemoveDistribution" - dist_name = change_item[:Name] - dist = Distribution.find(:first, :conditions => ["name = ?", dist_name]) - if dist.nil? - errmsg = "Distribution does not exist" - else - dist.destroy - end - when "AddProject" - project_name = change_item[:Name] - project_type = change_item[:ProjectType].upcase - project_dist_name = change_item[:Distribution] - project = Project.find(:first, :conditions => ["name = ? and dist_name = ? and ptype = ?", project_name, project_dist_name, project_type]) - - if not project.nil? - errmsg = "project already exist" - break - end - - project = Project.new - project.name = change_item[:Name] - project.ptype = change_item[:ProjectType].upcase - project.password = change_item[:ProjectPass] - project.dist_name = change_item[:Distribution] - project.save - - case project.ptype - when "GIT" - git = ProjectGit.new - git.prj_id = project.id - git.git_repos = change_item[:Address] - git.git_branch = change_item[:Branch] - git.save - when "BINARY" - binary = ProjectBin.new - binary.prj_id = project.id - binary.pkg_name = change_item[:PackageName] - binary.save - else - puts "project type is invalid : #{project.ptype}" - end - when "ModifyProject" - dist_name = change_item[:Distribution] - old_project_name = change_item[:Name] - project_type = change_item[:ProjectType].upcase - - project = Project.find(:first, :conditions => ["name = ? and dist_name = ? and ptype = ?", old_project_name, dist_name, project_type]) - project.name = change_item[:NewProjectName] - project.password = change_item[:ProjectPass] - project.save - - case project_type - when "GIT" - sql = "UPDATE project_gits SET git_repos = ?, git_branch = ? WHERE prj_id = ?" - st = ActiveRecord::Base.connection.raw_connection.prepare(sql) - st.execute(change_item[:ProjectAddress], change_item[:ProjectBranch], project.id) - st.close - - sql = "DELETE FROM project_os WHERE prj_id = ?" - st = ActiveRecord::Base.connection.raw_connection.prepare(sql) - st.execute(project.id) - st.close - - os_name_list = change_item[:OSNameList].split(",") - os_name_list.each do |os_name| - project_os = ProjectOs.new - project_os.prj_id = project.id - project_os.os_name = os_name - project_os.save - end - when "BINARY" - st = ActiveRecord::Base.connection.raw_connection.prepare("UPDATE project_bins SET pkg_name = ? WHERE prj_id = ?") - st.execute(change_item[:PackageName], project.id) - st.close - else - errmsg = "project type invalid" - render :json => { :error=> errmsg }, :status => 406 - return - end - - when "RemoveProject" - dist_name = change_item[:Distribution] - project_name = change_item[:Name] - project_type = change_item[:ProjectType] - project = Project.find(:first, :conditions => ["name = ? and dist_name = ?", project_name, dist_name]) - - case project_type.upcase - when "GIT" - st = ActiveRecord::Base.connection.raw_connection.prepare("DELETE FROM project_gits WHERE prj_id = ?") - st.execute(project.id) - st.close - when" BINARY" - st = ActiveRecord::Base.connection.raw_connection.prepare("DELETE FROM project_bins WHERE prj_id = ?") - st.execute(project.id) - st.close - end - project.destroy - else - puts "Can't find update command type : #{change_item[:Type]}" - end - - if errmsg.empty? - render :json => { :success => "OK!" } - else - render :json => { :error=> errmsg }, :status => 406 - end - end - - def queryDistributions - distribution_list = [] - - # get full distribution list - distributions = Distribution.all - distributions.each {|distribution| - distribution_list.push distribution.name - } - - #generate to XML - doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) - doc.Distribution { - distribution_list.each do |distribution| - doc.Name(distribution) - end - } - #send_data render :text => out_string, :content_type => "text/xml" end - def queryDistributionInfo - dist_name = params[:distribution] - - distribution_list = [] - - # get full distribution list - distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) - projectList = Project.find(:all, :conditions => ["dist_name = ?", dist_name]) - - #generate to XML - doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) - doc.Distribution { - doc.DistributionName(distribution.name) - doc.PackageServerUrl(distribution.pkgsvr_url) - doc.PackageServerAddress(distribution.pkgsvr_addr) - doc.Status(distribution.status) - projectList.each do |project| - doc.Project { - doc.ProjectName(project.name) - doc.Type(project.ptype) - case project.ptype.upcase - when "GIT" - git = ProjectGit.find(:first, :conditions => ["prj_id = ?", project.id]) - if not git.nil? then - doc.GitRepos(git.git_repos) - doc.GitBranch(git.git_branch) - end - - osList = ProjectOs.find(:all, :conditions => ["prj_id = ?", project.id]) - osList.each do |os| - doc.OS(os.os_name) - end - when "BINARY" - bin = ProjectBin.find(:first, :conditions => ["prj_id = ?", project.id]) - if not bin.nil? then - doc.PackageName(bin.pkg_name) - end - end - } - end - } - - #send_data - render :text => out_string, :content_type => "text/xml" - end end diff --git a/dibs-web/app/controllers/admin_distribution_controller.rb b/dibs-web/app/controllers/admin_distribution_controller.rb new file mode 100644 index 0000000..956c7d1 --- /dev/null +++ b/dibs-web/app/controllers/admin_distribution_controller.rb @@ -0,0 +1,195 @@ +class AdminDistributionController < ApplicationController + + before_filter :check_login_status, :check_admin_group + + def queryAllDistribution + # get full distribution list + distributions = Distribution.all + + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + + #generate to XML + doc.Data { + if not distributions.nil? + distributions.each do |distribution| + doc.DistributionName(distribution.name) + end + end + } + } + + #send_data + render :text => out_string, :content_type => "text/xml" + end + + def queryDistributionInfo + dist_name = params[:distribution] + + if dist_name.nil? or dist_name.empty? + render :text => "Distribution name is empty", :content_type => "text/xml", :status => 406 + return + end + + # get distribution + distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + if distribution.nil? + render :text => "Can't find distribution : #{dist_name}", :content_type => "text/xml", :status => 406 + return + end + + # get sync package server + sync_package_server = SyncPkgServer.find(:first, :conditions => ["distribution_id = ?", distribution.id]) + + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + + #generate to XML + doc.Data{ + doc.DistributionInfo{ + doc.DistributionName(distribution.name) + doc.PackageServerUrl(distribution.pkgsvr_url) + doc.PackageServerAddress(distribution.pkgsvr_addr) + doc.Status(distribution.status) + doc.Description(distribution.description) + } + + doc.SyncPackageServer{ + if sync_package_server.nil? + doc.Url("") + doc.Period("") + doc.Description("") + else + doc.Url(sync_package_server.pkgsvr_url) + doc.Period(sync_package_server.period) + doc.Description(sync_package_server.description) + end + } + } + } + + #send_data + render :text => out_string, :content_type => "text/xml" + end + + def addDistribution + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + dist_name = change_item[:DistributionName] + if dist_name.nil? or dist_name.empty? then + errmsg = "Can't find [#{dist_name}] information" + render :json => { :error => errmsg }, :status => 406 + return + end + + dist = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + if dist.nil? + dist = Distribution.new + dist.name = change_item[:DistributionName] + dist.pkgsvr_url = change_item[:URL] + dist.pkgsvr_addr = change_item[:Address] + dist.status = change_item[:DistStatus] + dist.description = change_item[:Description] + dist.save + + sync_pkg_svr = SyncPkgServer.new + sync_pkg_svr.distribution_id = dist.id + sync_pkg_svr.pkgsvr_url = change_item[:SyncPkgSvrUrl] + sync_pkg_svr.period = change_item[:SyncPkgSvrPeriod] + sync_pkg_svr.description = change_item[:SyncPkgSvrDescription] + sync_pkg_svr.save + else + errmsg = "Distribution[#{dist_name}] already exist" + end + + if errmsg.empty? + render :json => { :success => "OK!" } + else + render :json => { :error=> errmsg }, :status => 406 + end + end + + def removeDistribution + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + dist_name = change_item[:DistributionName] + if dist_name.nil? or dist_name.empty? then + errmsg = "Can't find [#{dist_name}] information" + render :json => { :error => errmsg }, :status => 406 + return + end + + dist = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + if dist.nil? + errmsg = "Distribution[#{dist_name}] not exist" + else + # first, remove sync package server + sync_pkg_svr = SyncPkgServer.find(:first, :conditions => ["distribution_id = ?", dist.id]) + + if not sync_pkg_svr.nil? + sync_pkg_svr.destroy + end + + # remove distribution + dist.destroy + end + + if errmsg.empty? + render :json => { :success => "OK!" } + else + render :json => { :error=> errmsg }, :status => 406 + end + end + + def modifyDistribution + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + dist_name = change_item[:DistributionName] + if dist_name.nil? or dist_name.empty? then + errmsg = "Can't find [#{dist_name}] information" + render :json => { :error => errmsg }, :status => 406 + return + end + + dist = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + if dist.nil? + errmsg = "Distribution[#{dist_name}] not exist" + else + dist.pkgsvr_url = change_item[:URL] + dist.pkgsvr_addr = change_item[:Address] + dist.status = change_item[:DistStatus] + dist.description = change_item[:Description] + dist.save + + sync_pkg_svr_url = change_item[:SyncPkgSvrUrl] + sync_pkg_svr_period = change_item[:SyncPkgSvrPeriod] + sync_pkg_svr_description = change_item[:SyncPkgSvrDescription] + if not sync_pkg_svr_url.nil? and not sync_pkg_svr_url.empty? + sync_pkg_svr = SyncPkgServer.find(:first, :conditions => ["distribution_id = ?", dist.id]) + if sync_pkg_svr.nil? + sync_pkg_svr = SyncPkgServer.new + end + sync_pkg_svr.distribution_id = dist.id + sync_pkg_svr.pkgsvr_url = sync_pkg_svr_url + sync_pkg_svr.period = sync_pkg_svr_period + sync_pkg_svr.description = sync_pkg_svr_description + sync_pkg_svr.save + end + end + + if errmsg.empty? + render :json => { :success => "OK!" } + else + render :json => { :error=> errmsg }, :status => 406 + end + end + +end diff --git a/dibs-web/app/controllers/admin_group_controller.rb b/dibs-web/app/controllers/admin_group_controller.rb new file mode 100644 index 0000000..633c815 --- /dev/null +++ b/dibs-web/app/controllers/admin_group_controller.rb @@ -0,0 +1,211 @@ +class AdminGroupController < ApplicationController + + before_filter :check_login_status, :check_admin_group + + def queryAllGroup + project_list = Project.all(:order => "name") + group_list = Group.all + + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + + doc.Data { + if not group_list.nil? + group_list.each do |group| + group_access_list = GroupProjectAccess.find(:all, :conditions => ["group_id = ?", group.id]) + + doc.Group { + doc.GroupName(group.name) + doc.AdminFlag(group.admin) + doc.Description(group.description) + + if not group_access_list.nil? + group_access_list.each do |group_right| + project = Project.find(:first, :conditions => ["id = ?", group_right.project_id]); + distribution = Distribution.find(:first, :conditions => ["id = ?", project.distribution_id]); + if not project.nil? + doc.AccessableProject { + doc.ProjectName(project.name) + doc.ProjectDistribution(distribution.name) + } + end + end + end + } + end + end + } + } + + #send_data + render :text => out_string, :content_type => "text/xml" + end + + def queryGroupInfo + group_name = params[:groupName] + if group_name.nil? or group_name.empty? + render :text => "Group name is empty", :content_type => "text/xml", :status => 406 + return + end + + group = Group.find(:first, :conditions => ["name = ?", group_name]) + if group.nil? + render :text => "Can't find group : #{group_name}", :content_type => "text/xml", :status => 406 + return + end + + project_list = Project.all(:order => "name") + + #generate to XML + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + doc.Data { + if not project_list.nil? + project_list.each do |project| + distribution = Distribution.find(:first, :conditions => ["id = ?", project.distribution_id]); + doc.Project{ + doc.Name(project.name) + doc.Id(project.id) + doc.DistName(distribution.name) + } + end + end + + doc.Group { + doc.Name(group.name) + + group_access_list = GroupProjectAccess.find(:all, :conditions => ["group_id = ?", group.id]) + + if not group_access_list.nil? and not group_access_list.empty? + project_id_list = [] + group_access_list.each do |group_right| + project_id_list.push group_right.project_id + end + + doc.ProjectList(project_id_list.join(",")) + end + } + } + } + + #send_data + render :text => out_string, :content_type => "text/xml" + end + + def modifyGroup + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + group_name = change_item[:GroupName] + if group_name.nil? or group_name.empty? + render :text => "Group name is invalid", :status => 406 + return + else + group = Group.find(:first, :conditions => ["name= ?", group_name]) + end + + if group.nil? + errmsg = "Can't find group" + else + new_group_name = change_item[:NewGroupName] + admin_flag = change_item[:AdminFlag] + description = change_item[:Description] + project_id_list = change_item[:ProjectList].split(",") + + group.name = new_group_name + group.admin = admin_flag + group.description = description + group.save + + GroupProjectAccess.delete_all(["group_id = ?", group.id]) + + project_id_list.each do |project_id| + item = GroupProjectAccess.new + item.group_id = group.id + item.project_id = project_id + item.build = "TRUE" + item.save + end + end + + + if errmsg.empty? + render :json => { :success => "OK!" } + else + render :text => errmsg, :status => 406 + end + end + + def removeGroup + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + group_name = change_item[:GroupName] + if group_name.nil? or group_name.empty? + render :text => "Group name is invalid", :status => 406 + return + else + group = Group.find(:first, :conditions => ["name= ?", group_name]) + end + + if group.nil? + errmsg = "Can't find group" + else + user_group = UserGroup.find(:first, :conditions => ["group_id = ?", group.id]) + if user_group.nil? + GroupProjectAccess.delete_all(["group_id = ?", group.id]) + group.destroy + else + errmsg = "Can't remove. #{group_name} has users." + end + end + + if errmsg.empty? + render :json => { :success => "OK!" } + else + render :text => errmsg, :status => 406 + end + end + + def addGroup + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + group_name = change_item[:GroupName] + if group_name.nil? or group_name.empty? + render :text => "Group name is invalid", :status => 406 + return + else + group = Group.find(:first, :conditions => ["name= ?", group_name]) + end + + if not group.nil? + errmsg = "Group already exist" + else + group = Group.new + group.name = group_name + group.admin = change_item[:AdminFlag] + group.description = change_item[:Description] + group.save + + project_id_list = change_item[:ProjectList].split(",") + project_id_list.each do |project_id| + group_project_access = GroupProjectAccess.new + group_project_access.group_id = group.id + group_project_access.project_id = project_id + group_project_access.save + end + end + + if errmsg.empty? + render :json => { :success => "OK!" } + else + render :text => errmsg, :status => 406 + end + end +end diff --git a/dibs-web/app/controllers/admin_project_controller.rb b/dibs-web/app/controllers/admin_project_controller.rb new file mode 100644 index 0000000..21fa703 --- /dev/null +++ b/dibs-web/app/controllers/admin_project_controller.rb @@ -0,0 +1,248 @@ +class AdminProjectController < ApplicationController + def queryAllProject + project_list = Project.all(:order => "name") + + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + + doc.Data { + if not project_list.nil? + project_list.each do |project| + distribution = Distribution.find(:first, :conditions => ["id = ?", project.distribution_id]); + doc.Project{ + doc.Name(project.name) + doc.Id(project.id) + doc.DistName(distribution.name) + } + end + end + } + } + + #send_data + render :text => out_string, :content_type => "text/xml" + end + + def queryProjectsInDistribution + dist_name = params[:distribution] + + if dist_name.nil? or dist_name.empty? + render :text => "Distribution name is empty", :content_type => "text/xml", :status => 406 + return + end + + # get distribution + distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + if distribution.nil? + render :text => "Can't find distribution : #{dist_name}", :content_type => "text/xml", :status => 406 + return + end + + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + + #generate to XML + doc.Data{ + project_list = Project.find_by_sql("SELECT projects.id + , projects.name + , projects.ptype + FROM projects + , distributions + WHERE distributions.name = \"#{dist_name}\" + AND distributions.id = projects.distribution_id ") + if not project_list.nil? + project_list.each do |project| + doc.Project { + doc.ProjectName(project.name) + doc.Type(project.ptype) + + case project.ptype.upcase + when "GIT" + git = ProjectGit.find(:first, :conditions => ["project_id = ?", project.id]) + if not git.nil? then + doc.GitRepos(git.git_repos) + doc.GitBranch(git.git_branch) + end + + os_list = ProjectOs.find(:all, :conditions => ["project_id = ?", project.id]) + if not os_list.nil? then + os_list.each do |os| + supported_os = SupportedOs.find(:first, :conditions => ["id = ?", os.supported_os_id]) + doc.OS(supported_os.name) + end + end + when "BINARY" + bin = ProjectBin.find(:first, :conditions => ["project_id = ?", project.id]) + if not bin.nil? then + doc.PackageName(bin.pkg_name) + end + end + } + end + end + } + } + + #send_data + render :text => out_string, :content_type => "text/xml" + end + + def addProject + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + project_name = change_item[:Name] + project_type = change_item[:ProjectType].upcase + project_dist_name = change_item[:Distribution] + project_password = change_item[:ProjectPass] + + if project_name.nil? or project_name.empty? then + errmsg = "Can't find [Name] information" + 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]) + + if not project.nil? + errmsg = "project already exist" + render :json => { :error => errmsg }, :status => 406 + return + end + + project = Project.new + project.name = project_name + project.ptype = project_type + project.password = project_password + project.distribution_id = distribution.id + project.save + + case project.ptype + when "GIT" + git = ProjectGit.new + git.project_id = project.id + git.git_repos = change_item[:Address] + git.git_branch = change_item[:Branch] + git.save + + os_name_list = change_item[:OSNameList].split(",") + os_name_list.each do |os_name| + supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name]) + #need check not found + project_os = ProjectOs.new + project_os.project_id = project.id + project_os.supported_os_id = supported_os.id + project_os.save + end + when "BINARY" + binary = ProjectBin.new + binary.project_id = project.id + binary.pkg_name = change_item[:PackageName] + binary.save + else + project.destroy + errmsg = "project type is invalid" + render :json => { :error => errmsg }, :status => 406 + return + end + + render :json => { :success => "OK!" } + end + + def removeProject + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + if change_item[:Name].nil? or change_item[:Name].empty? then + errmsg = "Can't find [Name] information" + render :json => { :error => errmsg }, :status => 406 + return + end + + dist_name = change_item[:Distribution] + project_name = change_item[:Name] + project_type = change_item[:ProjectType] + distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + project = Project.find(:first, :conditions => ["name = ? and distribution_id = ?", project_name, distribution.id]) + + if project.nil? + errmsg = "project does not exist" + render :json => { :error => errmsg }, :status => 406 + return + end + + case project_type.upcase + when "GIT" + ProjectGit.delete_all(["project_id = ?", project.id]) + ProjectOs.delete_all(["project_id = ?", project.id]) + GroupProjectAccess.delete_all(["project_id = ?", project.id]) + when "BINARY" + ProjectBin.delete_all(["project_id = ?", project.id]) + GroupProjectAccess.delete_all(["project_id = ?", project.id]) + else + errmsg = "project type is invalid" + render :json => { :error => errmsg }, :status => 406 + return + end + + project.destroy + render :json => { :success => "OK!" } + end + + def modifyProject + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + if change_item[:Name].nil? or change_item[:Name].empty? then + errmsg = "Can't find [Name] information" + render :json => { :error => errmsg }, :status => 406 + return + end + + dist_name = change_item[:Distribution] + old_project_name = change_item[:Name] + project_type = change_item[:ProjectType].upcase + + 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] + + case project_type + when "GIT" + project_git = ProjectGit.find(:first, :conditions => ["project_id = ?", project.id]) + project_git.git_repos = change_item[:ProjectAddress] + project_git.git_branch = change_item[:ProjectBranch] + project_git.save + + ProjectOs.delete_all(["project_id = ?", project.id]) + + os_name_list = change_item[:OSNameList].split(",") + os_name_list.each do |os_name| + supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name]) + #need check not found + project_os = ProjectOs.new + project_os.project_id = project.id + project_os.supported_os_id = supported_os.id + project_os.save + end + when "BINARY" + project_bin = ProjectBin.find(:first, :conditions => ["project_id = ?", project.id]) + project_bin.pkg_name = change_item[:PackageName] + project_bin.save + else + errmsg = "project type invalid" + render :json => { :error=> errmsg }, :status => 406 + return + end + + project.save + render :json => { :success => "OK!" } + end +end diff --git a/dibs-web/app/controllers/admin_server_controller.rb b/dibs-web/app/controllers/admin_server_controller.rb new file mode 100644 index 0000000..a6ba39f --- /dev/null +++ b/dibs-web/app/controllers/admin_server_controller.rb @@ -0,0 +1,386 @@ +class AdminServerController < ApplicationController + def queryAllServer + # get full distribution list + server_config = Server_config.all + remote_build_servers = RemoteBuildServer.all + + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + + #generate to XML + doc.Data { + if not server_config.nil? + server_config.each do |info| + doc.ServerConfig { + doc.Property( info.property ) + doc.Value( info.value ) + } + end + end + + if not remote_build_servers.nil? + remote_build_servers.each do |server| + doc.RemoteBuildServer { + doc.Address(server.svr_addr) + doc.Description(server.description) + } + end + end + } + } + + #send_data + render :text => out_string, :content_type => "text/xml" + end + + def addRemoteBuildServer + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + address = change_item[:Address] + description = change_item[:Description] + if address.nil? or address.empty? + errmsg = "Server address is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + # get server for error check + server = RemoteBuildServer.find(:first, :conditions => ["svr_addr = ?", address]) + + if server.nil? + server = RemoteBuildServer.new + server.svr_addr = address + server.description = description + server.save + + render :json => { :success => "OK!" } + else + errmsg = "Server already exist" + + render :json => { :error => errmsg }, :status => 406 + end + end + + def modifyRemoteBuildServer + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + address = change_item[:Address] + if address.nil? or address.empty? + errmsg = "Server address is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + server = RemoteBuildServer.find(:first, :conditions => ["svr_addr = ?", address]) + + if server.nil? + errmsg = "Server does not exist" + else + new_address = change_item[:NewAddress] + description = change_item[:Description] + + # error check for server already exist + if not address.eql? new_address + new_server = RemoteBuildServer.find(:first, :conditions => ["svr_addr = ?", new_address]) + + if not new_server.nil? + errmsg = "Server already exist" + end + end + + server.svr_addr = new_address + server.description = description + server.save + end + + + if errmsg.empty? + render :json => { :success => "OK!" } + else + render :json => { :error => errmsg }, :status => 406 + end + end + + def removeRemoteBuildServer + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + address = change_item[:Address] + if address.nil? or address.empty? + errmsg = "Server address is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + server = RemoteBuildServer.find(:first, :conditions => ["svr_addr = ?", address]) + + if server.nil? + errmsg = "Server does not exist" + render :json => { :error => errmsg }, :status => 406 + else + server.destroy + render :json => { :success => "OK!" } + end + end + + def addOsCategory + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + name = change_item[:Name] + if name.nil? or name.empty? + errmsg = "Os category name is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + # get server for error check + osCategory = OsCategory.find(:first, :conditions => ["name = ?", name]) + + if osCategory.nil? + osCategory= OsCategory.new + osCategory.name = name + osCategory.save + + render :json => { :success => "OK!" } + else + errmsg = "Os category already exist" + + render :json => { :error => errmsg }, :status => 406 + end + end + + def removeOsCategory + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + name = change_item[:Name] + if name.nil? or name.empty? + errmsg = "Os category name is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + # get server for error check + osCategory = OsCategory.find(:first, :conditions => ["name = ?", name]) + + if osCategory.nil? + errmsg = "Can't find os category" + render :json => { :error => errmsg }, :status => 406 + else + osCategory.destroy + render :json => { :success => "OK!" } + end + end + + def addSupportedOS + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + os_name = change_item[:Name] + category_name = change_item[:OsCategory] + if os_name.nil? or os_name.empty? + errmsg = "Os name is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + if category_name.nil? or category_name.empty? + errmsg = "Os category is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + # get server for error check + os_category = OsCategory.find(:first, :conditions => ["name = ?", category_name]) + supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name]) + + if os_category.nil? + errmsg = "Os category does not exist" + + render :json => { :error => errmsg }, :status => 406 + elsif not supported_os.nil? + errmsg = "supported os already exist" + + render :json => { :error => errmsg }, :status => 406 + else + supported_os = SupportedOs.new + supported_os.name = os_name + supported_os.os_category_id = os_category.id + supported_os.save + + render :json => { :success => "OK!" } + end + end + + def removeSupportedOS + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + os_name = change_item[:Name] + if os_name.nil? or os_name.empty? + errmsg = "Os name is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + # get server for error check + supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name]) + + if supported_os.nil? + errmsg = "supported os does not exist" + + render :json => { :error => errmsg }, :status => 406 + else + supported_os.destroy + + render :json => { :success => "OK!" } + end + end + + def modifySupportedOS + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + os_name = change_item[:Name] + new_os_name = change_item[:NewName] + category_name = change_item[:OsCategory] + if os_name.nil? or os_name.empty? + errmsg = "Os name is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + # get server for error check + os_category = OsCategory.find(:first, :conditions => ["name = ?", category_name]) + supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name]) + + if os_category.nil? + errmsg = "Os category does not exist" + + render :json => { :error => errmsg }, :status => 406 + elsif supported_os.nil? + errmsg = "supported os does not exist" + + render :json => { :error => errmsg }, :status => 406 + else + if not os_name.eql? new_os_name + new_supported_os = SupportedOs.find(:first, :conditions => ["name = ?", new_os_name]) + if new_supported_os.nil? + supported_os.name = new_os_name + else + errmsg = "supported os already exist" + + render :json => { :error => errmsg }, :status => 406 + return + end + end + + supported_os.os_category_id = os_category.id + supported_os.save + + render :json => { :success => "OK!" } + end + end + + def addServerInfo + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + property = change_item[:Property] + value = change_item[:Value] + if property.nil? or property.empty? + errmsg = "Property name is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + if value.nil? or value.empty? + errmsg = "Value is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + # get server for error check + config = Server_config.find(:first, :conditions => ["property = ?", property]) + + if not config.nil? + errmsg = "Config alerady exist" + render :json => { :error => errmsg }, :status => 406 + else + config = Server_config.new + config.property = property + config.value = value + config.save + + render :json => { :success => "OK!" } + end + end + + def modifyServerInfo + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + property = change_item[:Property] + value = change_item[:Value] + if property.nil? or property.empty? + errmsg = "Property is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + if value.nil? or value.empty? + errmsg = "Value is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + # get server for error check + config = Server_config.find(:first, :conditions => ["property = ?", property]) + + if config.nil? + errmsg = "Config does not exist" + render :json => { :error => errmsg }, :status => 406 + else + config.value = value + config.save + + render :json => { :success => "OK!" } + end + end + + def removeServerInfo + change_group_list = params[:ChangeInfoList] + change_item = change_group_list[0] + errmsg = "" + + property = change_item[:Property] + if property.nil? or property.empty? + errmsg = "Property is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + # get server for error check + config = Server_config.find(:first, :conditions => ["property = ?", property]) + + if config.nil? + errmsg = "Property does not exist" + render :json => { :error => errmsg }, :status => 406 + else + config.destroy + render :json => { :success => "OK!" } + end + end + +end diff --git a/dibs-web/app/controllers/admin_user_controller.rb b/dibs-web/app/controllers/admin_user_controller.rb new file mode 100644 index 0000000..c79f8e1 --- /dev/null +++ b/dibs-web/app/controllers/admin_user_controller.rb @@ -0,0 +1,109 @@ +class AdminUserController < ApplicationController + + before_filter :check_login_status, :check_admin_group + + def queryAllUser + user_list = User.all + + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + + doc.Data { + if not user_list.nil? + user_list.each do |user| + doc.User { + doc.Name(user.name) + doc.Email(user.email) + doc.GroupList { + group_list = Group.find_by_sql("SELECT groups.name + , groups.admin + , groups.description + FROM users + , user_groups + , groups + WHERE users.id = user_groups.user_id + AND user_groups.group_id = groups.id + AND users.email = \"#{user.email}\"") + group_list.each { |group| + doc.GroupName(group.name) + } + } + } + end + end + } + } + + #send_data + render :text => out_string, :content_type => "text/xml" + end + + def modifyUser + change_user_list = params[:ChangeInfoList] + change_item = change_user_list[0] + errmsg = "" + + email = change_item[:Email] + group_name = change_item[:GroupName] + user_name = change_item[:UserName] + + if email.nil? or email.empty? + render :text => "Email is invalid", :status => 406 + return + else + user = User.find(:first, :conditions => ["email = ?", email]) + + if user.nil? + errmsg = "Can't find user information" + render :text => errmsg, :status => 406 + return + end + end + + if group_name.nil? or group_name.empty? + render :text => "Group name is invalid", :status => 406 + return + else + group = Group.find(:first, :conditions => ["name = ?", group_name]) + if group.nil? + errmsg = "Can't find group information" + render :text => errmsg, :status => 406 + return + end + end + puts user.id + UserGroup.delete_all(["user_id = ?", user.id]) + + user_groups = UserGroup.new + + user_groups.user_id = user.id + user_groups.group_id = group.id + user_groups.status = "ACTIVE" + user_groups.save + + render :json => { :success => "OK!" } + end + + def removeUser + change_user_list = params[:ChangeInfoList] + change_item = change_user_list[0] + errmsg = "" + + email = change_item[:Email] + if email.nil? or email.empty? + render :text => "Email is invalid", :status => 406 + return + else + user = User.find(:first, :conditions => ["email = ?", email]) + end + + if user.nil? + errmsg = "Can't find user information" + render :text => errmsg, :status => 406 + else + user.destroy + render :json => { :success => "OK!" } + end + end +end diff --git a/dibs-web/app/controllers/application_controller.rb b/dibs-web/app/controllers/application_controller.rb index 0636e17..c3be257 100644 --- a/dibs-web/app/controllers/application_controller.rb +++ b/dibs-web/app/controllers/application_controller.rb @@ -4,30 +4,124 @@ class ApplicationController < ActionController::Base helper_method :current_user def get_user_id - return @current_user + if @current_user.nil? + current_user + end + + if not @current_user.nil? + return @current_user.id + else + return nil + end end + def get_user_email + if @current_user.nil? + current_user + end + + if not @current_user.nil? + return @current_user.email + else + return nil + end + end + + def get_group_list(email) + if not email.nil? + group_list = Group.find_by_sql("SELECT groups.id + , groups.name + , groups.admin + , groups.description + FROM users + , user_groups + , groups + WHERE users.id = user_groups.user_id + AND user_groups.group_id = groups.id + AND users.email = \"#{email}\"") + return group_list + else + return nil + end + end + + def is_admin(email) + if not email.nil? + group = Group.find_by_sql("SELECT count(*) AS cnt + FROM users + , user_groups + , groups + WHERE users.id = user_groups.user_id + AND user_groups.group_id = groups.id + AND groups.admin = 'TRUE' + AND users.email = \"#{email}\"") + if group[0].cnt > 0 + return TRUE + end + end + + return FALSE + end + + def generate_xml_header(doc) + email = get_user_email + group_list = get_group_list(email) + if is_admin(email) + admin = "TRUE" + else + admin = "FALSE" + end + + doc.Header { + doc.UserInfo { + doc.Email(email) + doc.Name(@current_user.name) + doc.Admin(admin) + doc.GroupList { + group_list.each { |group| + doc.Group { + doc.GroupName(group.name) + doc.GroupAdmin(group.admin) + doc.GroupDescription(group.description) + } + } + } + } + } + end + private def current_user - @current_user ||= User.find(session[:user_id]) if session[:user_id] + @current_user ||= User.find(:first, :conditions => {:email => session[:user_email]}) if session[:user_email] end def check_login_status - if session[:user_id].nil? then + if session[:user_email].nil? then render :nothing => true, :status => 401 return end end def check_admin_group - if session[:user_id].nil? or session[:user_id].empty? then + if session[:user_email].nil? or session[:user_email].empty? then render :nothing => true, :status => 401 return false else - user_id = session[:user_id] - user = User.find(:first, :conditions => ["email = ?", user_id]) + admin = "FALSE" + user_email = session[:user_email] + + user = User.find(:first, :conditions => ["email = ?", user_email]) + + group_list = get_group_list(user.email) + + group_list.each {|group| + if group.admin == "TRUE" + admin = "TRUE" + break; + end + } - if user.nil? or (not user.group_id == 0) + if user.nil? or admin != "TRUE" render :nothing => true, :status => 401 return false end diff --git a/dibs-web/app/controllers/jobs_controller.rb b/dibs-web/app/controllers/jobs_controller.rb index ab726bd..f1b4fe1 100644 --- a/dibs-web/app/controllers/jobs_controller.rb +++ b/dibs-web/app/controllers/jobs_controller.rb @@ -2,167 +2,330 @@ class JobsController < ApplicationController before_filter :check_login_status + Query_cnt = 30 + def list end - def job_list + def listAll + listQuery(params[:distribution], params[:lastID], "", "") + end + + def listSearchId + listQuery("%", "%", "%") + end + + def listSearchUser + listQuery(params[:distribution], params[:lastID], params[:user], "") + end - job_cnt = Job.count() + def listSearchDate + listQuery(params[:distribution], params[:lastID], "", params[:date]) + end - if job_cnt <= 0 - render :text => "", - :content_type => "text/xml" - return + def listQuery(distribution, last_id, user, date) + if(distribution == "ALL") + distribution = "%" end - if(params[:lastID].to_i == 0) + if(last_id == "LATEST") last_job_id = Job.maximum("id") + if last_job_id.nil? + last_job_id = 0 + end else - last_job_id = params[:lastID].to_i - 1 + last_job_id = last_id.to_i - 1 end - first_job_id = last_job_id - 10 - - jobs = Job.find_by_sql("SELECT jobs.id - , projects.dist_name \"distribution\" - , projects.name \"project_name\" - , jobs.jtype \"job_type\" - , CASE WHEN jobs.parent_job_id = -1 THEN \"SINGLE\" - WHEN jobs.parent_job_id = jobs.id THEN \"MULTI\" - ELSE \"CHILD\" END \"job_attribute\" - , jobs.os_name - , jobs.status - , jobs.parent_job_id - , jobs.start_time - , jobs.end_time - , users.name user_name - FROM jobs - , users - , projects - WHERE jobs.id > #{first_job_id} AND jobs.id <= #{last_job_id} - AND jobs.user_id = users.id - AND jobs.prj_id = projects.id - ORDER BY jobs.id DESC") + user = user + "%" + date = date + "%" + + first_job_id = last_job_id - Query_cnt + + jobs = Job.find_by_sql("SELECT jobs.id + , CASE WHEN jobs.jtype like 'MULTI%' THEN 'MULTI' + ELSE 'SINGLE' END AS job_attribute + FROM jobs + LEFT JOIN projects + ON jobs.project_id = projects.id + LEFT JOIN users + ON jobs.user_id = users.id + LEFT JOIN supported_os + ON jobs.supported_os_id = supported_os.id + LEFT JOIN distributions + ON jobs.distribution_id = distributions.id + LEFT JOIN remote_build_servers + ON jobs.remote_build_server_id = remote_build_servers.id + LEFT JOIN sources + ON jobs.source_id = sources.id + WHERE jobs.id > #{first_job_id} AND jobs.id <= #{last_job_id} + AND jobs.parent_job_id IS NULL + AND users.name like \"#{user}\" + AND distributions.name like \"#{distribution}\" + AND DATE(jobs.start_time) like \"#{date}\" + ORDER BY jobs.id DESC") #generate to XML doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) doc.JobList { - jobs.each {|job| + jobs.each {|job_list| + job = get_job_info(job_list.id) + doc.Job { - doc.Id(job.id) - doc.Distribution(job.distribution) + doc.Id(job.job_id) + doc.Distribution(job.distribution_name) doc.ProjectName(job.project_name) doc.JobType(job.job_type) - doc.JobAttribute(job.job_attribute) - doc.Os(job.os_name) + doc.JobAttribute(job_list.job_attribute) + doc.Os(job.supported_os_name) doc.Status(job.status) doc.UserName(job.user_name) doc.StartTime(job.start_time) doc.EndTime(job.end_time) - doc.LogLink("/jobs/log/#{job.id}") } + + if job_list.job_attribute == "MULTI" + child_jobs = get_child_job_info(job.job_id) + child_jobs.each {|job| + doc.Job { + doc.Id(job.job_id) + doc.Distribution(job.distribution_name) + doc.ProjectName(job.project_name) + doc.JobType(job.job_type) + doc.JobAttribute("CHILD") + doc.Os(job.supported_os_name) + doc.Status(job.status) + doc.UserName(job.user_name) + doc.StartTime(job.start_time) + doc.EndTime(job.end_time) + } + } + end } } - render :text => out_string, - :content_type => "text/xml" + render :text => out_string, :content_type => "text/xml" + return end - def log_list - list_cnt = 10 - request_page_num = params[:requestPageNum] - current_page_num = params[:currentPageNum] + def listSearchGroup + distribution = params[:distribution] + last_id = params[:lastID] + group = params[:group] - - if request_page_num == "back" - request_page_number = current_page_num.to_i - 1 - elsif request_page_num == "next" - request_page_number = current_page_num.to_i + 1 - else - request_page_number = request_page_num.to_i + if(distribution == "ALL") + distribution = "%" end -puts "current page num " + current_page_num -puts "request page num " -puts request_page_number - - max_job_id = Job.maximum("id") - - last_job_id = max_job_id - ((request_page_number - 1) * list_cnt) - first_job_id = last_job_id - list_cnt - - jobs = Job.find_by_sql("SELECT jobs.id - , CASE WHEN jobs.parent_job_id = -1 THEN projects.dist_name - ELSE \"\" END \"distribution\" - , CASE WHEN jobs.parent_job_id = -1 THEN projects.name - ELSE \"\" END \"project_name\" - , CASE WHEN jobs.parent_job_id = -1 THEN jobs.jtype - ELSE \"┗\" END \"job_type\" - , jobs.os_name - , jobs.status - , jobs.parent_job_id - , users.name user_name - FROM jobs - , users - , projects - WHERE jobs.id between #{first_job_id} AND #{last_job_id} - AND jobs.user_id = users.id - AND jobs.prj_id = projects.id - ORDER BY jobs.id DESC") - - job_cnt = Job.count('id') - - temp1 = request_page_number / 10 - temp2 = temp1+1 - first_page_num = (temp1.to_s + "1").to_i - last_page_num = (temp2.to_s + "0").to_i - - if (job_cnt.to_f / list_cnt.to_f).ceil < last_page_num - last_page_num = (job_cnt.to_f / list_cnt.to_f).ceil + + if(last_id == "LATEST") + last_job_id = Job.maximum("id") + if last_job_id.nil? + last_job_id = 0 + end + else + last_job_id = last_id.to_i - 1 end + group = group + "%" + + first_job_id = last_job_id - Query_cnt + + jobs = Job.find_by_sql("SELECT jobs.id + , CASE WHEN jobs.jtype like 'MULTI%' THEN 'MULTI' + ELSE 'SINGLE' END AS job_attribute + FROM jobs + LEFT JOIN distributions ON jobs.distribution_id = distributions.id + WHERE jobs.id > #{first_job_id} AND jobs.id <= #{last_job_id} + AND jobs.parent_job_id IS NULL + AND distributions.name like \"#{distribution}\" + AND jobs.user_id IN (SELECT users.id + FROM users + LEFT JOIN user_groups ON user_groups.user_id = users.id + LEFT JOIN groups ON groups.id = user_groups.group_id + WHERE groups.name LIKE \"#{group}\") + ORDER BY jobs.id DESC") + #generate to XML doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) doc.JobList { - jobs.each {|job| + jobs.each {|job_list| + job = get_job_info(job_list.id) + doc.Job { - doc.Id(job.id) - doc.Distribution(job.distribution) + doc.Id(job.job_id) + doc.Distribution(job.distribution_name) doc.ProjectName(job.project_name) - doc.JobAttribute(job.job_type) - doc.Os(job.os_name) + doc.JobType(job.job_type) + doc.JobAttribute(job_list.job_attribute) + doc.Os(job.supported_os_name) doc.Status(job.status) doc.UserName(job.user_name) - doc.LogLink("/jobs/log/#{job.id}") + doc.StartTime(job.start_time) + doc.EndTime(job.end_time) } - child_cnt = Job.count(:conditions => ["parent_id = ?", job.id]) - if (job.job_attribute == "MULTI" and child_cnt == 0) - doc.Job { - doc.Id(job.id) - doc.Distribution(job.distribution) - doc.ProjectName(job.project_name) - doc.JobAttribute(job.job_type) - doc.Os("MULTI") - doc.Status(job.status) - doc.UserName(job.user_name) - doc.LogLink("/jobs/log/#{job.id}") + + if job_list.job_attribute == "MULTI" + child_jobs = get_child_job_info(job.job_id) + child_jobs.each {|job| + doc.Job { + doc.Id(job.job_id) + doc.Distribution(job.distribution_name) + doc.ProjectName(job.project_name) + doc.JobType(job.job_type) + doc.JobAttribute("CHILD") + doc.Os(job.supported_os_name) + doc.Status(job.status) + doc.UserName(job.user_name) + doc.StartTime(job.start_time) + doc.EndTime(job.end_time) + } } end } + } + + render :text => out_string, :content_type => "text/xml" + return + end - doc.PageList{ - for page_num in first_page_num .. last_page_num - if page_num == request_page_number - doc.Page(page_num, "Current" => "TRUE") - else - doc.Page(page_num, "Current" => "FALSE") - end - end + def listSearchProject + distribution = params[:distribution] + last_id = params[:lastID] + project = params[:project] + + if(distribution == "ALL") + distribution = "%" + end + + if(last_id == "LATEST") + last_job_id = Job.maximum("id") + if last_job_id.nil? + last_job_id = 0 + end + else + last_job_id = last_id.to_i - 1 + end + + project = project + "%" + + first_job_id = last_job_id - Query_cnt + + jobs = Job.find_by_sql("SELECT jobs.id + , CASE WHEN jobs.jtype like \"MULTI%\" THEN \"MULTI\" + ELSE \"SINGLE\" END \"job_attribute\" + FROM jobs + LEFT JOIN projects + ON jobs.project_id = projects.id + LEFT JOIN users + ON jobs.user_id = users.id + LEFT JOIN supported_os + ON jobs.supported_os_id = supported_os.id + LEFT JOIN distributions + ON jobs.distribution_id = distributions.id + LEFT JOIN remote_build_servers + ON jobs.remote_build_server_id = remote_build_servers.id + LEFT JOIN sources + ON jobs.source_id = sources.id + WHERE jobs.id > #{first_job_id} AND jobs.id <= #{last_job_id} + AND projects.name like \"#{project}\" + ORDER BY jobs.id DESC") + + #generate to XML + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.JobList { + jobs.each {|job_list| + job = get_job_info(job_list.id) + + doc.Job { + doc.Id(job.job_id) + doc.Distribution(job.distribution_name) + doc.ProjectName(job.project_name) + doc.JobType(job.job_type) + doc.JobAttribute(job_list.job_attribute) + doc.Os(job.supported_os_name) + doc.Status(job.status) + doc.UserName(job.user_name) + doc.StartTime(job.start_time) + doc.EndTime(job.end_time) + } } } - render :text => out_string, - :content_type => "text/xml" + render :text => out_string, :content_type => "text/xml" + return + end + + def get_job_info(job_id) + jobs = Job.find_by_sql("SELECT jobs.id AS job_id + , jobs.jtype AS job_type + , jobs.status AS status + , DATE_FORMAT(jobs.start_time, '%Y-%m-%d %H:%i:%s') AS start_time + , DATE_FORMAT(jobs.end_time, '%Y-%m-%d %H:%i:%s') AS end_time + , projects.name AS project_name + , projects.ptype AS project_type + , users.name AS user_name + , users.email AS user_email + , supported_os.name AS supported_os_name + , distributions.name AS distribution_name + , distributions.pkgsvr_url AS pkgsvr_url + , distributions.pkgsvr_addr AS pkgsvr_addr + , distributions.description AS distribution_desc + , remote_build_servers.svr_addr AS remote_build_server_addr + , remote_build_servers.description AS remote_build_server_desc + , sources.pkg_ver AS pkg_ver + , sources.location AS location + FROM jobs + LEFT JOIN projects + ON jobs.project_id = projects.id + LEFT JOIN users + ON jobs.user_id = users.id + LEFT JOIN supported_os + ON jobs.supported_os_id = supported_os.id + LEFT JOIN distributions + ON jobs.distribution_id = distributions.id + LEFT JOIN remote_build_servers + ON jobs.remote_build_server_id = remote_build_servers.id + LEFT JOIN sources + ON jobs.source_id = sources.id + WHERE jobs.id = #{job_id}") + return jobs[0] + end + + def get_child_job_info(parent_job_id) + job = Job.find_by_sql("SELECT jobs.id AS job_id + , jobs.jtype AS job_type + , jobs.status AS status + , DATE_FORMAT(jobs.start_time, '%Y-%m-%d %H:%i:%s') AS start_time + , DATE_FORMAT(jobs.end_time, '%Y-%m-%d %H:%i:%s') AS end_time + , projects.name AS project_name + , projects.ptype AS project_type + , users.name AS user_name + , users.email AS user_email + , supported_os.name AS supported_os_name + , distributions.name AS distribution_name + , distributions.pkgsvr_url AS pkgsvr_url + , distributions.pkgsvr_addr AS pkgsvr_addr + , distributions.description AS distribution_desc + , remote_build_servers.svr_addr AS remote_build_server_addr + , remote_build_servers.description AS remote_build_server_desc + , sources.pkg_ver AS pkg_ver + , sources.location AS location + FROM jobs + LEFT JOIN projects + ON jobs.project_id = projects.id + LEFT JOIN users + ON jobs.user_id = users.id + LEFT JOIN supported_os + ON jobs.supported_os_id = supported_os.id + LEFT JOIN distributions + ON jobs.distribution_id = distributions.id + LEFT JOIN remote_build_servers + ON jobs.remote_build_server_id = remote_build_servers.id + LEFT JOIN sources + ON jobs.source_id = sources.id + WHERE jobs.parent_job_id = #{parent_job_id}") + return job end def log @@ -181,7 +344,7 @@ puts request_page_number line = params[:line].to_i file_name = "log" - directory = "~/sdk-build/test/build-server.multi-svr1/buildsvr01/jobs/#{id}" + directory = "~/temp/sdk-build/test/build-server.basic1/buildsvr01/jobs/#{id}" # create the file path path = File.join(directory, file_name) diff --git a/dibs-web/app/controllers/projects_controller.rb b/dibs-web/app/controllers/projects_controller.rb index f963ca8..77728e7 100644 --- a/dibs-web/app/controllers/projects_controller.rb +++ b/dibs-web/app/controllers/projects_controller.rb @@ -13,52 +13,36 @@ class ProjectsController < ApplicationController def buildProject # get information : dist_name, project_hash, password - project_param = params[:BuildProjectList] - build_type = params[:type] - project_hash = Hash.new - dist_name = "" - - # get build project list - project_param.each do |prj| - if prj.has_key?("distribution") - dist_name = prj[:distribution] - project_param.delete(prj) - end - end - - project_param.each do |prj| - project_name = prj[:project] - os = prj[:os] - - if not project_hash.key? project_name - # get project in db - project = Project.find(:first, :conditions => ["name = ? AND dist_name =?", project_name, dist_name]) + change_group_list = params[:ChangeInfoList] - if project.nil? - next - else - project_hash[project_name] = [project.password, [os]] - end - else - project_hash[project_name][1].push os - end - end - project_list = [] os_list = [] password_list = [] - project_hash.each { |key,value| - project_list.push key - password_list.push value[0] - os_list.push value[1].join(",") - } + + dist_name = nil + build_type = nil + + change_group_list.each do |change_item| + dist_name = change_item[:distribution] + build_type = change_item[:buildType] + project_name = change_item[:projectName] + os = change_item[:os] + + distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + project = Project.find(:first, :conditions => ["name = ? AND distribution_id =?", project_name, distribution.id]) + + project_list.push project.name + password_list.push project.password + os_list.push os + end + project_list.uniq! os_list.uniq! password_list.uniq! if (project_list.length > 1) or (not (project_list[0].nil? or project_list[0].empty?)) # execute build command - ret = Utils.sbi_build_command(build_type, dist_name, project_list, os_list, password_list,get_user_id) + ret = Utils.sbi_build_command(build_type, dist_name, project_list, os_list, password_list, get_user_email) render :json => { :success => "OK!" } else @@ -67,75 +51,195 @@ class ProjectsController < ApplicationController end - def queryProject - distribution = params[:distribution] + def queryPackageInfo(project_id, os_id) + packages = Project.find_by_sql("SELECT sources.pkg_ver AS pkg_ver + , packages.pkg_name AS pkg_name + , DATE_FORMAT(jobs.start_time, '%Y-%m-%d %H:%i:%s') AS start_time + , DATE_FORMAT(jobs.end_time, '%Y-%m-%d %H:%i:%s') AS end_time + , users.name AS user_name + , users.email AS user_email + FROM projects + LEFT JOIN sources ON projects.id = sources.project_id + LEFT JOIN packages ON sources.id = packages.source_id + LEFT JOIN jobs ON jobs.source_id = sources.id + AND jobs.supported_os_id = packages.supported_os_id + LEFT JOIN users ON jobs.user_id = users.id + WHERE projects.id = #{project_id} + AND packages.supported_os_id = #{os_id} + GROUP BY packages.pkg_name + ORDER BY jobs.id DESC") + return packages + end + + def checkUserAccessProject(user_id, project_id) + row = Project.find_by_sql("SELECT COUNT(*) AS cnt + FROM user_groups + , groups + , group_project_accesses + WHERE user_groups.group_id = groups.id + AND groups.id = group_project_accesses.group_id + AND user_groups.user_id = #{user_id} + AND group_project_accesses.project_id = #{project_id}") + if row[0].cnt > 0 + return TRUE + end + + return FALSE + end + + def queryProjectsInfoInDistribution + dist_name = params[:distribution] + + user_id = get_user_id + distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + projects = Project.find(:all, :conditions => ["distribution_id = ?", distribution.id], :order => "name") + + #generate to XML + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + doc.Data { + doc.ProjectList { + projects.each { |project| + doc.Project { + doc.Name(project.name) + doc.Type(project.ptype) + if checkUserAccessProject(user_id, project.id) + doc.GroupAccess("TRUE") + else + doc.GroupAccess("FALSE") + end + + os_list = ProjectOs.find(:all, :conditions => ["project_id = ?", project.id], :order => "supported_os_id") + os_list.each { |os| + doc.ProjectOs { + os_info = SupportedOs.find(:first, :conditions => ["id = ?", os.supported_os_id]) + packageList = queryPackageInfo(project.id, os.supported_os_id) + + doc.OsName(os_info.name) + + packageList.each { |package| + doc.Package { + if package.nil? + doc.PackageName() + doc.PackageVersion() + doc.StartTime() + doc.EndTime() + doc.UserName() + doc.UserEmail() + else + doc.PackageName(package.pkg_name) + doc.PackageVersion(package.pkg_ver) + doc.StartTime(package.start_time) + doc.EndTime(package.end_time) + doc.UserName(package.user_name) + doc.UserEmail(package.user_email) + end + } + } + } + } + } + } + } + } + } + + #send_data( out_string, :type => "t) + render :text => out_string, :content_type => "text/xml" + end + + def queryJobStatus(project_id, supportes_os_id) + job = Job.find(:first, :conditions => ["status NOT IN ('FINISHED', 'ERROR') AND project_id = ? AND supported_os_id = ?", project_id, supported_os_id, ], :order => "id DESC") + if job.nil? + status = job.status + else + status = nil + end + return status + end + + def queryProjectsInDistribution + dist_name = params[:distribution] - projects = Project.find(:all, :conditions => ["dist_name = ?", distribution], :order => "name") + distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + projects = Project.find(:all, :conditions => ["distribution_id = ?", distribution.id], :order => "name") osList = SupportedOs.find(:all) # check can build project_access_list = [] # get all my project - group_id = current_user.group_id - access_classes = GroupProjectAccesses.find(:all, :conditions => ["group_id = ?", group_id]) - access_classes.each do |access_class| - project_access_list.push access_class.prj_id + group_list = get_group_list(get_user_email) + + group_id_list = [] + group_list.each { |group| + group_id_list.push group.id + } + + group_name_list_string = + group_access_project_list = GroupProjectAccess.find(:all, :conditions => ["group_id in (?)", group_id_list.join(",") ]) + if not group_access_project_list.nil? + group_access_project_list.each do |access_project| + project_access_list.push access_project.project_id + end end #generate to XML - doc = Builder::XmlMarkup.new( :target => out_string = "" ) - doc.ProjectInfo { - doc.BuildServerInfo { - osList.each do |os| - doc.supportedOs(os.name) - end - } - - projects.each do |project| - if project.ptype.eql? "BINARY" - bin = ProjectBin.find(:first, :conditions => ["prj_id = ?", project.id]) - if project_access_list.include? project.id - doc.BinaryProject { - doc.ProjectName(project.name) - if not bin.nil? then - doc.PackageName(bin.pkg_name) - end - } - else - doc.OtherProject { - doc.ProjectName(project.name) - if not bin.nil? then - doc.PackageName(bin.pkg_name) - end - } + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + doc.Data { + doc.BuildServerInfo { + if not osList.nil? + osList.each do |os| + doc.supportedOs(os.name) + end end - else - prjOsList = "" - prjOsLists = ProjectOs.find(:all, :conditions => ["prj_id = ?", project.id]) - - prjOsLists.each do |list| - if prjOsList.empty? - prjOsList = list.os_name + } + + projects.each do |project| + if project.ptype.eql? "BINARY" + bin = ProjectBin.find(:first, :conditions => ["project_id = ?", project.id]) + if project_access_list.include? project.id + doc.BinaryProject { + doc.ProjectName(project.name) + if not bin.nil? then + doc.PackageName(bin.pkg_name) + end + } else - prjOsList = prjOsList + "," + list.os_name + doc.OtherBinaryProject { + doc.ProjectName(project.name) + if not bin.nil? then + doc.PackageName(bin.pkg_name) + end + } end - end - - if project_access_list.include? project.id - doc.Project { - doc.ProjectName(project.name) - doc.OsList(prjOsList) - } else - doc.OtherProject { - doc.ProjectName(project.name) - doc.OsList(prjOsList) - } + buildOsNameList = [] + prjOsLists = ProjectOs.find(:all, :conditions => ["project_id = ?", project.id]) + + prjOsLists.each do |list| + supported_os = SupportedOs.find(:first, :conditions => ["id = ?", list.supported_os_id]) + buildOsNameList.push(supported_os.name) + end + + if project_access_list.include? project.id + doc.Project { + doc.ProjectName(project.name) + doc.OsList(buildOsNameList.join(",")) + } + else + doc.OtherProject { + doc.ProjectName(project.name) + doc.OsList(buildOsNameList.join(",")) + } + end end - end - - end + + end + } } #send_data( out_string, :type => "t) @@ -154,10 +258,16 @@ class ProjectsController < ApplicationController #generate to XML doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) - doc.Distribution { - distribution_list.each do |distribution| - doc.Name(distribution) - end + doc.Response { + generate_xml_header(doc) + + doc.Data { + if not distribution_list.nil? + distribution_list.each do |distribution| + doc.DistributionName(distribution) + end + end + } } #send_data @@ -172,7 +282,7 @@ class ProjectsController < ApplicationController end def binaryFileUpload - distribution = params[:distribution] + dist_name = params[:distribution] project = params[:project] uploaded_io = params[:file] @@ -181,13 +291,14 @@ class ProjectsController < ApplicationController file.write(uploaded_io.read) end - project = Project.find(:first, :conditions => ["name = ? AND dist_name =?", project, distribution]) + distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name]) + project = Project.find(:first, :conditions => ["name = ? AND distribution_id =?", project, distribution.id]) if project.nil? render :nothing => true return end - ret = Utils.sbi_register_command(distribution, file_path, project.password, get_user_id) + ret = Utils.sbi_register_command(distribution.name, file_path, project.password, get_user_email) render :nothing => true return diff --git a/dibs-web/app/controllers/sessions_controller.rb b/dibs-web/app/controllers/sessions_controller.rb index e0c8e4f..308f740 100644 --- a/dibs-web/app/controllers/sessions_controller.rb +++ b/dibs-web/app/controllers/sessions_controller.rb @@ -3,38 +3,43 @@ class SessionsController < ApplicationController end def login - user = User.authenticate(params[:email], params[:password]) + input_list = params[:ChangeInfoList] + input_item = input_list[0] - #generate to XML - doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + user = User.authenticate(input_item[:Email], input_item[:Password]) if user - session[:user_id] = user.id + group_list = get_group_list(user.email) + if is_admin(user.email) + admin = "TRUE" + else + admin = "FALSE" + end - doc.LogInInfo { - doc.Success("TRUE") - doc.Message("Welcome...") - doc.LogInTime("") - doc.LastLogInTime("TRUE") - doc.UserInfo { - doc.Email(user.email) - doc.Name(user.name) - } + session[:user_email] = user.email + user_info = { :Message => 'Welcome!', + :Eamil => user.email, + :Name => user.name, + :Admin => admin, + } + group_info = nil + group_list.map { |group| + group_info = {:Group => [:GroupName => group.name, + :GroupAdmin => group.admin, + :GroupDescription => group.description] } } + + render :json => { :Result => 'SUCCESS', :UserInfo => user_info, :GroupInfo => group_info} + puts user_info else - doc.LogInInfo { - doc.Success("FALSE") - doc.Message("Check your email or password") - } + render :json => { :Result => 'ERROR', :UserInfo => {:Message => 'Fail login'} } end - render :text => out_string, - :content_type => "text/xml" - puts out_string + end def logout - session[:user_id] = nil + session[:user_email] = nil #generate to XML doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) @@ -56,7 +61,7 @@ class SessionsController < ApplicationController doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) if user - session[:user_id] = user.id + session[:user_email] = user.email redirect_to "/projects" else flash.now.alert = "Invalid email or password" @@ -65,7 +70,7 @@ class SessionsController < ApplicationController end def destroy - session[:user_id] = nil + session[:user_email] = nil redirect_to root_url, :notice => "Logged out!" end end diff --git a/dibs-web/app/controllers/users_controller.rb b/dibs-web/app/controllers/users_controller.rb index 356deeb..aec7141 100644 --- a/dibs-web/app/controllers/users_controller.rb +++ b/dibs-web/app/controllers/users_controller.rb @@ -15,34 +15,98 @@ class UsersController < ApplicationController end def signup - @user = User.new(params[:user]) + change_list = params[:ChangeInfoList] + change_item = change_list[0] - #generate to XML - doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + @user = User.new() + @user.email = change_item[:Email] + @user.name = change_item[:Name] + @user.password = change_item[:Password] + @user.password_confirmation = change_item[:PasswordConfirm] if @user.save - success = "TRUE" - message = "Welcome..." + render :json => { :success => "Welcome!" } else - success = "FALSE" - message = "Error..." + render :json => { :error => "Error"}, :status => 406 end - header = "Sign up" + end + + def show + email = get_user_email + user = User.find(:first, :conditions => ["email = ?", email]) - doc.SignUpInfo { - doc.Success(success) - doc.Header(success) - doc.Message(message) - doc.UserInfo { - doc.UserEmail(@user.email) - doc.UserName(@user.name) + doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 ) + doc.Response { + generate_xml_header(doc) + + doc.Data { + doc.User { + doc.Name(user.name) + doc.Email(user.email) + doc.GroupList { + group_list = get_group_list(user.email) + group_list.each { |group| + doc.GroupName(group.name) + } + } + } } } - render :text => out_string, - :content_type => "text/xml" - puts out_string + #send_data + render :text => out_string, :content_type => "text/xml" + end + + def modify + change_list = params[:ChangeInfoList] + change_item = change_list[0] + errmsg = "" + + email = change_item[:Email] + name = change_item[:Name] + password = change_item[:Password] + password_confirm = change_item[:PasswordConfirm] + + if email != get_user_email + errmsg = "Can't modify email" + render :json => { :error => errmsg }, :status => 406 + return + end + + if email.nil? or email.empty? + errmsg = "Email is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + if name.nil? or name.empty? + errmsg = "Name is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + if password.nil? or password.empty? + errmsg = "Password is empty" + render :json => { :error => errmsg }, :status => 406 + return + end + + if password != password_confirm + errmsg = "Password is different" + render :json => { :error => errmsg }, :status => 406 + return + end + user = User.find(:first, :conditions => ["email = ?", email]) + user.name = name + user.password = password + user.password_confirmation = password_confirm + user.save + + if errmsg.empty? + render :json => { :success => "OK!" } + else + render :json => { :error => errmsg }, :status => 406 + end end - end diff --git a/dibs-web/app/controllers/utils.rb b/dibs-web/app/controllers/utils.rb index 4b478c6..2742e9a 100644 --- a/dibs-web/app/controllers/utils.rb +++ b/dibs-web/app/controllers/utils.rb @@ -103,4 +103,5 @@ puts "[[[#{cmd}]]]" return nil end end + end diff --git a/dibs-web/app/helpers/admin_distribution_helper.rb b/dibs-web/app/helpers/admin_distribution_helper.rb new file mode 100644 index 0000000..97c39f6 --- /dev/null +++ b/dibs-web/app/helpers/admin_distribution_helper.rb @@ -0,0 +1,2 @@ +module AdminDistributionHelper +end diff --git a/dibs-web/app/helpers/admin_group_helper.rb b/dibs-web/app/helpers/admin_group_helper.rb new file mode 100644 index 0000000..9561d3b --- /dev/null +++ b/dibs-web/app/helpers/admin_group_helper.rb @@ -0,0 +1,2 @@ +module AdminGroupHelper +end diff --git a/dibs-web/app/helpers/admin_project_helper.rb b/dibs-web/app/helpers/admin_project_helper.rb new file mode 100644 index 0000000..7925981 --- /dev/null +++ b/dibs-web/app/helpers/admin_project_helper.rb @@ -0,0 +1,2 @@ +module AdminProjectHelper +end diff --git a/dibs-web/app/helpers/admin_server_helper.rb b/dibs-web/app/helpers/admin_server_helper.rb new file mode 100644 index 0000000..5c7d70a --- /dev/null +++ b/dibs-web/app/helpers/admin_server_helper.rb @@ -0,0 +1,2 @@ +module AdminServerHelper +end diff --git a/dibs-web/app/helpers/admin_user_helper.rb b/dibs-web/app/helpers/admin_user_helper.rb new file mode 100644 index 0000000..3edd72d --- /dev/null +++ b/dibs-web/app/helpers/admin_user_helper.rb @@ -0,0 +1,2 @@ +module AdminUserHelper +end diff --git a/dibs-web/app/models/distribution.rb b/dibs-web/app/models/distribution.rb index 530f623..994dc84 100644 --- a/dibs-web/app/models/distribution.rb +++ b/dibs-web/app/models/distribution.rb @@ -1,3 +1,3 @@ class Distribution < ActiveRecord::Base - attr_accessible :name, :pkgsvr_addr, :pkgsvr_url + attr_accessible :id, :name, :pkgsvr_url, :pkgsvr_addr, :status, :description end diff --git a/dibs-web/app/models/group.rb b/dibs-web/app/models/group.rb index cee5396..55595be 100644 --- a/dibs-web/app/models/group.rb +++ b/dibs-web/app/models/group.rb @@ -1,3 +1,5 @@ class Group < ActiveRecord::Base - attr_accessible :group_name, :group_id +# has_many :user_groups +# has_many :users, :through => :user_groups + attr_accessible :name, :id end diff --git a/dibs-web/app/models/group_project_access.rb b/dibs-web/app/models/group_project_access.rb new file mode 100644 index 0000000..dee4f5e --- /dev/null +++ b/dibs-web/app/models/group_project_access.rb @@ -0,0 +1,4 @@ +class GroupProjectAccess < ActiveRecord::Base + self.primary_key = 'group_id', 'project_id' + attr_accessible :group_id, :project_id, :build +end diff --git a/dibs-web/app/models/group_project_accesses.rb b/dibs-web/app/models/group_project_accesses.rb deleted file mode 100644 index fdff557..0000000 --- a/dibs-web/app/models/group_project_accesses.rb +++ /dev/null @@ -1,4 +0,0 @@ -class GroupProjectAccesses < ActiveRecord::Base - self.primary_key = 'group_id', 'prj_id' - attr_accessible :group_id, :prj_id, :build -end diff --git a/dibs-web/app/models/job.rb b/dibs-web/app/models/job.rb index 177a03e..3c15994 100644 --- a/dibs-web/app/models/job.rb +++ b/dibs-web/app/models/job.rb @@ -1,4 +1,3 @@ class Job < ActiveRecord::Base - belongs_to :users - attr_accessible :job_attribute, :distribution, :job_id, :os, :project_name, :status, :user_id + attr_accessible :distribution_id, :id, :supported_os_id, :project_id, :status, :user_id, :remote_build_server_id, :parent_job_id, :source_id, :jtype, :start_time, :end_time end diff --git a/dibs-web/app/models/os_category.rb b/dibs-web/app/models/os_category.rb new file mode 100644 index 0000000..a8fbee1 --- /dev/null +++ b/dibs-web/app/models/os_category.rb @@ -0,0 +1,4 @@ +class OsCategory < ActiveRecord::Base + set_table_name "os_category" + attr_accessible :id, :name +end diff --git a/dibs-web/app/models/package.rb b/dibs-web/app/models/package.rb new file mode 100644 index 0000000..57c4437 --- /dev/null +++ b/dibs-web/app/models/package.rb @@ -0,0 +1,3 @@ +class Package < ActiveRecord::Base + attr_accessible :id, :pkg_name, :sources_id, :supported_os_id +end diff --git a/dibs-web/app/models/project.rb b/dibs-web/app/models/project.rb index c41804b..1c9d56e 100644 --- a/dibs-web/app/models/project.rb +++ b/dibs-web/app/models/project.rb @@ -1,3 +1,3 @@ class Project < ActiveRecord::Base - attr_accessible :name, :type, :password, :dist_name + attr_accessible :id, :distribution_id, :name, :ptype, :password end diff --git a/dibs-web/app/models/project_bin.rb b/dibs-web/app/models/project_bin.rb index 14403d7..3252b0c 100644 --- a/dibs-web/app/models/project_bin.rb +++ b/dibs-web/app/models/project_bin.rb @@ -1,3 +1,3 @@ class ProjectBin < ActiveRecord::Base - attr_accessible :prj_id, :pkg_name + attr_accessible :project_id, :pkg_name end diff --git a/dibs-web/app/models/project_git.rb b/dibs-web/app/models/project_git.rb index 6f61b77..c0a5d4d 100644 --- a/dibs-web/app/models/project_git.rb +++ b/dibs-web/app/models/project_git.rb @@ -1,3 +1,3 @@ class ProjectGit < ActiveRecord::Base - attr_accessible :prj_id, :git_repos, :git_branch + attr_accessible :project_id, :git_repos, :git_branch end diff --git a/dibs-web/app/models/project_os.rb b/dibs-web/app/models/project_os.rb index 237af64..670dab0 100644 --- a/dibs-web/app/models/project_os.rb +++ b/dibs-web/app/models/project_os.rb @@ -1,3 +1,4 @@ class ProjectOs < ActiveRecord::Base - attr_accessible :prj_id, :os_name + self.primary_key = 'project_id', 'supported_os_id' + attr_accessible :project_id, :supported_os_id end diff --git a/dibs-web/app/models/remote_build_server.rb b/dibs-web/app/models/remote_build_server.rb new file mode 100644 index 0000000..61172ee --- /dev/null +++ b/dibs-web/app/models/remote_build_server.rb @@ -0,0 +1,3 @@ +class RemoteBuildServer < ActiveRecord::Base + attr_accessible :id, :svr_addr, :description +end diff --git a/dibs-web/app/models/remote_build_servers.rb b/dibs-web/app/models/remote_build_servers.rb deleted file mode 100644 index ac8edde..0000000 --- a/dibs-web/app/models/remote_build_servers.rb +++ /dev/null @@ -1,3 +0,0 @@ -class RemoteBuildServers < ActiveRecord::Base - attr_accessible :svr_addr -end diff --git a/dibs-web/app/models/server_config.rb b/dibs-web/app/models/server_config.rb new file mode 100644 index 0000000..624f2aa --- /dev/null +++ b/dibs-web/app/models/server_config.rb @@ -0,0 +1,3 @@ +class Server_config < ActiveRecord::Base + attr_accessible :chage_log_check, :db_version, :id, :job_keep_time, :job_log_url, :max_working_job, :pkg_sync_period, :send_mail +end diff --git a/dibs-web/app/models/source.rb b/dibs-web/app/models/source.rb new file mode 100644 index 0000000..f8bd214 --- /dev/null +++ b/dibs-web/app/models/source.rb @@ -0,0 +1,3 @@ +class Source < ActiveRecord::Base + attr_accessible :id, :location, :pkg_ver, :project_id +end diff --git a/dibs-web/app/models/supported_os.rb b/dibs-web/app/models/supported_os.rb index 12af232..c37b19f 100644 --- a/dibs-web/app/models/supported_os.rb +++ b/dibs-web/app/models/supported_os.rb @@ -1,3 +1,3 @@ class SupportedOs < ActiveRecord::Base - attr_accessible :name + attr_accessible :id, :os_category_id, :name end diff --git a/dibs-web/app/models/sync_pkg_server.rb b/dibs-web/app/models/sync_pkg_server.rb new file mode 100644 index 0000000..0863806 --- /dev/null +++ b/dibs-web/app/models/sync_pkg_server.rb @@ -0,0 +1,3 @@ +class SyncPkgServer < ActiveRecord::Base + attr_accessible :description, :distribution_id, :id, :period, :pkgsvr_url +end diff --git a/dibs-web/app/models/sync_project.rb b/dibs-web/app/models/sync_project.rb new file mode 100644 index 0000000..b860a7a --- /dev/null +++ b/dibs-web/app/models/sync_project.rb @@ -0,0 +1,3 @@ +class SyncProject < ActiveRecord::Base + attr_accessible :project_id, :sync_pkg_server_id +end diff --git a/dibs-web/app/models/user.rb b/dibs-web/app/models/user.rb index 38fa7d1..ebfb5f1 100644 --- a/dibs-web/app/models/user.rb +++ b/dibs-web/app/models/user.rb @@ -1,6 +1,7 @@ class User < ActiveRecord::Base - self.primary_key = 'email' - attr_accessible :email, :group_id, :password, :password_confirmation, :name +# has_many :user_groups +# has_many :groups, :through => :user_groups + attr_accessible :id, :email, :password, :password_confirmation, :name attr_accessor :password before_save :encrypt_password diff --git a/dibs-web/app/models/user_group.rb b/dibs-web/app/models/user_group.rb new file mode 100644 index 0000000..c18ce8b --- /dev/null +++ b/dibs-web/app/models/user_group.rb @@ -0,0 +1,6 @@ +class UserGroup < ActiveRecord::Base +# belongs_to :users +# belongs_to :groups + self.primary_key = 'group_id', 'user_id' + attr_accessible :group_id, :status, :user_id +end diff --git a/dibs-web/config.ru b/dibs-web/config.ru new file mode 100644 index 0000000..536e8d2 --- /dev/null +++ b/dibs-web/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Dibs::Application diff --git a/dibs-web/config.xml b/dibs-web/config.xml new file mode 100644 index 0000000..4ff99b6 --- /dev/null +++ b/dibs-web/config.xml @@ -0,0 +1,7 @@ + + + + + + test + diff --git a/dibs-web/config/database.yml b/dibs-web/config/database.yml index ce9baf8..6e35958 100644 --- a/dibs-web/config/database.yml +++ b/dibs-web/config/database.yml @@ -12,21 +12,35 @@ # # Warning: The database defined as "test" will be erased and # # re-generated from your development database when you run "rake". # # Do not set this db to the same as development or production. -# test: -# adapter: sqlite3 -# database: db/test.sqlite3 -# pool: 5 -# timeout: 5000 -# -# production: -# adapter: sqlite3 -# database: db/production.sqlite3 -# pool: 5 -# timeout: 5000 + test: + adapter: + encoding: + host: + port: + database: + username: + password: + pool: + timeout: + + production: + adapter: + encoding: + host: + port: + database: + username: + password: + pool: + timeout: -# for DIBS development: - adapter: sqlite3 - database: ~/.build_tools/build_server/testserver3/server.db - pool: 5 - timeout: 5000 + adapter: + encoding: + host: + port: + database: + username: + password: + pool: + timeout: diff --git a/dibs-web/config/routes.rb b/dibs-web/config/routes.rb index 66ce159..f6d2ac6 100644 --- a/dibs-web/config/routes.rb +++ b/dibs-web/config/routes.rb @@ -4,7 +4,6 @@ Dibs::Application.routes.draw do get "sessions/new" => "sessions#new" resources :users - resources :jobs get "jobs" => "jobs#list" @@ -20,47 +19,90 @@ Dibs::Application.routes.draw do # For asynchronous call post "users/signup" + post "users/modify" post "sessions/login" delete "sessions/logout" - get "jobs/job_list/:lastID" => "jobs#job_list" - get "jobs/log_list/:requestPageNum/:currentPageNum" => "jobs#log_list" + get "jobs/list/:distribution/:lastID" => "jobs#listAll" + get "jobs/listSearchUser/:user/:distribution/:lastID" => "jobs#listSearchUser" + get "jobs/listSearchGroup/:group/:distribution/:lastID" => "jobs#listSearchGroup" + get "jobs/listSearchProject/:project/:distribution/:lastID" => "jobs#listSearchProject", :constraints => { :project => /[0-9A-Za-z\-\.]+/ } + get "jobs/listSearchDate/:date/:distribution/:lastID" => "jobs#listSearchDate" + match "jobs/log/:id" => "jobs#log" match "jobs/log/:id/:line" => "jobs#log_more" - post "projects/buildProject/:type" => "projects#buildProject" get "projects/queryDistribution" match "projects/queryProject/:distribution" => "projects#queryProject" post "projects/binaryFileUpload" - get "admin" => "admin#user" - - get "admin/user" - - get "admin/queryAdminUser" - - get "admin/queryAdminAllGroupName" + # projects + match "projects/queryProjectsInfoInDistribution/:distribution" => "projects#queryProjectsInfoInDistribution" + match "projects/queryProjectsInDistribution/:distribution" => "projects#queryProjectsInDistribution" + post "projects/buildProject" + + # admin group + get "admin_group/queryAllGroup" + match "admin_group/queryGroupInfo/:groupName" => "admin_group#queryGroupInfo" + post "admin_group/addGroup" + post "admin_group/removeGroup" + post "admin_group/modifyGroup" + + # admin user + get "admin_user/queryAllUser" + post "admin_user/removeUser" + post "admin_user/modifyUser" + + # admin server + get "admin_server/queryAllServer" + post "admin_server/addRemoteBuildServer" + post "admin_server/removeRemoteBuildServer" + post "admin_server/modifyRemoteBuildServer" + post "admin_server/addOsCategory" + post "admin_server/removeOsCategory" + post "admin_server/modifyOsCategory" + post "admin_server/addSupportedOS" + post "admin_server/removeSupportedOS" + post "admin_server/modifySupportedOS" + post "admin_server/addServerInfo" + post "admin_server/removeServerInfo" + post "admin_server/modifyServerInfo" + + # admin project + get "admin_project/queryAllProject" + match "admin_project/queryProjectsInDistribution/:distribution" => "admin_project#queryProjectsInDistribution" + post "admin_project/addProject" + post "admin_project/removeProject" + post "admin_project/modifyProject" + + # admin distribution + get "admin_distribution/queryAllDistribution" + match "admin_distribution/queryDistributionInfo/:distribution" => "admin_distribution#queryDistributionInfo" + post "admin_distribution/addDistribution" + post "admin_distribution/removeDistribution" + post "admin_distribution/modifyDistribution" + + get "admin/queryAllOS" + get "admin/queryAllOSCategory" + + + # admin - post "admin/changeAdminUser" - - get "admin/group" - - get "admin/queryAdminGroups" - match "admin/queryAdminGroupInfo/:groupName" => "admin#queryAdminGroupInfo" - post "admin/changeAdminGroup" - - get "admin/server" - post "admin/changeAdminServer" - get "admin/queryAdminServer" - - get "admin/project" - post "admin/changeAdminProject" - get "admin/queryAdminAllOS" - get "admin/queryAdminAllProject" - get "admin/queryDistributions" - get "admin/queryDistributionInfo/:distribution" => "admin#queryDistributionInfo" - get "admin/queryProjectInfo/:distribution" => "admin#queryProjectInfo" +# get "admin/queryAdminAllGroupName" +# get "admin/queryAdminAllProject" +# get "admin/queryAdminAllOS" +# get "admin/queryAdminAllDistribution" +# +# get "admin/queryAdminGroup" +# get "admin/queryAdminServer" +# +# match "admin/queryAdminDistributionInfo/:distribution" => "admin#queryAdminDistributionInfo" +# match "admin/queryProjectInfo/:distribution" => "admin#queryProjectInfo" +# +# post "admin/changeAdminUser" +# post "admin/changeAdminServer" +# post "admin/changeAdminProject" # The priority is based upon order of creation: # first created -> highest priority. diff --git a/dibs-web/db/schema.rb b/dibs-web/db/schema.rb new file mode 100644 index 0000000..f0ab07e --- /dev/null +++ b/dibs-web/db/schema.rb @@ -0,0 +1,76 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended to check this file into your version control system. + +ActiveRecord::Schema.define(:version => 20121024015858) do + + create_table "distributions", :force => true do |t| + t.string "name" + t.string "pkgsvr_url" + t.string "pkgsvr_addr" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "group_rights", :force => true do |t| + t.integer "group_id" + t.integer "project_id" + t.string "build" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "groups", :force => true do |t| + t.string "group_name" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "jobs", :force => true do |t| + t.string "job_id", :null => false + t.string "project_name" + t.string "distribution" + t.string "job_attribute" + t.string "os" + t.string "status" + t.integer "user_id" + t.string "parent_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "projects", :force => true do |t| + t.string "project_name" + t.string "distribution_name" + t.string "project_type" + t.string "os_list" + t.string "password" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "supported_os", :force => true do |t| + t.string "name" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "users", :force => true do |t| + t.string "email" + t.string "user_name" + t.string "password_hash" + t.string "password_salt" + t.integer "group_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + +end diff --git a/dibs-web/db/seeds.rb b/dibs-web/db/seeds.rb new file mode 100644 index 0000000..d34dfa0 --- /dev/null +++ b/dibs-web/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) +# Mayor.create(:name => 'Emanuel', :city => cities.first) diff --git a/dibs-web/doc/README_FOR_APP b/dibs-web/doc/README_FOR_APP new file mode 100644 index 0000000..fe41f5c --- /dev/null +++ b/dibs-web/doc/README_FOR_APP @@ -0,0 +1,2 @@ +Use this README file to introduce your application and point to useful places in the API for learning more. +Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries. diff --git a/dibs-web/public/404.html b/dibs-web/public/404.html new file mode 100644 index 0000000..9a48320 --- /dev/null +++ b/dibs-web/public/404.html @@ -0,0 +1,26 @@ + + + + The page you were looking for doesn't exist (404) + + + + + +
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+ + diff --git a/dibs-web/public/422.html b/dibs-web/public/422.html new file mode 100644 index 0000000..83660ab --- /dev/null +++ b/dibs-web/public/422.html @@ -0,0 +1,26 @@ + + + + The change you wanted was rejected (422) + + + + + +
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+ + diff --git a/dibs-web/public/500.html b/dibs-web/public/500.html new file mode 100644 index 0000000..f3648a0 --- /dev/null +++ b/dibs-web/public/500.html @@ -0,0 +1,25 @@ + + + + We're sorry, but something went wrong (500) + + + + + +
+

We're sorry, but something went wrong.

+
+ + diff --git a/dibs-web/public/favicon.ico b/dibs-web/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/dibs-web/public/index.html b/dibs-web/public/index.html index dbc4c13..6298ca2 100644 --- a/dibs-web/public/index.html +++ b/dibs-web/public/index.html @@ -17,13 +17,28 @@ + + + + + + + + + + + + + + + @@ -45,18 +60,8 @@
-
- -
+
    +
@@ -71,14 +76,14 @@
- - - - + + + +
@@ -90,19 +95,19 @@
- - - - - - - - + + + + + + + +

@@ -119,6 +124,36 @@

+
+ Home +

DIBS Web 2.0

+
+
+
+ +
+
+
+ +
+
+
+
+
+ +
+
    +
+
+
+ + +
+ +
Home

DIBS Web 2.0

@@ -130,15 +165,15 @@
-

Git Project

@@ -155,18 +190,8 @@
-
- -
+
    +
@@ -185,25 +210,55 @@
-
    -
-
- -
+
+ +
+
+
+ + + + + + + + + + + + + + + + + +
+
-
-
-
+ +
+
    +
@@ -211,6 +266,15 @@

© S-Core

+ +
+
+
+
+ + +
+
@@ -223,23 +287,15 @@

User information

+
+
-
- -
+
    +
@@ -248,7 +304,7 @@
-
+

Modify User

@@ -270,7 +326,7 @@
- Save + Save
@@ -286,7 +342,7 @@

Group information

@@ -295,18 +351,8 @@
-
- -
+
    +
@@ -327,26 +373,35 @@

Server information

-
-
-
+
+

Server info

+
    +
+
+ +
+

Supported OS

+
    +
+
+ +
+

Remote build server

+
    +
-
- -
+
    +
@@ -365,66 +420,97 @@
-

Project information

-
+

Build

+
-
-
-
    -
  • Package server url
  • -
  • -
  • Package server address
  • -
  • -
  • Distribution status
  • -
  • -
-
-
-
-

-
+
- +
-
- +
    +
+
+
+ + +
+ +
+
+ Home +

DIBS Web 2.0

+
+
+
+ +
+
+

Distribution information

+
+
+ +
+
+

Package server url

+

+
+
+

Package server address

+

+
+
+

Status

+

+
+
+

Description

+

+
+
+

Sync package server

+
+
+
+
+
+
+ +
+
    +
@@ -439,23 +525,37 @@
- - + + +
+ +
- - + +
- - - - +
+ + +
+
+

Sync package server

+ + + + + + +
- Save + Save
@@ -465,21 +565,32 @@
- - + +
- - + +
- - +
+ + +
+
+

Sync package server

+ + + + + + +
- Save + Save
@@ -517,7 +628,7 @@
- Save + Save
@@ -538,12 +649,15 @@
+ + +
- Save + Save
@@ -553,8 +667,7 @@
- - +
@@ -576,7 +689,7 @@
- Save + Save
@@ -586,8 +699,7 @@
- - +
@@ -618,18 +730,30 @@
- Save + Save
-
+

Add Group

- - + + +
+
+ +
+ +
+
+ +
@@ -639,20 +763,30 @@
- Save + Save
-
+

modify Group

- - - - + + + + +
+
+ +
+ +
+
+ +
@@ -662,56 +796,187 @@
- Save + Save
-
+
-

Add server

+

Add remote build server

- - + + +
+ +
- Save + Save
-
-
+

Modify server

- - + +
+ + +
+ + +
+
+
+ Save + Delete +
+
+ +
+
+

User information

+
+
+
+ + +
+ + +
+ +
- - + +
- Save + Save
-
- + +
+
+

Modify supported os

+
+
+
+ + + +
+
+ +
+ +
+
+
+
+ Remove + Save +
+
+ +
+
+

Add os category

+
+
+
+ + +
+
+
+ Save +
+
+ +
+
+

Add os category

+
+
+
+
+ +
+ +
+
+
+
+ Delete +
+
+ +
+

Add server config

+
+
+
+ + +
+ + +
+
+
+ Save +
+
+ +
+

Modify server config

+
+
+
+ + +
+ + +
+
+
+ Save + Delete +
+
+ diff --git a/dibs-web/public/javascripts/admin-distribution-add.js b/dibs-web/public/javascripts/admin-distribution-add.js new file mode 100644 index 0000000..e4d7623 --- /dev/null +++ b/dibs-web/public/javascripts/admin-distribution-add.js @@ -0,0 +1,34 @@ +function adminDistributionAdd() { + var changeInfoList = []; + var changeInfoItem; + var name = document.getElementById("adminDistributionAddPopup-DistirubtionName").value; + var url = document.getElementById("adminDistributionAddPopup-PackageServerUrl").value; + var address = document.getElementById("adminDistributionAddPopup-PackageServerAddress").value; + var description = document.getElementById("adminDistributionAddPopup-DistributionDescription").value; + var distStatus = $("#adminDistributionAddPopup-DistributionStatus option:selected").val(); + + var sync_pkg_svr_url = document.getElementById("adminDistributionAddPopup-SyncPackageServer-Url").value; + var sync_pkg_svr_period = document.getElementById("adminDistributionAddPopup-SyncPackageServer-period").value; + var sync_pkg_svr_description = document.getElementById("adminDistributionAddPopup-SyncPackageServer-Description").value; + + if(name == "" || url == "" || address == ""){ + alert("You must input full data"); + return; + } + + changeInfoItem = {"DistributionName":name, "URL":url, "Address":address, "DistStatus":distStatus, "Description":description, "SyncPkgSvrUrl":sync_pkg_svr_url, "SyncPkgSvrPeriod":sync_pkg_svr_period, "SyncPkgSvrDescription":sync_pkg_svr_description}; + changeInfoList.push(changeInfoItem); + + addDistribution(changeInfoList, function () { + document.getElementById("adminDistributionAddPopup-DistirubtionName").value = ""; + document.getElementById("adminDistributionAddPopup-PackageServerUrl").value = ""; + document.getElementById("adminDistributionAddPopup-PackageServerAddress").value = ""; + document.getElementById("adminDistributionAddPopup-DistributionDescription").value = ""; + document.getElementById("adminDistributionAddPopup-SyncPackageServer-Url").value = ""; + document.getElementById("adminDistributionAddPopup-SyncPackageServer-period").value = ""; + document.getElementById("adminDistributionAddPopup-SyncPackageServer-Description").value = ""; + + $.mobile.changePage("#adminDistribution"); + }); +} + diff --git a/dibs-web/public/javascripts/admin-distribution-modify.js b/dibs-web/public/javascripts/admin-distribution-modify.js new file mode 100644 index 0000000..5928d88 --- /dev/null +++ b/dibs-web/public/javascripts/admin-distribution-modify.js @@ -0,0 +1,82 @@ +function adminDistributionModifyPopupInit() { + var distName = $("#adminDistributionSelect option:selected").val(); + var packageServerUrl = document.getElementById("adminDistribution:packageServerUrl").innerHTML; + var packageServeraddress = document.getElementById("adminDistribution:packageServerAddress").innerHTML; + var serverStatusText = document.getElementById("adminDistribution:distributionStatus").innerHTML; + var serverDescription = document.getElementById("adminDistribution:distributionDescription").innerHTML; + + var syncPkgSvrUrl = document.getElementById("adminDistribution-SyncPackageServer-Url").innerHTML; + var syncPkgSvrPeriod = document.getElementById("adminDistribution-SyncPackageServer-period").innerHTML; + var syncPkgSvrDescription = document.getElementById("adminDistribution-SyncPackageServer-Description").innerHTML; + + if (syncPkgSvrUrl) { + syncPkgSvrUrl = syncPkgSvrUrl.replace("Package server url : ", ""); + } else { + syncPkgSvrUrl = "" + } + + if (syncPkgSvrPeriod) { + syncPkgSvrPeriod = syncPkgSvrPeriod.replace("Period : ", ""); + } else { + syncPkgSvrPeriod = "" + } + if (syncPkgSvrDescription) { + syncPkgSvrDescription = syncPkgSvrDescription.replace("Description : ", ""); + } else { + syncPkgSvrDescription = "" + } + + document.getElementById('adminDistributionModifyPopup-PackageServerUrl').value = packageServerUrl; + document.getElementById('adminDistributionModifyPopup-PackageServerAddress').value = packageServeraddress; + document.getElementById('adminDistributionModifyPopup-Description').value = serverDescription; + document.getElementById('adminDistributionModifyPopup-SyncPackageServer-Url').value = syncPkgSvrUrl; + document.getElementById('adminDistributionModifyPopup-SyncPackageServer-Period').value = syncPkgSvrPeriod; + document.getElementById('adminDistributionModifyPopup-SyncPackageServer-Description').value = syncPkgSvrDescription; + + $("#adminDistributionModifyPopup-Status").empty(); + var option; + if(serverStatusText.toUpperCase() == "OPEN") { + option = ''; + } else { + option = ''; + } + $("#adminDistributionModifyPopup-Status").append(option); + + if(serverStatusText.toUpperCase() == "CLOSE") { + option = ''; + } else { + option = ''; + } + $("#adminDistributionModifyPopup-Status").append(option); + $("#adminDistributionModifyPopup-Status").selectmenu("refresh"); +} + +function adminDistributionModify() { + var changeInfoList = []; + var changeInfoItem; + var distName = $("#adminDistributionSelect option:selected").val(); + var url = document.getElementById("adminDistributionModifyPopup-PackageServerUrl").value; + var address = document.getElementById("adminDistributionModifyPopup-PackageServerAddress").value; + var description = document.getElementById("adminDistributionModifyPopup-Description").value; + var distStatus = $("#adminDistributionModifyPopup-Status option:selected").val(); + var syncPkgSvrUrl = document.getElementById("adminDistributionModifyPopup-SyncPackageServer-Url").value; + var syncPkgSvrPeriod = document.getElementById("adminDistributionModifyPopup-SyncPackageServer-Period").value; + var syncPkgSvrDescription = document.getElementById("adminDistributionModifyPopup-SyncPackageServer-Description").value; + + if(distName == "" || url == "" || address == ""){ + alert("You must input full data"); + return; + } + + if(distStatus == "") { + distStatus = "OPEN"; + } + + changeInfoItem = {"DistributionName":distName, "URL":url, "Address":address, "DistStatus":distStatus, "Description":description, "SyncPkgSvrUrl":syncPkgSvrUrl, "SyncPkgSvrPeriod":syncPkgSvrPeriod, "SyncPkgSvrDescription":syncPkgSvrDescription}; + changeInfoList.push(changeInfoItem); + + modifyDistribution( changeInfoList, function () { + $.mobile.changePage("#adminDistribution"); + }); +} + diff --git a/dibs-web/public/javascripts/admin-distribution.js b/dibs-web/public/javascripts/admin-distribution.js new file mode 100644 index 0000000..1d550f1 --- /dev/null +++ b/dibs-web/public/javascripts/admin-distribution.js @@ -0,0 +1,83 @@ +function adminDistributionInit() { + queryAllDistribution( function (xml) { + var oldDistName = $("#adminDistributionSelect option:selected").val(); + var find = false; + var distributionList = $(xml).find("Data").find("DistributionName"); + + // remove old select options + $("#adminDistributionSelect").empty(); + + distributionList.each(function(){ + var name = $(this).text(); + + if( oldDistName == name ) { + $("#adminDistributionSelect").append(""); + find = true; + + } else { + $("#adminDistributionSelect").append(""); + } + }); + + /* default distribution selection */ + if(!find) { + $("#adminDistributionSelect option:eq(0)").attr("selected", "selected"); + } + + $("#adminDistributionSelect").selectmenu('refresh'); + + // set distribution info + adminDistributionSetInfo(); + }); +} + +function adminDistributionSetInfo() { + var distName = $("#adminDistributionSelect option:selected").val(); + + queryDistributionInfo( distName, function (xml) { + var data = $(xml).find("Data").find("DistributionInfo"); + var syncPackageServer = $(xml).find("Data").find("SyncPackageServer"); + var name = data.find("DistributionName").text(); + var url = data.find("PackageServerUrl").text(); + var address = data.find("PackageServerAddress").text(); + var distStatus = data.find("Status").text(); + var distDescription = data.find("Description").text(); + + $("#adminDistribution\\:packageServerUrl").text(url); + $("#adminDistribution\\:packageServerAddress").text(address); + $("#adminDistribution\\:distributionStatus").text(distStatus); + $("#adminDistribution\\:distributionDescription").text(distDescription); + + adminDistributionInitSyncPackageServer(syncPackageServer); + }); +} + +function adminDistributionRemove() { + var changeInfoList = []; + var changeInfoItem; + var distName = $("#adminDistributionSelect option:selected").val(); + + changeInfoItem = {"DistributionName":distName}; + changeInfoList.push(changeInfoItem); + + var r=confirm("Distribution ["+distName+"] will be removed!!!"); + if (r==false) + { + return; + } + + removeDistribution( changeInfoList, function (xml) { + $.mobile.changePage("#adminDistribution"); + }); +} + +function adminDistributionInitSyncPackageServer(serverInfo){ + $("#adminDistribution-SyncPackageServer").empty(); + + var info = '

Package server url : '+serverInfo.find("Url").text()+'

'; + info += '

Period : '+serverInfo.find("Period").text()+'

'; + info += '

Description : '+serverInfo.find("Description").text()+'

'; + + $("#adminDistribution-SyncPackageServer").append(info); +} + diff --git a/dibs-web/public/javascripts/admin-group-add.js b/dibs-web/public/javascripts/admin-group-add.js new file mode 100644 index 0000000..ec47eef --- /dev/null +++ b/dibs-web/public/javascripts/admin-group-add.js @@ -0,0 +1,73 @@ +function adminGroupAddInit() { + document.getElementById('adminGroupAddPopup-Name').value = ""; + document.getElementById('adminGroupAddPopup-Description').value = ""; + + queryAllProject( function(xml) { + var fullProjectList = $(xml).find("Data").find("Project"); + + adminGroupAddGenerateProjectSelect(fullProjectList); + }); +} + +function adminGroupAddGenerateProjectSelect(projectList) { + fieldset = document.getElementById('popup:addProjectCheckbox'); + + /* remove all table rows */ + while(fieldset.hasChildNodes()) + { + fieldset.removeChild(fieldset.firstChild); + } + + legend = document.createElement('legend'); + legend.innerHTML = "Project list"; + fieldset.appendChild(legend); + + projectList.each(function(){ + var projectName = $(this).find("Name").text(); + var projectId = $(this).find("Id").text(); + var projectDistName = $(this).find("DistName").text(); + + var input = document.createElement('input'); + input.type = 'checkbox'; + input.id = 'popup:addGroupProjectCheckbox:'+projectId; + input.name = 'popup:addGroupProjectCheckbox'; + input.value = projectName; + + var label = document.createElement('label'); + label.setAttribute('for', 'popup:addGroupProjectCheckbox:'+projectId); + label.innerHTML = projectName + "[" + projectDistName + "]"; + + fieldset.appendChild(input); + fieldset.appendChild(label); + }); + + $("[name='popup\\:addGroupProjectCheckbox']").checkboxradio(); +} + +function adminGroupAddGroup() { + var selectArray = document.getElementsByName('popup:addGroupProjectCheckbox'); + var groupName = document.getElementById('adminGroupAddPopup-Name').value; + var adminFlag = $("#adminGroupAddPopup-Admin option:selected").val(); + var description = document.getElementById('adminGroupAddPopup-Description').value; + var selectProjectIdList = ""; + var changeInfoList = []; + + for(var i = 0; i < selectArray.length; i++) { + if (selectArray[i].checked == true) { + var projectId = selectArray[i].id.split(":")[2]; + selectProjectIdList = selectProjectIdList + "," + projectId; + } + } + + if(selectProjectIdList.length > 0) { + selectProjectIdList = selectProjectIdList.substring(1,selectProjectIdList.length); + } + + changeItem = {"GroupName" : groupName, "AdminFlag":adminFlag, "Description":description, "ProjectList" : selectProjectIdList}; + changeInfoList.push(changeItem); + + addGroup(changeInfoList, function() { + $.mobile.changePage("#adminGroup"); + }); +} + diff --git a/dibs-web/public/javascripts/admin-group-modify.js b/dibs-web/public/javascripts/admin-group-modify.js new file mode 100644 index 0000000..6b9246e --- /dev/null +++ b/dibs-web/public/javascripts/admin-group-modify.js @@ -0,0 +1,101 @@ +function adminGroupModifyInit() { + var index = localStorage.groupTableIndex; + var groupName = document.getElementById("groupTableName:"+index).innerHTML; + var description = document.getElementById("groupTableDescription:"+index).innerHTML; + var adminFlagText = document.getElementById("groupTableAdminFlag:"+index).innerHTML; + + document.getElementById('adminGroupModifyPopup-Name').value = groupName; + document.getElementById('adminGroupModifyPopup-NewName').value = groupName; + document.getElementById('adminGroupModifyPopup-Description').value = description; + $("#adminGroupModifyPopup-Admin").empty(); + var option; + if(adminFlagText.toUpperCase() == "TRUE") { + option = ''; + } else { + option = ''; + } + $("#adminGroupModifyPopup-Admin").append(option); + + if(adminFlagText.toUpperCase() == "FALSE") { + option = ''; + } else { + option = ''; + } + $("#adminGroupModifyPopup-Admin").append(option); + $("#adminGroupModifyPopup-Admin").selectmenu("refresh"); + + queryGroupInfo(groupName, function(xml) { + var fullProjectList = $(xml).find("Data").find("Project"); + var projectIdList = $(xml).find("Data").find("Group").find("ProjectList").text().split(","); + + adminGroupModifyGenerateProjectSelect(fullProjectList, projectIdList); + }); +} + +function adminGroupModifyGenerateProjectSelect(fullProjectList, projectIdList) { + fieldset = document.getElementById('popup:modifyProjectSelect'); + /* remove all table rows */ + while(fieldset.hasChildNodes()) + { + fieldset.removeChild(fieldset.firstChild); + } + + legend = document.createElement('legend'); + legend.innerHTML = "Project list"; + fieldset.appendChild(legend); + + fullProjectList.each(function(){ + var projectName = $(this).find("Name").text(); + var projectId = $(this).find("Id").text(); + var projectDistName = $(this).find("DistName").text(); + + var input = document.createElement('input'); + input.type = 'checkbox'; + input.id = 'popup:modifyProjectCheckbox:'+projectId; + input.name = 'popup:modifyProjectCheckbox'; + input.value = projectName; + + if(contains(projectIdList, projectId)) + { + input.setAttribute('checked', 'checked'); + } + + var label = document.createElement('label'); + label.setAttribute('for', 'popup:modifyProjectCheckbox:'+projectId); + label.innerHTML = projectName + "[" + projectDistName + "]"; + + fieldset.appendChild(input); + fieldset.appendChild(label); + }); + + $("[name='popup\\:modifyProjectCheckbox']").checkboxradio(); +} + +function adminGroupModifyGroup() { + var selectArray = document.getElementsByName('popup:modifyProjectCheckbox'); + var oldGroupName = document.getElementById('adminGroupModifyPopup-Name').value; + var groupName = document.getElementById('adminGroupModifyPopup-NewName').value; + var description = document.getElementById('adminGroupModifyPopup-Description').value; + var adminFlag = $("#adminGroupModifyPopup-Admin option:selected").val(); + var selectProjectIdList = ""; + var changeInfoList = []; + + for(var i = 0; i < selectArray.length; i++) { + if (selectArray[i].checked == true) { + var projectId = selectArray[i].id.split(":")[2]; + selectProjectIdList = selectProjectIdList + "," + projectId; + } + } + + if(selectProjectIdList.length > 0) { + selectProjectIdList = selectProjectIdList.substring(1,selectProjectIdList.length); + } + + changeItem = {"GroupName" : oldGroupName, "NewGroupName":groupName, "AdminFlag":adminFlag, "Description":description, "ProjectList" : selectProjectIdList}; + changeInfoList.push(changeItem); + + changeGroup(changeInfoList, function() { + $.mobile.changePage("#adminGroup"); + }); +} + diff --git a/dibs-web/public/javascripts/admin-group.js b/dibs-web/public/javascripts/admin-group.js index 130638f..549e686 100644 --- a/dibs-web/public/javascripts/admin-group.js +++ b/dibs-web/public/javascripts/admin-group.js @@ -1,184 +1,25 @@ -function generateProjectList(fullProjectList, projectIdList) { - var div = document.createElement('div'); - div.setAttribute('data-role', 'collapsible'); - div.setAttribute('data-mini', 'true'); - div.setAttribute('data-content-theme', 'b'); - div.setAttribute('class', 'groupProjectList'); +function adminGroupInit() { + adminGroupInitTable(); - var header = document.createElement('h3'); - header.innerHTML = "Project list"; - div.appendChild(header); - - var ul = document.createElement('ul'); + queryAllGroup( function(xml) { + var header = $(xml).find("Header"); + var groupList = $(xml).find("Data").find("Group"); - fullProjectList.each(function(){ - var projectName = $(this).find("Name").text(); - var projectId = $(this).find("Id").text(); - var projectDistName = $(this).find("DistName").text(); - - if(contains(projectIdList, projectId)) - { - var item = document.createElement('li'); - item.innerHTML = projectName+"["+projectDistName+"]"; - ul.appendChild(item); - } + adminGroupFillTableInfo(groupList); }); - - div.appendChild(ul); - return div; } -function generateModifyGroupProjectSelect(fullProjectList, projectIdList) { - fieldset = document.getElementById('popup:modifyProjectSelect'); - /* remove all table rows */ - while(fieldset.hasChildNodes()) - { - fieldset.removeChild(fieldset.firstChild); - } - - legend = document.createElement('legend'); - legend.innerHTML = "Project list"; - fieldset.appendChild(legend); - - fullProjectList.each(function(){ - var projectName = $(this).find("Name").text(); - var projectId = $(this).find("Id").text(); - var projectDistName = $(this).find("DistName").text(); - - var input = document.createElement('input'); - input.type = 'checkbox'; - input.id = 'popup:modifyProjectCheckbox:'+projectId; - input.name = 'popup:modifyProjectCheckbox'; - input.value = projectName; - - if(contains(projectIdList, projectId)) - { - input.setAttribute('checked', 'checked'); - } - - var label = document.createElement('label'); - label.setAttribute('for', 'popup:modifyProjectCheckbox:'+projectId); - label.innerHTML = projectName + "[" + projectDistName + "]"; - - fieldset.appendChild(input); - fieldset.appendChild(label); - }); - - $("[name='popup\\:modifyProjectCheckbox']").checkboxradio(); -} +function adminGroupInitTable() { + var groupTable = document.getElementById("groupTable"); -function generateAddGroupProjectSelect(projectList) { - fieldset = document.getElementById('popup:addProjectCheckbox'); /* remove all table rows */ - while(fieldset.hasChildNodes()) + while(groupTable.hasChildNodes()) { - fieldset.removeChild(fieldset.firstChild); - } - - legend = document.createElement('legend'); - legend.innerHTML = "Project list"; - fieldset.appendChild(legend); - - projectList.each(function(){ - var projectName = $(this).find("Name").text(); - var projectId = $(this).find("Id").text(); - var projectDistName = $(this).find("DistName").text(); - - var input = document.createElement('input'); - input.type = 'checkbox'; - input.id = 'popup:addGroupProjectCheckbox:'+projectId; - input.name = 'popup:addGroupProjectCheckbox'; - input.value = projectName; - - var label = document.createElement('label'); - label.setAttribute('for', 'popup:addGroupProjectCheckbox:'+projectId); - label.innerHTML = projectName + "[" + projectDistName + "]"; - - fieldset.appendChild(input); - fieldset.appendChild(label); - }); - - $("[name='popup\\:addGroupProjectCheckbox']").checkboxradio(); -} - -function modifyGroup() { - var selectArray = document.getElementsByName('popup:modifyProjectCheckbox'); - var oldGroupName = document.getElementById('popup:modifyOldGroupName').value; - var groupName = document.getElementById('popup:modifyGroupName').value; - var selectProjectIdList = ""; - var changeInfoList = []; - - for(var i = 0; i < selectArray.length; i++) { - if (selectArray[i].checked == true) { - var projectId = selectArray[i].id.split(":")[2]; - selectProjectIdList = selectProjectIdList + "," + projectId; - } - } - - if(selectProjectIdList.length > 0) { - selectProjectIdList = selectProjectIdList.substring(1,selectProjectIdList.length); - } - - changeItem = {"Type":"ChangeGroup", "Name" : oldGroupName, "NewGroupName":groupName, "ProjectList" : selectProjectIdList}; - changeInfoList.push(changeItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminGroup", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - error: function(jqXHR) { - switch (jqXHR.status) { - case 401: - expireSession(); - break; - default: - alert(jqXHR); - } - } - }); -} - -function addGroup() { - var selectArray = document.getElementsByName('popup:addGroupProjectCheckbox'); - var groupName = document.getElementById('popup:addGroupName').value; - var selectProjectIdList = ""; - var changeInfoList = []; - - for(var i = 0; i < selectArray.length; i++) { - if (selectArray[i].checked == true) { - var projectId = selectArray[i].id.split(":")[2]; - selectProjectIdList = selectProjectIdList + "," + projectId; - } - } - - if(selectProjectIdList.length > 0) { - selectProjectIdList = selectProjectIdList.substring(1,selectProjectIdList.length); + groupTable.removeChild(groupTable.firstChild); } - - changeItem = {"Type":"AddGroup", "Name" : groupName, "ProjectList" : selectProjectIdList}; - changeInfoList.push(changeItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminGroup", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - error: function(jqXHR) { - switch (jqXHR.status) { - case 401: - expireSession(); - break; - default: - alert(jqXHR); - } - } - }); } -function fillGroupTable(fullProjectList, groupList) { +function adminGroupFillTableInfo(groupList) { var groupTable = document.getElementById("groupTable"); /* remove all table rows */ @@ -189,8 +30,7 @@ function fillGroupTable(fullProjectList, groupList) { /* create table header */ var row = groupTable.insertRow(-1); - var tableHeader = ""; - tableHeader = " Group name Project list Modify Delete "; + var tableHeader = " Group name Project list Admin Description Modify Delete "; $("#groupTable").append(tableHeader); @@ -199,8 +39,10 @@ function fillGroupTable(fullProjectList, groupList) { groupList.each(function(){ var row = groupTable.insertRow(-1); var cell; - var groupName = $(this).find("Name").text(); - var projectIdList = $(this).find("ProjectList").text().split(","); + var groupName = $(this).find("GroupName").text(); + var adminFlag = $(this).find("AdminFlag").text(); + var description = $(this).find("Description").text(); + var projectList = $(this).find("AccessableProject"); row.setAttribute('id', 'table:'+index); @@ -209,17 +51,23 @@ function fillGroupTable(fullProjectList, groupList) { cell.innerHTML = groupName cell = row.insertCell(-1); - div = generateProjectList(fullProjectList, projectIdList); + div = adminGroupGenerateProjectListCell(projectList); cell.appendChild(div); + cell = row.insertCell(-1); + cell.setAttribute('id', 'groupTableAdminFlag:'+index); + cell.innerHTML = adminFlag; + + cell = row.insertCell(-1); + cell.setAttribute('id', 'groupTableDescription:'+index); + cell.innerHTML = description; + cell = row.insertCell(-1); var button = document.createElement('a'); - button.setAttribute('href','#modifyGroup'); + button.setAttribute('href','#adminGroupModifyPopup'); button.setAttribute('data-role','button'); button.setAttribute('data-rel','dialog'); - button.setAttribute('data-mini','true'); - button.setAttribute('onClick','popupModifyGroup(\"'+index+'\")'); - button.setAttribute('id',"input:modifyGroup:"+index); + button.setAttribute('onClick','adminGroupModifyPopupSetup(\"'+index+'\")'); button.setAttribute('class','groupTableCellButton'); button.innerHTML = " " cell.appendChild(button); @@ -227,10 +75,7 @@ function fillGroupTable(fullProjectList, groupList) { cell = row.insertCell(-1); var button = document.createElement('input'); button.setAttribute('type','button'); - button.setAttribute('id','groupDeleteButton'+':'+index); - button.setAttribute('name',groupName); - button.setAttribute('data-mini','true'); - button.setAttribute('onClick','removeGroup('+index+')'); + button.setAttribute('onClick','adminGroupRemoveGroup('+index+')'); button.setAttribute('class','groupTableCellButton'); cell.appendChild(button); @@ -241,34 +86,40 @@ function fillGroupTable(fullProjectList, groupList) { $(".groupTableCellButton").button(); } -function queryAdminGroup() { - $.ajax({ - url: baseUrl+'/admin/queryAdminGroups', - type: 'GET', - dataType: 'xml', - timeout: 1000, - success: function(xml) { - var projectList = $(xml).find("Groups").find("AllProject"); - var groupList = $(xml).find("Groups").find("Group"); +function adminGroupModifyPopupSetup(index) { + localStorage.groupTableIndex = index; +} + +function adminGroupGenerateProjectListCell(projectList) { + var div = document.createElement('div'); + div.setAttribute('data-role', 'collapsible'); + div.setAttribute('data-content-theme', 'b'); + div.setAttribute('class', 'groupProjectList'); + div.setAttribute('style', 'text-align: left'); + + var header = document.createElement('h3'); + header.innerHTML = "Project list"; + div.appendChild(header); - fillGroupTable(projectList, groupList); - }, - error: function(jqXHR) { - switch (jqXHR.status) { - case 401: - expireSession(); - break; - default: - alert(jqXHR); - } - } + var ul = document.createElement('ul'); + + projectList.each(function(){ + var projectName = $(this).find("ProjectName").text(); + var projectDistName = $(this).find("ProjectDistribution").text(); + var item = document.createElement('li'); + + item.innerHTML = projectName+"["+projectDistName+"]"; + ul.appendChild(item); }); + + div.appendChild(ul); + return div; } -function removeGroup(index) { - var groupName = document.getElementById("groupDeleteButton:"+index).name; +function adminGroupRemoveGroup(index) { + var groupName = document.getElementById("groupTableName:"+index).innerHTML; - var r=confirm("User ["+email+"] is removed!!!"); + var r=confirm("User ["+groupName+"] will be removed!!!"); if (r==false) { return; @@ -276,80 +127,11 @@ function removeGroup(index) { var changeInfoList = []; var changeInfoItem; - changeInfoItem = {"Type":"RemoveGroup", "Name":groupName}; + changeInfoItem = {"GroupName":groupName}; changeInfoList.push(changeInfoItem); - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminGroup", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - error: function(jqXHR) { - switch (jqXHR.status) { - case 401: - expireSession(); - break; - default: - alert(jqXHR); - } - } + removeGroup(changeInfoList, function() { + $.mobile.changePage("#adminGroup"); }); } -function popupModifyGroup(index) { - localStorage.groupTableIndex = index; -} - -function setupModifyGroup() { - var index = localStorage.groupTableIndex; - var groupName = document.getElementById("groupTableName:"+index).innerHTML; - - document.getElementById('popup:modifyOldGroupName').value = groupName; - document.getElementById('popup:modifyGroupName').value = groupName; - - $.ajax({ - url: baseUrl+'/admin/queryAdminGroupInfo/' + groupName, - type: 'GET', - dataType: 'xml', - timeout: 1000, - success: function(xml) { - var fullProjectList = $(xml).find("GroupInfo").find("AllProject"); - var projectIdList = $(xml).find("GroupInfo").find("Group").find("ProjectList").text().split(","); - - generateModifyGroupProjectSelect(fullProjectList, projectIdList); - }, - error: function(jqXHR) { - switch (jqXHR.status) { - case 401: - expireSession(); - break; - default: - alert(jqXHR); - } - } - }); -} - -function setupAddGroup() { - $.ajax({ - url: baseUrl+'/admin/queryAdminAllProject', - type: 'GET', - dataType: 'xml', - timeout: 1000, - success: function(xml) { - var fullProjectList = $(xml).find("AllProject").find("Project"); - - generateAddGroupProjectSelect(fullProjectList); - }, - error: function(jqXHR) { - switch (jqXHR.status) { - case 401: - expireSession(); - break; - default: - alert(jqXHR); - } - } - }); -} diff --git a/dibs-web/public/javascripts/admin-project-add.js b/dibs-web/public/javascripts/admin-project-add.js new file mode 100644 index 0000000..7318cea --- /dev/null +++ b/dibs-web/public/javascripts/admin-project-add.js @@ -0,0 +1,102 @@ +function adminProjectAddInit() { + queryAllOS( function (xml) { + var osList = $(xml).find("Data").find("OsName"); + + fieldset = document.getElementById('popup:addGitProjectOs'); + /* remove all table rows */ + while(fieldset.hasChildNodes()) + { + fieldset.removeChild(fieldset.firstChild); + } + + legend = document.createElement('legend'); + legend.innerHTML = "Project os list"; + fieldset.appendChild(legend); + + osList.each(function(){ + var osName = $(this).text(); + + var input = document.createElement('input'); + input.type = 'checkbox'; + input.id = 'popup:addGitProjectOsCheckbox:'+osName; + input.name = 'popup:addGitProjectOsCheckbox'; + input.value = osName; + input.setAttribute('class', 'popup:addGitProjectOsCheckbox'); + input.setAttribute('checked', 'checked'); + + var label = document.createElement('label'); + label.setAttribute('for', 'popup:addGitProjectOsCheckbox:'+osName); + label.innerHTML = osName; + + fieldset.appendChild(input); + fieldset.appendChild(label); + }); + + $('.popup\\:addGitProjectOsCheckbox').checkboxradio(); + }); +} + +function adminProjectAddGitProject() { + var distName = $("#adminProjectDistributionSelect option:selected").val(); + var changeInfoList = []; + var changeInfoItem; + var type = "GIT"; + var name = document.getElementById("popup:addGitProjectName").value; + var password = document.getElementById("popup:addGitProjectPassword").value; + var address = document.getElementById("popup:addGitAddress").value; + var branch = document.getElementById("popup:addGitBranch").value; + var selectArray = document.getElementsByName('popup:addGitProjectOsCheckbox'); + var selectOsList = []; + + for(var i = 0; i < selectArray.length; i++) { + if (selectArray[i].checked == true) { + var osName = selectArray[i].id.split(":")[2]; + selectOsList.push(osName); + } + } + + + if(name == "" || password == "" || address == "" || branch == ""){ + alert("You must input full data(Project name, Git password, Git address, Branch)"); + return; + } + + changeInfoItem = {"Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "Address":address, "Branch":branch, "OSNameList":selectOsList.toString()}; + changeInfoList.push(changeInfoItem); + + addProject(changeInfoList, function () { + document.getElementById("popup:addGitProjectName").value = ""; + document.getElementById("popup:addGitProjectPassword").value = ""; + document.getElementById("popup:addGitAddress").value = ""; + document.getElementById("popup:addGitBranch").value = ""; + + $.mobile.changePage("#adminProject"); + }); +} + +function adminProjectAddBinaryProject() { + var distName = $("#adminProjectDistributionSelect option:selected").val(); + var changeInfoList = []; + var changeInfoItem; + var type = "BINARY"; + var name = document.getElementById("popup:addBinaryProjectName").value; + var password = document.getElementById("popup:addBinaryProjectPassword").value; + var pkgName = document.getElementById("popup:addBinaryPackageName").value; + + if(name == "" || pkgName == ""){ + alert("You must input full data(Project name, Package name"); + return; + } + + changeInfoItem = {"Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "PackageName":pkgName}; + changeInfoList.push(changeInfoItem); + + addProject(changeInfoList, function () { + document.getElementById("popup:addBinaryProjectName").value = ""; + document.getElementById("popup:addBinaryProjectPassword").value = ""; + document.getElementById("popup:addBinaryPackageName").value = ""; + + $.mobile.changePage("#adminProject"); + }); +} + diff --git a/dibs-web/public/javascripts/admin-project-modify.js b/dibs-web/public/javascripts/admin-project-modify.js new file mode 100644 index 0000000..3769bba --- /dev/null +++ b/dibs-web/public/javascripts/admin-project-modify.js @@ -0,0 +1,129 @@ +function adminProjectModifyBinaryProjectInit() { + var projectName = localStorage.projectName; + var packageName = document.getElementById('modifyBinaryPackageName:'+projectName).innerHTML; + + document.getElementById('popup:modifyBinaryOldProjectName').value = projectName; + document.getElementById('popup:modifyBinaryNewProjectName').value = projectName; + document.getElementById('popup:modifyBinaryProjectPassword').value = ""; + document.getElementById('popup:modifyBinaryPackageName').value = packageName; +} + +function adminProjectModifyGitProjectInit() { + var projectName = localStorage.projectName; + var projectAddress = document.getElementById('modifyGitProjectAddress:'+projectName).innerHTML; + var projectBranch = document.getElementById('modifyGitProjectBranch:'+projectName).innerHTML; + + document.getElementById('popup:modifyGitOldProjectName').value = projectName; + document.getElementById('popup:modifyGitNewProjectName').value = projectName; + document.getElementById('popup:modifyGitProjectPassword').value = ""; + document.getElementById('popup:modifyGitProjectAddress').value = projectAddress; + document.getElementById('popup:modifyGitProjectBranch').value = projectBranch; + + queryAllOS( function (xml) { + var osList = $(xml).find("Data").find("OsName"); + var selectedOsList = []; + var projectName = localStorage.projectName; + + var osListElement = document.getElementById('adminGitProjectTableOsList:'+projectName); + for(var i = 0; i < osListElement.childNodes.length; i++) + { + selectedOsList.push(osListElement.childNodes[i].innerHTML); + } + + fieldset = document.getElementById('popup:modifyGitProjectOs'); + /* remove all table rows */ + while(fieldset.hasChildNodes()) + { + fieldset.removeChild(fieldset.firstChild); + } + + legend = document.createElement('legend'); + legend.innerHTML = "Project os list"; + fieldset.appendChild(legend); + + osList.each(function(){ + var osName = $(this).text(); + + var input = document.createElement('input'); + input.type = 'checkbox'; + input.id = 'popup:modifyGitProjectOs:'+osName; + input.name = 'popup:modifyGitProjectOs' + input.value = osName; + input.setAttribute('class', 'popup:modifyGitProjectOs'); + if(contains(selectedOsList, osName)) + { + input.setAttribute('checked', 'checked'); + } + + var label = document.createElement('label'); + label.setAttribute('for', 'popup:modifyGitProjectOs:'+osName); + label.innerHTML = osName; + + fieldset.appendChild(input); + fieldset.appendChild(label); + }); + + $('.popup\\:modifyGitProjectOs').checkboxradio(); + }); +} + +function adminProjectModfyBinaryProject() { + var distName = $("#adminProjectDistributionSelect option:selected").val(); + var changeInfoList = []; + var changeInfoItem; + var oldProjectName = document.getElementById('popup:modifyBinaryOldProjectName').value; + var newProjectName = document.getElementById('popup:modifyBinaryNewProjectName').value; + var projectType = document.getElementById('popup:modifyBinaryProjectType').value; + var projectPassword = document.getElementById('popup:modifyBinaryProjectPassword').value; + var packageName = document.getElementById('popup:modifyBinaryPackageName').value; + + if(oldProjectName == "" || newProjectName == "" || projectPassword == "" || projectType == "" || packageName == ""){ + alert("You must input full data"); + return; + } + + changeInfoItem = {"Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":projectType, "ProjectPass":projectPassword, "PackageName":packageName}; + changeInfoList.push(changeInfoItem); + + modifyProject(changeInfoList, function () { + $.mobile.changePage("#adminProject"); + }); +} + +function adminProjectModfyGitProject() { + var distName = $("#adminProjectDistributionSelect option:selected").val(); + var changeInfoList = []; + var changeInfoItem; + var oldProjectName = document.getElementById('popup:modifyGitOldProjectName').value; + var newProjectName = document.getElementById('popup:modifyGitNewProjectName').value; + var projectType = document.getElementById('popup:modifyGitProjectType').value; + var projectPassword = document.getElementById('popup:modifyGitProjectPassword').value; + var projectAddress = document.getElementById('popup:modifyGitProjectAddress').value; + var projectBranch = document.getElementById('popup:modifyGitProjectBranch').value; + var selectArray = document.getElementsByName('popup:modifyGitProjectOs'); + var selectOsList = ""; + + for(var i = 0; i < selectArray.length; i++) { + if (selectArray[i].checked == true) { + var osName = selectArray[i].id.split(":")[2]; + selectOsList = selectOsList + "," + osName; + } + } + + if(selectOsList.length > 0) { + selectOsList = selectOsList.substring(1,selectOsList.length); + } + + if(oldProjectName == "" || newProjectName == "" || projectPassword == "" || projectType == "" || projectAddress == "" || projectBranch == ""){ + alert("You must input full data"); + return; + } + + changeInfoItem = {"Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":projectType, "ProjectPass":projectPassword, "ProjectAddress":projectAddress, "ProjectBranch":projectBranch, "OSNameList":selectOsList}; + changeInfoList.push(changeInfoItem); + + modifyProject(changeInfoList, function () { + $.mobile.changePage("#adminProject"); + }); +} + diff --git a/dibs-web/public/javascripts/admin-project.js b/dibs-web/public/javascripts/admin-project.js index ccd1dbe..b8705e1 100644 --- a/dibs-web/public/javascripts/admin-project.js +++ b/dibs-web/public/javascripts/admin-project.js @@ -1,178 +1,44 @@ -function addDistribution() { - var changeInfoList = []; - var changeInfoItem; - var name = document.getElementById("popup:addDistributionName").value; - var url = document.getElementById("popup:addPackageServerUrl").value; - var address = document.getElementById("popup:addPackageServerAddress").value; - var distStatus = $("#popup\\:addDistributionStatus option:selected").val(); +function adminProjectInit() { + queryAllDistribution( function (xml) { + var oldDistName = $("#adminProjectDistributionSelect option:selected").val(); + var find = false; + var distributionList = $(xml).find("Data").find("DistributionName"); - if(name == "" || url == "" || address == ""){ - alert("You must input full data"); - return; - } + // remove old select options + $("#adminProjectDistributionSelect").empty(); - changeInfoItem = {"Type":"AddDistribution", "Name":name, "URL":url, "Address":address, "DistStatus":distStatus}; - changeInfoList.push(changeInfoItem); + distributionList.each(function(){ + var name = $(this).text(); - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminProject", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - $.mobile.changePage("#adminProject"); - }, - error: function(jqXHR) { - switch (jqXHR.status) { - case 401: - expireSession(); - break; - default: - alert(jqXHR); - $.mobile.changePage("#adminProject"); + if( oldDistName == name ) { + $("#adminProjectDistributionSelect").append(""); + find = true; + + } else { + $("#adminProjectDistributionSelect").append(""); } - } - }); -} - -function modifyDistribution() { - var changeInfoList = []; - var changeInfoItem; - var distName = $("#select-admin-distribution option:selected").val(); - var url = document.getElementById("popup:modifyPackageServerUrl").value; - var address = document.getElementById("popup:modifyPackageServerAddress").value; - var distStatus = $("#popup\\:modifyDistributionStatus option:selected").val(); - - if(distName == "" || url == "" || address == ""){ - alert("You must input full data"); - return; - } - - if(distStatus == "") { - distStatus = "OPEN"; - } - - changeInfoItem = {"Type":"ModifyDistribution", "Name":distName, "URL":url, "Address":address, "DistStatus":distStatus}; - changeInfoList.push(changeInfoItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminProject", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - $.mobile.changePage("#adminProject"); - }, - error: function(errMsg) { - alert('Error loading XML document'); - $.mobile.changePage("#adminProject"); - } - }); -} - -function removeDistribution() { - var distName = $("#select-admin-distribution option:selected").val(); - - var r = confirm("Distribution ["+distName+"] is removed!!!"); - if (r == false) - { - return; - } - - var changeInfoList = []; - var changeInfoItem; - changeInfoItem = {"Type":"RemoveDistribution", "Name":distName}; - changeInfoList.push(changeInfoItem); + }); - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminProject", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - $.mobile.changePage("#adminProject"); - }, - error: function(errMsg) { - alert('Error loading XML document'); - $.mobile.changePage("#adminProject"); + /* default distribution selection */ + if(!find) { + $("#adminProjectDistributionSelect option:eq(0)").attr("selected", "selected"); } - }); -} - -function addGitProject() { - var distName = $("#select-admin-distribution option:selected").val(); - - var changeInfoList = []; - var changeInfoItem; - - var type = "GIT"; - var name = document.getElementById("popup:addGitProjectName").value; - var password = document.getElementById("popup:addGitProjectPassword").value; - var address = document.getElementById("popup:addGitAddress").value; - var branch = document.getElementById("popup:addGitBranch").value; - if(name == "" || password == "" || address == "" || branch == ""){ - alert("You must input full data(Project name, Git password, Git address, Branch)"); - return; - } + $("#adminProjectDistributionSelect").selectmenu('refresh'); - changeInfoItem = {"Type":"AddProject", "Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "Address":address, "Branch":branch}; - changeInfoList.push(changeInfoItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminProject", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - document.getElementById("popup:addGitProjectName").value = ""; - document.getElementById("popup:addGitProjectPassword").value = ""; - document.getElementById("popup:addGitAddress").value = ""; - document.getElementById("popup:addGitBranch").value = ""; - $.mobile.changePage("#adminProject"); - }, - error: function(errMsg) { - alert(errMsg.responseText); - } + // set project info + adminProjectSetProjectInfo(); }); } -function addBinaryProject() { - var distName = $("#select-admin-distribution option:selected").val(); - - var changeInfoList = []; - var changeInfoItem; +function adminProjectSetProjectInfo() { + var distName = $("#adminProjectDistributionSelect option:selected").val(); - var type = "BINARY"; - var name = document.getElementById("popup:addBinaryProjectName").value; - var pkgName = document.getElementById("popup:addBinaryPackageName").value; - - if(name == "" || pkgName == ""){ - alert("You must input full data(Project name, Package name"); - return; - } - - changeInfoItem = {"Type":"AddProject", "Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "PackageName":pkgName}; - changeInfoList.push(changeInfoItem); + queryProjectsInDistributionForAdmin( distName, function (xml) { + var projectList = $(xml).find("Data").find("Project"); - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminProject", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - document.getElementById("popup:addBinaryProjectName").value = ""; - document.getElementById("popup:addBinaryPackageName").value = ""; - $.mobile.changePage("#adminProject"); - }, - error: function(errMsg) { - alert(errMsg.responseText); - } + // update project info + adminProjectUpdateTable(projectList); }); } @@ -180,90 +46,8 @@ function popupModifyProject(projectName) { localStorage.projectName = projectName; } -function modifyBinaryProject() { - var distName = $("#select-admin-distribution option:selected").val(); - var changeInfoList = []; - var changeInfoItem; - var oldProjectName = document.getElementById('popup:modifyBinaryOldProjectName').value; - var newProjectName = document.getElementById('popup:modifyBinaryNewProjectName').value; - var projectType = document.getElementById('popup:modifyBinaryProjectType').value; - var projectPassword = document.getElementById('popup:modifyBinaryProjectPassword').value; - var packageName = document.getElementById('popup:modifyBinaryPackageName').value; - - if(oldProjectName == "" || newProjectName == "" || projectPassword == "" || projectType == "" || packageName == ""){ - alert("You must input full data"); - return; - } - - changeInfoItem = {"Type":"ModifyProject", "Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":projectType, "ProjectPass":projectPassword, "PackageName":packageName}; - changeInfoList.push(changeInfoItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminProject", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - $.mobile.changePage("#adminProject"); - }, - error: function(errMsg) { - alert(errMsg); - $.mobile.changePage("#adminProject"); - } - }); -} - -function modifyGitProject() { - var distName = $("#select-admin-distribution option:selected").val(); - var changeInfoList = []; - var changeInfoItem; - var oldProjectName = document.getElementById('popup:modifyGitOldProjectName').value; - var newProjectName = document.getElementById('popup:modifyGitNewProjectName').value; - var projectType = document.getElementById('popup:modifyGitProjectType').value; - var projectPassword = document.getElementById('popup:modifyGitProjectPassword').value; - var projectAddress = document.getElementById('popup:modifyGitProjectAddress').value; - var projectBranch = document.getElementById('popup:modifyGitProjectBranch').value; - var selectArray = document.getElementsByName('popup:modifyGitProjectOs'); - var selectOsList = ""; - - for(var i = 0; i < selectArray.length; i++) { - if (selectArray[i].checked == true) { - var osName = selectArray[i].id.split(":")[2]; - selectOsList = selectOsList + "," + osName; - } - } - - if(selectOsList.length > 0) { - selectOsList = selectOsList.substring(1,selectOsList.length); - } - - if(oldProjectName == "" || newProjectName == "" || projectPassword == "" || projectType == "" || projectAddress == "" || projectBranch == ""){ - alert("You must input full data"); - return; - } - - changeInfoItem = {"Type":"ModifyProject", "Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":projectType, "ProjectPass":projectPassword, "ProjectAddress":projectAddress, "ProjectBranch":projectBranch, "OSNameList":selectOsList}; - changeInfoList.push(changeInfoItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminProject", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - $.mobile.changePage("#adminProject"); - }, - error: function(errMsg) { - alert(errMsg); - $.mobile.changePage("#adminProject"); - } - }); -} - -function removeProject(projectType, tableIndex, projectName ) { - var distName = $("#select-admin-distribution option:selected").val(); +function adminProjectRemoveProject(projectType, projectName ) { + var distName = $("#adminProjectDistributionSelect option:selected").val(); var r=confirm("Project ["+projectName+"] is removed!!!"); if (r==false) @@ -273,37 +57,15 @@ function removeProject(projectType, tableIndex, projectName ) { var changeInfoList = []; var changeInfoItem; - changeInfoItem = {"Type":"RemoveProject", "Distribution":distName, "ProjectType":projectType, "Name":projectName}; + changeInfoItem = {"Distribution":distName, "ProjectType":projectType, "Name":projectName}; changeInfoList.push(changeInfoItem); - if(projectType == "GIT") - { - var table = document.getElementById("adminProjectTable"); - table.deleteRow(tableIndex); - } - else if (projectType == "BINARY") - { - var table = document.getElementById("adminBinaryProjectTable"); - table.deleteRow(tableIndex); - } - else - { - alert("Project type is invalid"); - return; - } - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminProject", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - error: function(errMsg) { - } + removeProject(changeInfoList, function () { + $.mobile.changePage("#adminProject"); }); } -function updateProjectInfo(projectList) { +function adminProjectUpdateTable(projectList) { /* project table */ var projectTable = document.getElementById("adminProjectTable"); @@ -320,9 +82,6 @@ function updateProjectInfo(projectList) { binaryProjectTable.removeChild(binaryProjectTable.firstChild); } - var projectTable = document.getElementById("adminProjectTable"); - var binaryProjectTable = document.getElementById("adminBinaryProjectTable"); - // Project table header var tableHeader = "ProjectGit reposBranchOS listModifyDelete"; $("#adminProjectTable").append(tableHeader); @@ -360,7 +119,7 @@ function updateProjectInfo(projectList) { cell.innerHTML = $(this).find("GitBranch").text(); cell = row.insertCell(-1); - div = generateProjectOsList(osList, name); + div = adminProjectApendOsCell(osList, name); cell.appendChild(div); cell = row.insertCell(-1); @@ -381,7 +140,7 @@ function updateProjectInfo(projectList) { button.setAttribute('data-mini','true'); button.setAttribute('name',name); button.setAttribute('class','binaryProjectTableButton'); - button.setAttribute('onClick','removeProject(\"GIT\",'+binaryProjectIdx+',\"'+name+'\"'+')'); + button.setAttribute('onClick','adminProjectRemoveProject(\"GIT\"'+',\"'+name+'\"'+')'); cell.appendChild(button); projectIdx = projectIdx + 1; @@ -418,7 +177,7 @@ function updateProjectInfo(projectList) { button.setAttribute('class','binaryProjectTableButton'); button.setAttribute('data-mini','true'); button.setAttribute('name',name); - button.setAttribute('onClick','removeProject(\"BINARY\",'+binaryProjectIdx+',\"'+name+'\"'+')'); + button.setAttribute('onClick','adminProjectRemoveProject(\"BINARY\"'+',\"'+name+'\"'+')'); cell.appendChild(button); binaryProjectIdx = binaryProjectIdx + 1; @@ -432,7 +191,7 @@ function updateProjectInfo(projectList) { $(".groupProjectList").collapsible(); } -function generateProjectOsList(osList, projectName) { +function adminProjectApendOsCell(osList, projectName) { var div = document.createElement('div'); div.setAttribute('data-role', 'collapsible'); div.setAttribute('data-mini', 'true'); @@ -456,209 +215,4 @@ function generateProjectOsList(osList, projectName) { return div; } -function queryDistributionInfo() { - var distName = $("#select-admin-distribution option:selected").val(); - - $.ajax({ - url: baseUrl+'/admin/queryDistributionInfo/' + distName, - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, - success: function(xml) { - var distribution = $(xml).find("Distribution"); - var name = distribution.find("DistributionName").text(); - var url = distribution.find("PackageServerUrl").text(); - var address = distribution.find("PackageServerAddress").text(); - var distStatus = distribution.find("Status").text(); - var projectList = distribution.find("Project"); - - $("#ProjectTable\\:packageServerUrl").text(url); - $("#ProjectTable\\:packageServerAddress").text(address); - $("#ProjectTable\\:distributionStatus").text(distStatus); - - // update project info - updateProjectInfo(projectList); - } - }); -} - -function queryAdminProject() { - $.ajax({ - url: baseUrl+'/admin/queryDistributions', - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, - success: function(xml) { - var oldDistName = $("#select-admin-distribution option:selected").val(); - var find = false; - - // remove old select options - $("#select-admin-distribution").empty(); - - $(xml).find("Distribution").find("Name").each(function(){ - var name = $(this).text(); - - if( oldDistName == name ) { - $("#select-admin-distribution").append(""); - find = true; - - } else { - $("#select-admin-distribution").append(""); - } - }); - - /* default distribution selection */ - if(!find) { - $("#select-admin-distribution option:eq(0)").attr("selected", "selected"); - } - - $("#select-admin-distribution").selectmenu('refresh'); - - // query distributino info - queryDistributionInfo(); - } - }); -} - -function setupModifyBinaryProject() { - var projectName = localStorage.projectName; - var packageName = document.getElementById('modifyBinaryPackageName:'+projectName).innerHTML; - - document.getElementById('popup:modifyBinaryOldProjectName').value = projectName; - document.getElementById('popup:modifyBinaryNewProjectName').value = projectName; - document.getElementById('popup:modifyBinaryProjectPassword').value = ""; - document.getElementById('popup:modifyBinaryPackageName').value = packageName; -} - -function setupModifyGitProject() { - var projectName = localStorage.projectName; - var projectAddress = document.getElementById('modifyGitProjectAddress:'+projectName).innerHTML; - var projectBranch = document.getElementById('modifyGitProjectBranch:'+projectName).innerHTML; - - document.getElementById('popup:modifyGitOldProjectName').value = projectName; - document.getElementById('popup:modifyGitNewProjectName').value = projectName; - document.getElementById('popup:modifyGitProjectPassword').value = ""; - document.getElementById('popup:modifyGitProjectAddress').value = projectAddress; - document.getElementById('popup:modifyGitProjectBranch').value = projectBranch; - - $.ajax({ - url: baseUrl+'/admin/queryAdminAllOS', - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, - success: function(xml) { - var osList = $(xml).find("AllOS").find("Name"); - var selectedOsList = []; - var projectName = localStorage.projectName; - - var osListElement = document.getElementById('adminGitProjectTableOsList:'+projectName); - for(var i = 0; i < osListElement.childNodes.length; i++) - { - selectedOsList.push(osListElement.childNodes[i].innerHTML); - } - - fieldset = document.getElementById('popup:modifyGitProjectOs'); - /* remove all table rows */ - while(fieldset.hasChildNodes()) - { - fieldset.removeChild(fieldset.firstChild); - } - - legend = document.createElement('legend'); - legend.innerHTML = "Project os list"; - fieldset.appendChild(legend); - - osList.each(function(){ - var osName = $(this).text(); - - var input = document.createElement('input'); - input.type = 'checkbox'; - input.id = 'popup:modifyGitProjectOs:'+osName; - input.name = 'popup:modifyGitProjectOs' - input.value = osName; - input.setAttribute('class', 'popup:modifyGitProjectOs'); - if(contains(selectedOsList, osName)) - { - input.setAttribute('checked', 'checked'); - } - - var label = document.createElement('label'); - label.setAttribute('for', 'popup:modifyGitProjectOs:'+osName); - label.innerHTML = osName; - - fieldset.appendChild(input); - fieldset.appendChild(label); - }); - - $('.popup\\:modifyGitProjectOs').checkboxradio(); - } - }); -} - -function setupModifyDistribution() { - var distName = $("#select-admin-distribution option:selected").val(); - var packageServerUrl = document.getElementById("ProjectTable:packageServerUrl").innerHTML; - var packageServeraddress = document.getElementById("ProjectTable:packageServerAddress").innerHTML; - var serverStatus = document.getElementById("ProjectTable:distributionStatus").innerHTML; - - document.getElementById('popup:modifyPackageServerUrl').value = packageServerUrl; - document.getElementById('popup:modifyPackageServerAddress').value = packageServeraddress; - document.getElementById('popup:modifyDistributionStatus').value = serverStatus; -} - -function setupAddGitProject() { - $.ajax({ - url: baseUrl+'/admin/queryAdminAllOS', - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, - success: function(xml) { - var osList = $(xml).find("AllOS").find("Name"); - - fieldset = document.getElementById('popup:addGitProjectOs'); - /* remove all table rows */ - while(fieldset.hasChildNodes()) - { - fieldset.removeChild(fieldset.firstChild); - } - - legend = document.createElement('legend'); - legend.innerHTML = "Project os list"; - fieldset.appendChild(legend); - - osList.each(function(){ - var osName = $(this).text(); - - var input = document.createElement('input'); - input.type = 'checkbox'; - input.id = 'popup:addGitProjectOsCheckbox:'+osName; - input.value = osName; - input.setAttribute('class', 'popup:addGitProjectOsCheckbox'); - input.setAttribute('checked', 'checked'); - - var label = document.createElement('label'); - label.setAttribute('for', 'popup:addGitProjectOsCheckbox:'+osName); - label.innerHTML = osName; - - fieldset.appendChild(input); - fieldset.appendChild(label); - }); - - $('.popup\\:addGitProjectOsCheckbox').checkboxradio(); - } - }); -} - diff --git a/dibs-web/public/javascripts/admin-server-add.js b/dibs-web/public/javascripts/admin-server-add.js new file mode 100644 index 0000000..ca5e508 --- /dev/null +++ b/dibs-web/public/javascripts/admin-server-add.js @@ -0,0 +1,105 @@ +function adminServerAddSupportedOsInit() { + // Remove select option + $('#adminServer-AddSupportedOs-OsCategory').empty(); + + queryAllOSCategory(function(xml){ + $(xml).find("Data").find("OsCategoryName").each(function(){ + var name = $(this).text(); + + $('#adminServer-AddSupportedOs-OsCategory').append(""); + + $('#adminServer-AddSupportedOs-OsCategory').selectmenu('refresh'); + }); + }); +} + +function adminServerAddRemoteBuildServer() { + var changeInfoList = []; + var changeInfoItem; + + var address = document.getElementById("adminServer-AddRemoteBuildServer-Address").value; + var description = document.getElementById("adminServer-AddRemoteBuildServer-Description").value; + + if(address == ""){ + alert("You must input server address"); + return; + } + + changeInfoItem = {"Address":address, "Description":description}; + changeInfoList.push(changeInfoItem); + + addRemoteBuildServer(changeInfoList, function () { + document.getElementById('adminServer-AddRemoteBuildServer-Address').value = ""; + document.getElementById('adminServer-AddRemoteBuildServer-Description').value = ""; + + $.mobile.changePage("#adminServer"); + }); +} + +function adminServerAddSupportedOs() { + var changeInfoList = []; + var changeInfoItem; + + var osName = document.getElementById("adminServer-AddSupportedOs-OsName").value; + var osCategory = $("#adminServer-AddSupportedOs-OsCategory option:selected").val(); + + if(osName == ""){ + alert("You must input server address"); + return; + } + + changeInfoItem = {"Name":osName, "OsCategory":osCategory}; + changeInfoList.push(changeInfoItem); + + addSupportedOS(changeInfoList, function () { + document.getElementById('adminServer-AddSupportedOs-OsName').value = ""; + + $.mobile.changePage("#adminServer"); + }); +} + +function adminServerAddOSCategory() { + var changeInfoList = []; + var changeInfoItem; + + var categoryName = document.getElementById("adminServer-AddOsCategory-Name").value; + + if(categoryName == ""){ + alert("You must input category name"); + return; + } + + changeInfoItem = {"Name":categoryName}; + changeInfoList.push(changeInfoItem); + + addOSCategory(changeInfoList, function () { + document.getElementById('adminServer-AddOsCategory-Name').value = ""; + + $.mobile.changePage("#adminServer"); + }); +} + +function adminServerAddServerInfo() { + var property = document.getElementById('adminServer-addServerInfo-property').value; + var value = document.getElementById('adminServer-addServerInfo-value').value; + var changeInfoList = []; + var changeInfoItem; + + if(property == ""){ + alert("property is empty"); + return; + } + + if(value == ""){ + alert("value is empty"); + return; + } + + changeInfoItem = {"Property":property, "Value":value}; + changeInfoList.push(changeInfoItem); + + addServerInfo(changeInfoList, function () { + $.mobile.changePage("#adminServer"); + }); +} + diff --git a/dibs-web/public/javascripts/admin-server-modify.js b/dibs-web/public/javascripts/admin-server-modify.js new file mode 100644 index 0000000..324b797 --- /dev/null +++ b/dibs-web/public/javascripts/admin-server-modify.js @@ -0,0 +1,97 @@ +function adminServerModifyRemoteBuildServerInit() { + var serverAddress = localStorage.remoteBuildServerAddress; + var serverDescription = localStorage.remoteBuildServerDescription; + + document.getElementById('adminServer-modifyRemoteBuildServer-OldAddress').value = serverAddress; + document.getElementById('adminServer-modifyRemoteBuildServer-newAddress').value = serverAddress; + document.getElementById('adminServer-modifyRemoteBuildServer-description').value = serverDescription +} + +function adminServerModifyServerInfoInit(property, value) { + document.getElementById('adminServer-modifyServerInfo-property').value = property; + document.getElementById('adminServer-modifyServerInfo-value').value = value; +} + +function adminServerModifySupportedOSInit(osName, osCategory) { + // Remove select option + $('#adminServer-ModifySupportedOs-OsCategory').empty(); + + document.getElementById('adminServer-ModifySupportedOs-OldOsName').value = osName; + document.getElementById('adminServer-MoidfySupportedOs-OsName').value = osName; + + queryAllOSCategory( function(xml){ + $(xml).find("Data").find("OsCategoryName").each(function(){ + var name = $(this).text(); + var option = "" + + if(name == osCategory) { + option = '' + } else { + option = '' + } + + $('#adminServer-ModifySupportedOs-OsCategory').append(option); + $('#adminServer-ModifySupportedOs-OsCategory').selectmenu("refresh"); + }); + }); +} + +function adminServerModifyRemoteBuildServer() { + var changeInfoList = []; + var changeInfoItem; + var serverAddress = document.getElementById('adminServer-modifyRemoteBuildServer-OldAddress').value; + var newServerAddress = document.getElementById('adminServer-modifyRemoteBuildServer-newAddress').value; + var description = document.getElementById('adminServer-modifyRemoteBuildServer-description').value; + + if(serverAddress == ""){ + alert("server address is invalid"); + return; + } + + changeInfoItem = {"Type":"ModifyServer", "Address":serverAddress, "NewAddress":newServerAddress, "Description":description}; + changeInfoList.push(changeInfoItem); + + modifyRemoteBuildServer(changeInfoList, function () { + $.mobile.changePage("#adminServer"); + }); +} + +function adminServerModifySupportedOS() { + var changeInfoList = []; + var changeInfoItem; + var oldOsName = document.getElementById('adminServer-ModifySupportedOs-OldOsName').value; + var osName = document.getElementById('adminServer-MoidfySupportedOs-OsName').value; + var osCategory = $("#adminServer-ModifySupportedOs-OsCategory option:selected").val(); + + changeInfoItem = {"Name":oldOsName, "NewName":osName, "OsCategory":osCategory}; + changeInfoList.push(changeInfoItem); + + modifySupportedOS(changeInfoList, function () { + $.mobile.changePage("#adminServer"); + }); +} + +function adminServerModifyServerInfo() { + var property = document.getElementById('adminServer-modifyServerInfo-property').value; + var value = document.getElementById('adminServer-modifyServerInfo-value').value; + var changeInfoList = []; + var changeInfoItem; + + if(property == ""){ + alert("property is empty"); + return; + } + + if(value == ""){ + alert("value is empty"); + return; + } + + changeInfoItem = {"Property":property, "Value":value}; + changeInfoList.push(changeInfoItem); + + modifyServerInfo(changeInfoList, function () { + $.mobile.changePage("#adminServer"); + }); +} + diff --git a/dibs-web/public/javascripts/admin-server-remove.js b/dibs-web/public/javascripts/admin-server-remove.js new file mode 100644 index 0000000..6a4b570 --- /dev/null +++ b/dibs-web/public/javascripts/admin-server-remove.js @@ -0,0 +1,70 @@ +function adminServerRemoveOSCategoryInit() { + // Remove select option + $('#adminServer-RemoveOSCategory-CategorySelect').empty(); + + queryAllOSCategory(function(xml){ + $(xml).find("Data").find("OsCategoryName").each(function(){ + var name = $(this).text(); + + $('#adminServer-RemoveOSCategory-CategorySelect').append(""); + + $('#adminServer-RemoveOSCategory-CategorySelect').selectmenu('refresh'); + }); + }); +} + +function adminServerRemoveOSCategory() { + var changeInfoList = []; + var changeInfoItem; + var osCategory = $("#adminServer-RemoveOSCategory-CategorySelect option:selected").val(); + + if(osCategory == ""){ + alert("Os category is invalid"); + return; + } + + changeInfoItem = {"Name":osCategory}; + changeInfoList.push(changeInfoItem); + + removeOSCategory(changeInfoList, function () { + $.mobile.changePage("#adminServer"); + }); +} + +function adminServerRemoveSupportedOS() { + var changeInfoList = []; + var changeInfoItem; + var oldOsName = document.getElementById('adminServer-ModifySupportedOs-OldOsName').value; + var osName = document.getElementById('adminServer-MoidfySupportedOs-OsName').value; + + if(oldOsName != osName ){ + alert("Remove command must be same to original os name"); + return; + } + + changeInfoItem = {"Name":osName}; + changeInfoList.push(changeInfoItem); + + removeSupportedOS(changeInfoList, function () { + $.mobile.changePage("#adminServer"); + }); +} + +function adminServerRemoveServerInfo() { + var property = document.getElementById('adminServer-modifyServerInfo-property').value; + var changeInfoList = []; + var changeInfoItem; + + if(property == ""){ + alert("property is empty"); + return; + } + + changeInfoItem = {"Property":property}; + changeInfoList.push(changeInfoItem); + + removeServerInfo(changeInfoList, function () { + $.mobile.changePage("#adminServer"); + }); +} + diff --git a/dibs-web/public/javascripts/admin-server.js b/dibs-web/public/javascripts/admin-server.js index f45323e..e6068d6 100644 --- a/dibs-web/public/javascripts/admin-server.js +++ b/dibs-web/public/javascripts/admin-server.js @@ -1,173 +1,75 @@ +function adminServerInit() { + $('#adminServer-RemoteBuildServer').collapsible(); + + queryAllServer( function (xml) { + var serverConfig = $(xml).find("Data").find("ServerConfig"); + var buildServerList = $(xml).find("Data").find("RemoteBuildServer"); + var syncPackageServerList = $(xml).find("Data").find("SyncPackageServer"); + adminServerInitServerInfo(serverConfig); + adminServerRemoteInitRemoteBuildServer(buildServerList); + }); -function fillServerTable(serverList){ - var serverTable = document.getElementById("serverTable"); + queryAllOS( function (xml) { + $("#adminServer-SupportedOS").empty(); - /* remove all table rows */ - while(serverTable.hasChildNodes()) - { - serverTable.removeChild(serverTable.firstChild); - } + $(xml).find("Data").find("OS").each(function(){ + var osName = $(this).find("OsName").text(); + var osCategory = $(this).find("OsCategory").text(); - /* create table header */ - var row = groupTable.insertRow(-1); - var tableHeader = ""; - tableHeader = " Server Address Modify Delete "; - $("#serverTable").append(tableHeader); - - var index = 2; + var li = '
  • '; + li += '

    OS category : '+osCategory+'

    '; + li += '
  • '; - serverList.each(function(){ - var address = $(this).find("Address").text(); - var row = serverTable.insertRow(-1); - - cell = row.insertCell(-1); - cell.setAttribute('id','serverAddressTable'+':'+index); - cell.innerHTML = address - - cell = row.insertCell(-1); - var button = document.createElement('a'); - button.setAttribute('href','#modifyServer'); - button.setAttribute('data-role','button'); - button.setAttribute('data-rel','dialog'); - button.setAttribute('data-mini','true'); - button.setAttribute('onClick','popupModifyServer(\"'+index+'\")'); - button.setAttribute('class','serverTableCellButton'); - button.setAttribute('name', address); - button.innerHTML = " " - cell.appendChild(button); - - cell = row.insertCell(-1); - var button = document.createElement('a'); - button.setAttribute('href','#adminServer'); - button.setAttribute('data-role','button'); - button.setAttribute('data-mini','true'); - button.setAttribute('onClick','removeServer(\"'+index+'\")'); - button.setAttribute('class','serverTableCellButton'); - button.setAttribute('name', address); - button.innerHTML = " " - cell.appendChild(button); - - index = index + 1; - }); - - $(".serverTableCellButton").button(); -} + $("#adminServer-SupportedOS").append(li); + }); -function addServer() { - var changeInfoList = []; - var changeInfoItem; - - var serverAddress = document.getElementById("popup:addServerAddress").value; - - if(serverAddress == ""){ - alert("You must input server address"); - return; - } - - changeInfoItem = {"Type":"AddServer", "Address":serverAddress}; - changeInfoList.push(changeInfoItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminServer", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - document.getElementById("popup:addServerAddress").value = ""; - $.mobile.changePage("#adminServer"); - }, - error: function(errMsg) { - alert(errMsg.responseText); - $.mobile.changePage("#adminServer"); - } + $("#adminServer-SupportedOS").listview('refresh'); }); } -function removeServer(index) { - var serverAddress = document.getElementById("serverAddressTable:"+index).innerHTML; - var changeInfoList = []; - var changeInfoItem; - - if(serverAddress == ""){ - alert("server address is invalid"); - return; - } - - changeInfoItem = {"Type":"RemoveServer", "Address":serverAddress}; - changeInfoList.push(changeInfoItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminServer", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - document.getElementById("popup:addServerAddress").value = ""; - $.mobile.changePage("#adminServer"); - }, - error: function(errMsg) { - alert(errMsg.responseText); - $.mobile.changePage("#adminServer"); - } - }); -} +function adminServerInitServerInfo(serverConfig){ + $("#adminServer-ServerInfo").empty(); -function popupModifyServer(index) { - localStorage.serverTableIndex = index; -} + serverConfig.each(function(){ + var property = $(this).find("Property").text(); + var value = $(this).find("Value").text(); -function setupModifyServer() { - var index = localStorage.serverTableIndex; - var serverAddress = document.getElementById("serverAddressTable:"+index).innerHTML; + var li = '
  • '; + li += '
  • '; + $("#adminServer-ServerInfo").append(li); + }); - document.getElementById('popup:modifyServerOldAddress').value = serverAddress; - document.getElementById('popup:modifyServerNewAddress').value = serverAddress; + $("#adminServer-ServerInfo").listview('refresh'); } -function modifyServer() { - var changeInfoList = []; - var changeInfoItem; - var serverAddress = document.getElementById('popup:modifyServerOldAddress').value; - var newServerAddress = document.getElementById('popup:modifyServerNewAddress').value; - - if(serverAddress == ""){ - alert("server address is invalid"); - return; - } - - changeInfoItem = {"Type":"ModifyServer", "Address":serverAddress, "NewAddress":newServerAddress}; - changeInfoList.push(changeInfoItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminServer", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - $.mobile.changePage("#adminServer"); - }, - error: function(errMsg) { - alert(errMsg.responseText); - $.mobile.changePage("#adminServer"); - } +function adminServerRemoteInitRemoteBuildServer(serverList){ + $("#adminServer-RemoteBuildServer").empty(); + + serverList.each(function(){ + var address = $(this).find("Address").text(); + var description = $(this).find("Description").text(); + + var li = '
  • '; + li += '

    Description : '+$(this).find("Description").text()+'

    '; + li += '
  • '; + + $("#adminServer-RemoteBuildServer").append(li); }); + + $("#adminServer-RemoteBuildServer").listview('refresh'); } -function queryAdminServer() { - $.ajax({ - url: baseUrl+'/admin/queryAdminServer', - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, - success: function(xml) { - var serverList = $(xml).find("Servers").find("Server"); - fillServerTable(serverList); - } - }); +function popupModifyRemoteBuildServerInfo(address, description) { + localStorage.remoteBuildServerAddress = address; + localStorage.remoteBuildServerDescription = description; } + diff --git a/dibs-web/public/javascripts/admin-user-modify.js b/dibs-web/public/javascripts/admin-user-modify.js new file mode 100644 index 0000000..e950655 --- /dev/null +++ b/dibs-web/public/javascripts/admin-user-modify.js @@ -0,0 +1,43 @@ +function adminUserModifyPopupInit() { + var index = localStorage.userTableIndex; + var userName = document.getElementById("userTableName:"+index).innerHTML; + var email = document.getElementById("userTableEmail:"+index).innerHTML; + var group = document.getElementById("userTableGroup:"+index).innerHTML; + + document.getElementById('popup:modifyUserName').value = userName; + mailElement = document.getElementById('popup:modifyUserEmail'); + mailElement.value = email; + mailElement.setAttribute('disabled', 'disabled'); + + queryAllGroup( function(xml) { + var groupList = $(xml).find("Data").find("GroupName"); + + $("#popup\\:modifyUserGroup").empty(); + + groupList.each( function(){ + var groupName = $(this).text(); + if( groupName == group ) { + $("#popup\\:modifyUserGroup").append(""); + } else { + $("#popup\\:modifyUserGroup").append(""); + } + + $("#popup\\:modifyUserGroup").selectmenu('refresh'); + }); + }); +} + +function adminUserModifyPopupModify() { + var userName = document.getElementById("popup:modifyUserName").value; + var email = document.getElementById("popup:modifyUserEmail").value; + var groupName = $("#popup\\:modifyUserGroup option:selected").val(); + + var changeInfoList = []; + var changeInfoItem; + changeInfoItem = {"Type":"ModifyUser", "Email":email, "UserName":userName, "GroupName":groupName}; + changeInfoList.push(changeInfoItem); + + changeUser(changeInfoList, function () { + }); +} + diff --git a/dibs-web/public/javascripts/admin-user.js b/dibs-web/public/javascripts/admin-user.js index 0c3a88f..9e84e23 100644 --- a/dibs-web/public/javascripts/admin-user.js +++ b/dibs-web/public/javascripts/admin-user.js @@ -1,4 +1,4 @@ -function fillUserTable(userList) { +function adminUserInit() { var userTable = document.getElementById("adminUserTable"); /* remove all table rows */ @@ -8,11 +8,18 @@ function fillUserTable(userList) { } /* create table header */ - var row = userTable.insertRow(-1); - var tableHeader = ""; - tableHeader = "User nameEmailGroupModifyDelete"; + var tableHeader = "User nameEmailGroupModifyDelete"; $("#adminUserTable").append(tableHeader); + queryAllUser( function(xml) { + var userList = $(xml).find("Data").find("User"); + + adminUserFillTable(userList); + }); +} + +function adminUserFillTable(userList) { + var userTable = document.getElementById("adminUserTable"); var index = 2; userList.each(function(idx){ @@ -37,102 +44,34 @@ function fillUserTable(userList) { cell = row.insertCell(-1); var button = document.createElement('a'); - button.setAttribute('href','#modifyUser'); + button.setAttribute('href','#adminUserModifyPopup'); button.setAttribute('data-role','button'); button.setAttribute('data-rel','dialog'); - button.setAttribute('data-mini','true'); - button.setAttribute('onClick','popupModifyUser(\"'+index+'\")'); - button.setAttribute('id',"input:modifyUser:"+index); + button.setAttribute('class','adminUserTableButton'); + button.setAttribute('onClick','adminUserModifyPopupSetup(\"'+index+'\")'); button.innerHTML = " " cell.appendChild(button); - $("#input\\:modifyUser\\:"+index).button(); cell = row.insertCell(-1); - var checkbox= document.createElement('input'); - checkbox.setAttribute('type','button'); - checkbox.setAttribute('id','userDeleteButton'+':'+index); - checkbox.setAttribute('name',email); - checkbox.setAttribute('data-mini','true'); - checkbox.setAttribute('onClick','removeUser('+index+')'); - cell.appendChild(checkbox); - $("#userDeleteButton\\:"+index).button(); + var button = document.createElement('input'); + button.setAttribute('type','button'); + button.setAttribute('name',email); + button.setAttribute('class','adminUserTableButton'); + button.setAttribute('onClick','adminUserRemoveUser('+index+')'); + cell.appendChild(button); index = index + 1; }); -} -function popupModifyUser(index) { - localStorage.userTableIndex = index; + $(".adminUserTableButton").button(); } -function changeUserInfo() { - var userTable = document.getElementById("adminUserTable"); - var changeInfoList = []; - - var deleteArray = []; - deleteArray = document.getElementsByName('deleteCheckbox'); - for(var i = 0; i < deleteArray.length; i++) { - if (deleteArray[i].checked) { - var rowLine = deleteArray[i].id.split(":")[1]; - var email = deleteArray[i].id.split(":")[2]; - - changeItem = {"Type":"RemoveUser", "Email" : email}; - changeInfoList.push(changeItem); - userTable.deleteRow(rowLine); - } - } - - var selectArray = []; - selectArray = document.getElementsByName('groupSelect'); - for(var i = 0; i < selectArray.length; i++) { - email = selectArray[i].id.split(":")[1]; - group = selectArray[i].value; - changeItem = {"Type":"ChangeGroup", "Email" : email, "groupName" : group}; - changeInfoList.push(changeItem); - } - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminUser", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function(succMsg) { - queryAdminUser(); - }, - error: function(errMsg) { - alert(errMsg); - } - }); -} - -function modifyUser() { - var userName = document.getElementById("popup:modifyUserName").value; - var email = document.getElementById("popup:modifyUserEmail").value; - var groupName = $("#popup\\:modifyUserGroup option:selected").val(); - - var changeInfoList = []; - var changeInfoItem; - changeInfoItem = {"Type":"ModifyUser", "Email":email, "UserName":userName, "GroupName":groupName}; - changeInfoList.push(changeInfoItem); - - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminUser", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - $.mobile.changePage("#adminUser"); - }, - error: function(errMsg) { - alert(errMsg); - $.mobile.changePage("#adminUser"); - } - }); +function adminUserModifyPopupSetup(index) { + localStorage.userTableIndex = index; } -function removeUser(index) { - var email = document.getElementById("userDeleteButton:"+index).name; +function adminUserRemoveUser(index) { + var email = document.getElementById("userTableEmail:"+index).innerHTML; var r=confirm("User ["+email+"] is removed!!!"); if (r==false) @@ -145,72 +84,8 @@ function removeUser(index) { changeInfoItem = {"Type":"RemoveUser", "Email":email}; changeInfoList.push(changeInfoItem); - $.ajax({ - type: "POST", - url: baseUrl+"/admin/changeAdminUser", - data: JSON.stringify({ ChangeInfoList: changeInfoList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - $.mobile.changePage("#adminUser"); - }, - error: function(errMsg) { - alert(errMsg); - $.mobile.changePage("#adminUser"); - } - }); -} - -function queryAdminUser() { - $.ajax({ - url: baseUrl+'/admin/queryAdminUser', - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, - success: function(xml) { - var userList = $(xml).find("Users").find("User"); - - fillUserTable(userList); - } + removeUser(changeInfoList, function () { + $.mobile.changePage("#adminUser"); }); } -function setupModifyUser() { - var index = localStorage.userTableIndex; - var userName = document.getElementById("userTableName:"+index).innerHTML; - var email = document.getElementById("userTableEmail:"+index).innerHTML; - var group = document.getElementById("userTableGroup:"+index).innerHTML; - - document.getElementById('popup:modifyUserName').value = userName; - mailElement = document.getElementById('popup:modifyUserEmail'); - mailElement.value = email; - mailElement.setAttribute('disabled', 'disabled'); - - $.ajax({ - url: baseUrl+'/admin/queryAdminAllGroupName', - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, - success: function(xml) { - var groupList = $(xml).find("AllGroup").find("Name"); - $("#popup\\:modifyUserGroup").empty(); - - groupList.each(function(){ - var groupName = $(this).text(); - if( groupName == group ) { - $("#popup\\:modifyUserGroup").append(""); - } else { - $("#popup\\:modifyUserGroup").append(""); - } - }); - - $("#popup\\:modifyUserGroup").selectmenu('refresh'); - } - }); -} diff --git a/dibs-web/public/javascripts/build.js b/dibs-web/public/javascripts/build.js new file mode 100644 index 0000000..88b1426 --- /dev/null +++ b/dibs-web/public/javascripts/build.js @@ -0,0 +1,259 @@ +function buildInit() { + queryDistribution( function(xml) { + // remove old select options + $("#select-distribution").empty(); + + $(xml).find("Data").find("DistributionName").each(function(){ + var name = $(this).text(); + + $("#select-distribution").append(""); + }); + + /* default distribution selection */ + $("#select-distribution option:eq(0)").attr("selected", "selected"); + $("#select-distribution").selectmenu('refresh'); + + // query Project list + buildQueryProjectList(); + }); +} + +function buildQueryProjectList() { + var distName = $("#select-distribution option:selected").val(); + + queryProjectsInDistribution( distName, function(xml) { + buildInitTable(); + var xmlBody = $(xml).find("Data"); + buildAddTableRow( xmlBody.find("BuildServerInfo").find("supportedOs"), + xmlBody.find("Project"), + xmlBody.find("OtherProject")); + buildAddBinaryTableRow( xmlBody.find("BinaryProject"), + xmlBody.find("OtherBinaryProject")); + }); +} + + +function buildSelectAll(element) { + var checkboxes = document.getElementsByName(element.id); + var checked = element.checked; + for(var i in checkboxes) { + if(!checkboxes[i].disabled) { + checkboxes[i].checked = checked; + } + } +} + +function contains(a, obj) { + for (var i = 0; i < a.length; i++) { + if (a[i] == obj) { + return true; + } + } + return false; +} + +function buildInitTable() { + /* project table */ + var projectTable = document.getElementById("projectTable"); + + /* binary project table */ + var binaryProjectTable = document.getElementById("binaryProjectTable"); + + /* remove all table rows */ + while(projectTable.hasChildNodes()) + { + projectTable.removeChild(projectTable.firstChild); + } + while(binaryProjectTable.hasChildNodes()) + { + binaryProjectTable.removeChild(binaryProjectTable.firstChild); + } +} + +function buildAddTableRow(supportedOs, projectList, otherProjectList) { + // Table header + var idx = 0; + var tableHeader = ""; + var osArray = new Array(); + var projectTable = document.getElementById("projectTable"); + + // Project table header + tableHeader = "Project"; + supportedOs.each(function(){ + var osName = $(this).text(); + tableHeader = tableHeader + ""+osName+""; + + osArray[idx] = osName; + idx++; + }); + + tableHeader = tableHeader + "ALL"; + $("#projectTable").append(tableHeader); + + // table row - projectList + var index = 2; + + projectList.each(function(){ + var name = $(this).find("ProjectName").text(); + var osLists = $(this).find("OsList").text(); + var osList = osLists.split(","); + + var row = projectTable.insertRow(-1); + + var cell = row.insertCell(0); + cell.setAttribute('style', 'text-align: left'); + cell.setAttribute('bgcolor', '#dcddc0'); + cell.innerHTML = name; + + for (i=0;i'; + row += '' + packageName + '' + row += 'REGISTER'; + row += '' + + $("#binaryProjectTable tr:last").after(row); + }); + + otherProjectList.each(function(){ + var name = $(this).find("ProjectName").text(); + var packageName = $(this).find("PackageName").text(); + var row = binaryProjectTable.insertRow(-1); + + /* add project name */ + var cell = row.insertCell(0); + cell.setAttribute('style', 'text-align: left'); + cell.setAttribute('bgcolor', '#c0c0c0'); + cell.innerHTML = name; + + /* add package name */ + cell = row.insertCell(-1); + cell.setAttribute('style', 'text-align: left'); + cell.setAttribute('bgcolor', '#c0c0c0'); + cell.innerHTML = packageName; + + /* add empty cell for register */ + cell = row.insertCell(-1); + cell.setAttribute('style', 'text-align: left'); + cell.setAttribute('bgcolor', '#c0c0c0'); + cell.innerHTML = ""; + }); + + $('.binary_project_button').button(); + $('.binary_project_button').popupWindow({ + height:200, + width:400, + top:50, + left:50 + }); +} + +function buildBuildProject(type) { + var distName = $("#select-distribution option:selected").val(); + var buildProjectList = []; + + //var node_list = document.getElementsByTagName('input'); + var node_list = $("#build input") + for (var i = 0; i < node_list.length; i++) { + var node = node_list[i]; + + if (node.getAttribute('type') == "checkbox") { + if (node.checked == true) { + if (node.getAttribute('name') != "all-checkbox") { + var prjName = node.id.split(":")[1]; + var osName = node.id.split(":")[2]; + var buildData = { "distribution":distName, "buildType":type, "projectName" : prjName, "os" : osName }; + buildProjectList.push(buildData); + } + } + } + } + + buildProject(buildProjectList, function () { + alert("Build started! Move to jobs page"); + $.mobile.changePage("#jobs"); + }); +} + +function buildUploadBinaryName(project_name) { + localStorage.distibutionName = $("#select-distribution option:selected").val(); + localStorage.uploadBinaryProjectName = project_name; +} diff --git a/dibs-web/public/javascripts/dibs-api.js b/dibs-web/public/javascripts/dibs-api.js new file mode 100644 index 0000000..0451011 --- /dev/null +++ b/dibs-web/public/javascripts/dibs-api.js @@ -0,0 +1,253 @@ +// controller: Users +function signUp(infoList, successFunction) { + var url = '/users/signup'; + postForServer(url, infoList, successFunction); +} + +function queryUserInfo(successFunction) { + var url = '/users/query'; + getInfoFromServer(url, successFunction); +} + +function modifyUserInfo(changeInfoList, successFunction) { + var url = '/users/modify'; + postForServer(url, changeInfoList, successFunction); +} + +// controller: Sessions +function login(infoList, successFunction) { + var url = '/sessions/login'; + postForServer(url, infoList, successFunction); +} + +// controller: projects +function queryDistribution(successFunction) { + var url = '/projects/queryDistribution'; + getInfoFromServer(url, successFunction); +} + +// controller : projects +function buildProject(changeInfoList, successFunction) { + var url = '/projects/buildProject'; + postForServer(url, changeInfoList, successFunction); +} + +function queryProjectsInDistribution(distName, successFunction) { + var url = '/projects/queryProjectsInDistribution/' + distName; + getInfoFromServer(url, successFunction); +} + +function queryProjectsInfoInDistribution(distName, successFunction) { + var url = '/projects/queryProjectsInfoInDistribution/' + distName; + getInfoFromServer(url, successFunction); +} + +// controller : admin_group +function queryAllGroup(successFunction) { + var url = '/admin_group/queryAllGroup'; + getInfoFromServer(url, successFunction); +} + +function queryGroupInfo(groupName, successFunction) { + var url = '/admin_group/queryGroupInfo/' + groupName; + getInfoFromServer(url, successFunction); +} + +function addGroup(changeInfoList, successFunction) { + var url = '/admin_group/addGroup'; + postForServer(url, changeInfoList, successFunction); +} + +function removeGroup(changeInfoList, successFunction) { + var url = '/admin_group/removeGroup'; + postForServer(url, changeInfoList, successFunction); +} + +function changeGroup(changeInfoList, successFunction) { + var url = '/admin_group/modifyGroup'; + postForServer(url, changeInfoList, successFunction); +} + +// controller : admin_user +function queryAllUser(successFunction) { + var url = '/admin_user/queryAllUser'; + getInfoFromServer(url, successFunction); +} + +function changeUser(changeInfoList, successFunction) { + var url = '/admin_user/modifyUser'; + postForServer(url, changeInfoList, successFunction); +} + +function removeUser(changeInfoList, successFunction) { + var url = '/admin_user/removeUser'; + postForServer(url, changeInfoList, successFunction); +} + +// controller : admin_server +function queryServerInfo(successFunction) { + var url = '/admin_server/queryServerInfo'; + getInfoFromServer(url, successFunction); +} + +function queryAllServer(successFunction) { + var url = '/admin_server/queryAllServer'; + getInfoFromServer(url, successFunction); +} + +function addRemoteBuildServer(changeInfoList, successFunction) { + var url = '/admin_server/addRemoteBuildServer'; + postForServer(url, changeInfoList, successFunction); +} + +function removeRemoteBuildServer(changeInfoList, successFunction) { + var url = '/admin_server/removeRemoteBuildServer'; + postForServer(url, changeInfoList, successFunction); +} + +function modifyRemoteBuildServer(changeInfoList, successFunction) { + var url = '/admin_server/modifyRemoteBuildServer'; + postForServer(url, changeInfoList, successFunction); +} + +function addOSCategory(changeInfoList, successFunction) { + var url = '/admin_server/addOsCategory'; + postForServer(url, changeInfoList, successFunction); +} + +function removeOSCategory(changeInfoList, successFunction) { + var url = '/admin_server/removeOsCategory'; + postForServer(url, changeInfoList, successFunction); +} + +function modifyOSCategory(changeInfoList, successFunction) { + var url = '/admin_server/modifyOsCategory'; + postForServer(url, changeInfoList, successFunction); +} + +function addSupportedOS(changeInfoList, successFunction) { + var url = '/admin_server/addSupportedOS'; + postForServer(url, changeInfoList, successFunction); +} + +function removeSupportedOS(changeInfoList, successFunction) { + var url = '/admin_server/removeSupportedOS'; + postForServer(url, changeInfoList, successFunction); +} + +function modifySupportedOS(changeInfoList, successFunction) { + var url = '/admin_server/modifySupportedOS'; + postForServer(url, changeInfoList, successFunction); +} + +function addServerInfo(changeInfoList, successFunction) { + var url = '/admin_server/addServerInfo'; + postForServer(url, changeInfoList, successFunction); +} + +function removeServerInfo(changeInfoList, successFunction) { + var url = '/admin_server/removeServerInfo'; + postForServer(url, changeInfoList, successFunction); +} + +function modifyServerInfo(changeInfoList, successFunction) { + var url = '/admin_server/modifyServerInfo'; + postForServer(url, changeInfoList, successFunction); +} + +// controller : admin_project +function queryAllProject(successFunction) { + var url = '/admin_project/queryAllProject'; + getInfoFromServer(url, successFunction); +} + +function queryProjectsInDistributionForAdmin(distName, successFunction) { + var url = '/admin_project/queryProjectsInDistribution/' + distName; + getInfoFromServer(url, successFunction); +} + +function addProject(changeInfoList, successFunction) { + var url = '/admin_project/addProject'; + postForServer(url, changeInfoList, successFunction); +} + +function removeProject(changeInfoList, successFunction) { + var url = '/admin_project/removeProject'; + postForServer(url, changeInfoList, successFunction); +} + +function modifyProject(changeInfoList, successFunction) { + var url = '/admin_project/modifyProject'; + postForServer(url, changeInfoList, successFunction); +} + +// controller : admin_distribution +function queryAllDistribution(successFunction) { + var url = '/admin_distribution/queryAllDistribution'; + getInfoFromServer(url, successFunction); +} + +function queryDistributionInfo(distName, successFunction) { + var url = '/admin_distribution/queryDistributionInfo/' + distName; + getInfoFromServer(url, successFunction); +} + +function addDistribution(changeInfoList, successFunction) { + var url = '/admin_distribution/addDistribution'; + postForServer(url, changeInfoList, successFunction); +} + +function removeDistribution(changeInfoList, successFunction) { + var url = '/admin_distribution/removeDistribution'; + postForServer(url, changeInfoList, successFunction); +} + +function modifyDistribution(changeInfoList, successFunction) { + var url = '/admin_distribution/modifyDistribution'; + postForServer(url, changeInfoList, successFunction); +} + +// controller : admin +function queryAllOS(successFunction) { + var url = '/admin/queryAllOS'; + getInfoFromServer(url, successFunction); +} + +function queryAllOSCategory(successFunction) { + var url = '/admin/queryAllOSCategory'; + getInfoFromServer(url, successFunction); +} + +function getInfoFromServer(url, successFunction) { + $.ajax({ + url: baseUrl+url, + type: 'GET', + dataType: 'xml', + timeout: 10000, + success: function(xml) { + setSessionInfo(xml); + successFunction(xml); + }, + error: function(jqXHR) { + errorProcess(jqXHR); + } + }); +} + +function postForServer(url, changeInfoList, successFunction) { + $.ajax({ + url: baseUrl+url, + type: 'POST', + data: JSON.stringify({ ChangeInfoList: changeInfoList }), + dataType: 'json', + contentType: "application/json; charset=utf-8", + timeout: 10000, + success: function(xml) { + successFunction(xml); + }, + error: function(jqXHR) { + errorProcess(jqXHR); + } + }); +} + diff --git a/dibs-web/public/javascripts/jobs.js b/dibs-web/public/javascripts/jobs.js index c17ec1b..e892552 100644 --- a/dibs-web/public/javascripts/jobs.js +++ b/dibs-web/public/javascripts/jobs.js @@ -1,20 +1,250 @@ +var suggestion_list = new Array(); + +$(function() { + $('#jobSearchSelect input[type="radio"]').checkboxradio().click(function() { + jobsQuerySelected(); + }); + + $("#jobSearchInputText").on("input", function(e) { + var selectedValue = $('#jobSearchSelect').find("input[type='radio']:checked").val(); + switch(selectedValue) { + case "GROUP": + case "PROJECT": + suggestJobSearchList($(this).val()); + break; + default: + return; + } + }); + + $('#jobSearchInputText').keypress(function() { + if(event.keyCode == '13') { + searchJobInput(); + } + }); + + $('#jobSearchDate').keypress(function() { + if(event.keyCode == '13') { + searchJobDate(); + } + }); +}); + +function jobsInit() { + jobQueryDistribution(); +} + +function jobsQuerySelected() { + clearSuggestJobSearchList(); + + var selectedValue = $('#jobSearchSelect').find("input[type='radio']:checked").val(); + switch(selectedValue) { + case "ALL": + selectJobAll(); + break; + case "JOBID": + selectJobId(); + break; + case "USER": + selectUser(); + break; + case "GROUP": + selectGroup(); + break; + case "PROJECT": + selectProject(); + break; + case "DATE": + selectDate(); + break; + default: + alert("Sorry. Please, report bug."); + break; + } +} + +function searchJobInput() { + var searchText = $("#jobSearchInputText").val() + searchJob(searchText); +} + +function searchJobDate() { + var searchText = $("#jobSearchDate").val() + searchJob(searchText); +} + +function searchJob(searchText) { + var distribution = $("#jobSelectDistribution option:selected").val(); + var selectedValue = $('#jobSearchSelect').find("input[type='radio']:checked").val(); + console.log(searchText); + switch(selectedValue) { + case "ALL": + alert("Can't search on ALL!!"); + break; + case "JOBID": + queryJobListJobId(distribution, searchText); + break; + case "USER": + queryJobListUserName(distribution, searchText); + break; + case "GROUP": + queryJobListUserGroup(distribution, searchText); + break; + case "PROJECT": + queryJobListProject(distribution, searchText); + break; + case "DATE": + queryJobListDate(distribution, searchText); + break; + default: + alert("Sorry. Please, report bug."); + break; + } +} + +function selectJobAll() { + var distribution = $("#jobSelectDistribution option:selected").val(); + $("#jobDivSearchDate").attr("hidden", "true"); + $("#jobDivSearchInput").attr("hidden", "true"); + queryJobListAll(distribution); +} + +function selectJobId() { + $("#jobDivSearchDate").attr("hidden", "true"); + $("#jobDivSearchInput").removeAttr("hidden"); + $("#jobSearchInputText").val("").textinput(); + clearJobList(); +} + +function selectUser() { + var distribution = $("#jobSelectDistribution option:selected").val(); + $("#jobDivSearchDate").attr("hidden", "true"); + $("#jobDivSearchInput").removeAttr("hidden"); + + var name = localStorage.sessionInfoName; + $("#jobSearchInputText").val(name).textinput(); + + queryJobListUserName(distribution, name); +} + +function selectGroup() { + var distribution = $("#jobSelectDistribution option:selected").val(); + $("#jobDivSearchDate").attr("hidden", "true"); + $("#jobDivSearchInput").removeAttr("hidden"); + + var group = localStorage.sessionInfoGroup; + $("#jobSearchInputText").val(group).textinput(); + + jobsQueryGroupList("JOBS"); + + queryJobListUserGroup(distribution, group); +} + +function selectProject() { + var distribution = $("#jobSelectDistribution option:selected").val(); + $("#jobDivSearchDate").attr("hidden", "true"); + $("#jobDivSearchInput").removeAttr("hidden"); + clearJobList(); + + $("#jobSearchInputText").val("").textinput(); + + jobsQueryProjectsList(distribution); +} + +function selectDate() { + var distribution = $("#jobSelectDistribution option:selected").val(); + var today = new Date(); + var yyyy = today.getFullYear(); + var mm = today.getMonth()+1; //January is 0! + var dd = today.getDate(); //January is 0! + if(dd<10) { + dd='0'+dd; + } + if(mm<10) { + mm='0'+mm; + } + + var date = yyyy+'-'+mm+'-'+dd; + $('#jobSearchDate').val(date); + + $("#jobDivSearchInput").attr("hidden", "true"); + $("#jobDivSearchDate").removeAttr("hidden"); + clearJobList(); + queryJobListDate(distribution, date); +} + function clearJobList() { - //$("#jobList").children.remove('li'); $("#jobList").empty(); } -function queryJobList(requestUrl) { +function queryJobListAll(distribution) { + clearJobList(); + queryJobList(baseUrl+"/jobs/list", distribution, "LATEST"); +} + +function queryJobListJobId(distribution, jobId) { + var distribution = $("#jobSelectDistribution option:selected").val(); + clearJobList(); + queryJobList(baseUrl+"/jobs/list", distribution, eval(parseInt(jobId) + 1)); +} +function queryJobListUserName(distribution, name) { + var distribution = $("#jobSelectDistribution option:selected").val(); + clearJobList(); + queryJobList(baseUrl+"/jobs/listSearchUser/"+name, distribution, "LATEST"); +} + +function queryJobListUserGroup(distribution, group) { + clearJobList(); + queryJobList(baseUrl+"/jobs/listSearchGroup/"+group, distribution, "LATEST"); +} + +function queryJobListProject(distribution, project) { + clearJobList(); + queryJobList(baseUrl+"/jobs/listSearchProject/"+project, distribution, "LATEST"); +} + +function queryJobListDate(distribution, date) { + clearJobList(); + queryJobList(baseUrl+"/jobs/listSearchDate/"+date, distribution, "LATEST"); +} + +function jobQueryDistribution() { + queryDistribution( function(xml) { + // remove old select options + $("#jobSelectDistribution").empty(); + $("#jobSelectDistribution").append(""); + + $(xml).find("Data").find("DistributionName").each(function(){ + var name = $(this).text(); + + $("#jobSelectDistribution").append(""); + }); + + /* default distribution selection */ + $("#jobSelectDistribution option:eq(0)").attr("selected", "selected"); + $("#jobSelectDistribution").selectmenu('refresh'); + + selectJobAll(); + }, errorProcess); +} + +function queryJobList(requestUrl, distribution, jobId) { + var url = requestUrl+"/"+ distribution +"/"+ jobId; +console.log(url); +console.log(escape(url)); +console.log(encodeURI(url)); +console.log(encodeURIComponent(url)); +console.log(jobId); $.ajax({ - url: requestUrl, + url: url, type: 'GET', dataType: 'xml', - timeout: 1000, + crossDomain: true, + timeout: 10000, error: function(jqXHR) { - errorProcess(jqXHR.status); + errorProcess(jqXHR); }, success: function(xml) { - $("#jobtable tr:not(:first)").remove(); - $("#pagetable tr:not(:first)").remove(); var lastJobId = 0; $(xml).find("JobList").find("Job").each(function(){ var id = $(this).find("Id").text(); @@ -27,14 +257,13 @@ function queryJobList(requestUrl) { var userName = $(this).find("UserName").text(); var startTime = $(this).find("StartTime").text(); var endTime = $(this).find("EndTime").text(); - var logLink = baseUrl + $(this).find("LogLink").text(); var li = ""; if(jobAttribute == "SINGLE") { li = '
  • ' + id+ ' ' +projectName+ '
  • ' - + '
  • ' + + '
  • ' + '

    ' +projectName+ '

    ' + '

    ID : ' +id+ '

    ' + '

    TYPE : ' +jobType+ '

    ' @@ -46,17 +275,20 @@ function queryJobList(requestUrl) { } else if(jobAttribute == "MULTI") { - li = '
  • ' - +id+ ' ' +projectName+ '
  • '; + li = '
  • ' +id+ ' ' +jobType+ '
  • ' + + '
  • ' + + '

    USER : ' +userName+ '

    ' + + '

    TIME: ' +startTime+ ' ~ '+endTime+ '

    ' + + '

    ' +jobStatus+ '

    ' + + '
  • '; } else if(jobAttribute == "CHILD") { - li = '
  • ' + li = '
  • ' + '

    ' +projectName+ '

    ' + '

    ID : ' +id+ '

    ' + '

    TYPE : ' +jobType+ '

    ' + '

    OS : ' +os+ '

    ' - + '

    USER : ' +userName+ '

    ' + '

    TIME: ' +startTime+ ' ~ '+endTime+ '

    ' + '

    ' +jobStatus+ '

    ' + '
  • '; @@ -66,15 +298,107 @@ function queryJobList(requestUrl) { $("#jobList").append(li).listview('refresh'); }); + console.log(lastJobId); if(lastJobId > 0) { - $('#moreJobList').attr("onClick", "queryJobList(\""+ baseUrl+"/jobs/job_list/"+lastJobId+"\")"); + var moreJobListUrl = 'queryJobList("'+requestUrl+'", "'+distribution+'", "'+lastJobId+'")'; + $('#moreJobList').attr("onClick", moreJobListUrl); + $('#moreJobList').removeClass('ui-disabled'); } else { $('#moreJobList').addClass('ui-disabled'); } + $('#moreJobList').button('refresh'); applyStyleLogWindow(); } }); } + +function clearSuggestJobSearchList() { + $("#jobSearchList").empty(); +} + +function jobsQueryGroupList() { + suggestion_list = []; + + queryAllGroup( function(xml) { + var idx = 0; + + $(xml).find("Data").find("GroupName").each(function(){ + suggestion_list[idx]= $(this).text(); + idx++; + }); + }, errorProcess); +} + +function suggestJobSearchList(inputText) { + var sugList = $("#jobSearchList"); + + if(inputText.length < 1) { + sugList.html(""); + sugList.listview("refresh"); + } else { + var str = ""; + var suggestion = ""; + for(var i=0, len=suggestion_list.length; i= 0) + { + str += "
  • "+suggestion+"
  • "; + } + } + sugList.html(str); + sugList.listview("refresh"); + console.log(inputText); + console.dir(suggestion_list); + } +} + +function jobSuggestListClick(suggestText) { + $("#jobSearchInputText").val(suggestText); + $("#jobSearchList").empty(); + + var startIndex = suggestText.search(/\[/); + var endIndex = suggestText.search('\]'); + + console.log(startIndex); + console.log(endIndex); + if(startIndex > 0 && endIndex >0) { + project = suggestText.substr(0, startIndex); + distribution = suggestText.substr(startIndex+1, endIndex-startIndex-1); + queryJobListProject(distribution, project); + } + else { + searchJob(suggestText); + } +} + +function jobsQueryProjectsList() { + var distribution = $("#jobSelectDistribution option:selected").val(); + suggestion_list = []; + + if(distribution == "ALL") { + queryAllProject(function(xml) { + var idx = 0; + + $(xml).find("Data").find("Project").each(function(){ + var projectName = $(this).find("Name").text(); + var distName = $(this).find("DistName").text(); + suggestion_list[idx]= projectName+"["+distName+"]" + idx++; + }); + }); + } + else { + queryProjectList(distribution, function(xml) { + var idx = 0; + + $(xml).find("Data").find("Project").each(function(){ + suggestion_list[idx]= $(this).find("ProjectName").text(); + idx++; + }); + }); + } +} diff --git a/dibs-web/public/javascripts/log.js b/dibs-web/public/javascripts/log.js new file mode 100644 index 0000000..c16f7d8 --- /dev/null +++ b/dibs-web/public/javascripts/log.js @@ -0,0 +1,103 @@ +var request; +var stop = 1; + +var job_id; +var last_line = 0; + +function logInit() { + var next_line = Number(last_line) + 1; + var url = "/jobs/log/"+ job_id + "/" + next_line; + request.open("GET", url, true); + request.onreadystatechange = updatePage; + request.send(null); +} + +function receiveData() { + /* XML parsing */ + var xmlDoc = request.responseXML; + + /* pre-process */ + var logElements = xmlDoc.getElementsByTagName("Log")[0]; + var conti = Number(logElements.getAttribute("Continue")); + job_id = logElements.getAttribute("JobId"); + + /* Insert data */ + var dataElements = xmlDoc.getElementsByTagName("Data"); + + for(var x=0 ; x < dataElements.length ; x++) + { + var insertTable = document.getElementById("logTable"); + var insertRow = document.createElement("tr"); + var insertCel1 = document.createElement("td"); + var insertCel2 = document.createElement("td"); + + var line_number = dataElements[x].getAttribute("Line"); + var line_data = dataElements[x].childNodes[0].nodeValue; + + insertCel1.width = '30'; + insertCel1.style.textAlign = 'right'; + insertCel1.style.cellpacing = '5'; + insertCel1.innerHTML = line_number; + last_line = line_number; + + insertCel2.style.textAlign = 'left'; + insertCel2.innerHTML = line_data; + + insertRow.appendChild(insertCel1); + insertRow.appendChild(insertCel2); + + insertTable.appendChild(insertRow); + + } + scrollToBottom(); + + if(conti && stop) { + requestLog(); + } +} + +function stopLog() { + stop = 0; +} + +function moreLog() { + stop = 1; + requestLog(); +} + +function requestLog() { + createHttpRequest(); + if(request) { + } +} + +function updatePage() { + if (request.readyState == 4) { + if (request.status == 200) { + receiveData(); + } + else if (request.status == 404) { + alert("Request URL does not exist"); + } + else { + alert("Error: status code is " + request.status); + } + } +} + +function getYScroll() +{ + var yScroll; + if (window.innerHeight && window.scrollMaxY) { + yScroll = window.innerHeight + window.scrollMaxY; + } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac + yScroll = document.body.scrollHeight; + } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari + yScroll = document.body.offsetHeight; + } + return yScroll; +} + +function scrollToBottom() { + window.scrollTo(0,getYScroll()); +} diff --git a/dibs-web/public/javascripts/main.js b/dibs-web/public/javascripts/main.js index 46785dc..967687b 100644 --- a/dibs-web/public/javascripts/main.js +++ b/dibs-web/public/javascripts/main.js @@ -14,79 +14,93 @@ $.ajaxSetup({ }); +$( document ).bind( "pageshow", function( event, data ){ +}); + $( document ).bind( "pagechange", function( event, data ){ - if($.mobile.activePage.attr('id') == 'index') - { - } - else if($.mobile.activePage.attr('id') == 'signup') - { - clearFormData('signupForm'); - } - else if($.mobile.activePage.attr('id') == 'login') - { - clearFormData('loginForm'); - } - else if($.mobile.activePage.attr('id') == 'projects') - { - queryDistribution(); - } - else if($.mobile.activePage.attr('id') == 'jobs') - { - clearJobList(); - queryJobList(baseUrl+"/jobs/job_list/0"); - } - else if($.mobile.activePage.attr('id') == 'adminUser') - { - queryAdminUser(); - } - else if($.mobile.activePage.attr('id') == 'adminGroup') - { - queryAdminGroup(); - } - else if($.mobile.activePage.attr('id') == 'adminServer') - { - queryAdminServer(); - } - else if($.mobile.activePage.attr('id') == 'adminProject') - { - queryAdminProject(); - } - else if($.mobile.activePage.attr('id') == 'modifyDistribution') - { - setupModifyDistribution(); - } - else if($.mobile.activePage.attr('id') == 'modifyUser') - { - setupModifyUser(); - } - else if($.mobile.activePage.attr('id') == 'modifyBinaryProject') - { - setupModifyBinaryProject(); - } - else if($.mobile.activePage.attr('id') == 'modifyGitProject') - { - setupModifyGitProject(); - } - else if($.mobile.activePage.attr('id') == 'addGroup') - { - setupAddGroup(); - } - else if($.mobile.activePage.attr('id') == 'modifyGroup') - { - setupModifyGroup(); - } - else if($.mobile.activePage.attr('id') == 'modifyServer') - { - setupModifyServer(); - } - else if($.mobile.activePage.attr('id') == 'addGitProject') - { - setupAddGitProject(); + var id = $.mobile.activePage.attr('id'); + + switch(id){ + case "index": + generateNavigationBar(id); + break; + case "signup": + clearFormData('signupForm'); + break; + case "login": + clearFormData('loginForm'); + break; + case "projects": + generateNavigationBar(id); + projectsInit(id); + break; + case "build": + generateNavigationBar(id); + buildInit(id); + break; + case "jobs": + generateNavigationBar(id); + jobsInit(); + break; + case "log": + logInit(); + break; + case "adminUser": + generateNavigationBar(id); + adminUserInit(); + break; + case "adminGroup": + generateNavigationBar(id); + adminGroupInit(); + break; + case "adminServer": + generateNavigationBar(id); + adminServerInit(); + break; + case "adminProject": + generateNavigationBar(id); + adminProjectInit(); + break; + case "adminDistribution": + generateNavigationBar(id); + adminDistributionInit(); + break; + case "modifyDistribution": + adminDistributionModifyPopupInit(); + break; + case "adminUserModifyPopup": + adminUserModifyPopupInit(); + break; + case "modifyBinaryProject": + adminProjectModifyBinaryProjectInit(); + break; + case "modifyGitProject": + adminProjectModifyGitProjectInit(); + break; + case "adminGroupAddPopup": + adminGroupAddInit(); + break; + case "adminGroupModifyPopup": + adminGroupModifyInit(); + break; + case "adminServerModifyRemoteBuildServer": + adminServerModifyRemoteBuildServerInit(); + break; + case "addGitProject": + adminProjectAddInit(); + break; + case "adminServerAddSupportedOs": + adminServerAddSupportedOsInit(); + break; + case "adminServerRemoveOSCategory": + adminServerRemoveOSCategoryInit(); + break; + case "signup": + //queryGroupListForSignup(); + break; + default: + break; } -// else if($.mobile.activePage.attr('id') == 'signup') -// { -// queryGroupListForSignup(); -// } // Call check session info checkSessionInfo(); @@ -98,13 +112,16 @@ $( document ).bind( "mobileinit", function() { $.mobile.pushStateEnabled = false; }); -function errorProcess(httpStatus){ - switch (parseInt(httpStatus)) { +function errorProcess(jqXHR){ + switch (parseInt(jqXHR.status)) { case 401: expireSession(); break; + case 406: + alert("Internal server error : " + jqXHR.responseText); + break; default: - alert("Server error : "+httpStatus); + alert("Server error : "+jqXHR.status); break; } } @@ -142,3 +159,42 @@ function clearFormData(elementId){ }); } +function generateNavigationBar(id) { + var admin = localStorage.sessionInfoAdmin; + if(admin == "TRUE") + { + generateNavigationBarAdmin(id); + } + else + { + generateNavigationBarUser(id); + } +} + +function generateNavigationBarUser(id) { + var naviHtml = "" + naviHtml = '
  • BUILD
  • '; + naviHtml += '
  • Projects
  • '; + naviHtml += '
  • Build
  • '; + naviHtml += '
  • Jobs
  • '; + + $("#"+id+"-navigationBar").empty(); + $("#"+id+"-navigationBar").append(naviHtml).listview("refresh"); +} + +function generateNavigationBarAdmin(id) { + var naviHtml = "" + naviHtml = '
  • BUILD
  • '; + naviHtml += '
  • Projects
  • '; + naviHtml += '
  • Build
  • '; + naviHtml += '
  • Jobs
  • '; + naviHtml += '
  • ADMIN
  • '; + naviHtml += '
  • User
  • '; + naviHtml += '
  • Group
  • '; + naviHtml += '
  • Server
  • '; + naviHtml += '
  • Distribution
  • '; + naviHtml += '
  • Project
  • '; + + $("#"+id+"-navigationBar").empty(); + $("#"+id+"-navigationBar").append(naviHtml).listview("refresh"); +} diff --git a/dibs-web/public/javascripts/projects.js b/dibs-web/public/javascripts/projects.js index 379d455..8326df8 100644 --- a/dibs-web/public/javascripts/projects.js +++ b/dibs-web/public/javascripts/projects.js @@ -1,288 +1,104 @@ -function selectAll(element) { - var checkboxes = document.getElementsByName(element.id); - var checked = element.checked; - for(var i in checkboxes) { - if(!checkboxes[i].disabled) { - checkboxes[i].checked = checked; - } - } -} - -function contains(a, obj) { - for (var i = 0; i < a.length; i++) { - if (a[i] == obj) { - return true; - } - } - return false; -} - -function initTable() { - /* project table */ - var projectTable = document.getElementById("projectTable"); +function projectsInit() { + queryDistribution( function(xml) { + // remove old select options + $("#projects-select-distribution").empty(); - /* binary project table */ - var binaryProjectTable = document.getElementById("binaryProjectTable"); + $(xml).find("Data").find("DistributionName").each(function(){ + var name = $(this).text(); - /* remove all table rows */ - while(projectTable.hasChildNodes()) - { - projectTable.removeChild(projectTable.firstChild); - } - while(binaryProjectTable.hasChildNodes()) - { - binaryProjectTable.removeChild(binaryProjectTable.firstChild); - } -} - -function addTableRow(supportedOs, projectList, otherProjectList) { - // Table header - var idx = 0; - var tableHeader = ""; - var osArray = new Array(); - var projectTable = document.getElementById("projectTable"); - - // Project table header - tableHeader = "Project"; - supportedOs.each(function(){ - var osName = $(this).text(); - tableHeader = tableHeader + ""+osName+""; - - osArray[idx] = osName; - idx++; + $("#projects-select-distribution").append(""); + }); + + /* default distribution selection */ + $("#projects-select-distribution option:eq(0)").attr("selected", "selected"); + $("#projects-select-distribution").selectmenu('refresh'); + + //query Project list + projectsQueryProjectList(); }); +} - tableHeader = tableHeader + "ALL"; - $("#projectTable").append(tableHeader); +function projectsQueryProjectList() { + var distName = $("#projects-select-distribution option:selected").val(); - // table row - projectList - var index = 2; + queryProjectsInfoInDistribution( distName, function(xml) { + var projectList = document.getElementById("projects-project-list"); - projectList.each(function(){ - var name = $(this).find("ProjectName").text(); - var osLists = $(this).find("OsList").text(); - var osList = osLists.split(","); - - var row = projectTable.insertRow(-1); - - var cell = row.insertCell(0); - cell.setAttribute('style', 'text-align: left'); - cell.setAttribute('bgcolor', '#dcddc0'); - cell.innerHTML = name; - - for (i=0;i'; - row += '' + packageName + '' - row += 'REGISTER'; - row += '' - - $("#binaryProjectTable tr:last").after(row); - }); + $(xml).find("Data").find("ProjectList").find("Project").each(function(){ + projectsAppendProjectList($(this), projectList); + }); - otherProjectList.each(function(){ - var name = $(this).find("ProjectName").text(); - var packageName = $(this).find("PackageName").text(); - var row = binaryProjectTable.insertRow(-1); + $('.projects-project-list-collapsible').collapsible(); + $('.projects-project-list-listview').listview(); - /* add project name */ - var cell = row.insertCell(0); - cell.setAttribute('style', 'text-align: left'); - cell.setAttribute('bgcolor', '#c0c0c0'); - cell.innerHTML = name; - - /* add package name */ - cell = row.insertCell(-1); - cell.setAttribute('style', 'text-align: left'); - cell.setAttribute('bgcolor', '#c0c0c0'); - cell.innerHTML = packageName; - - /* add empty cell for register */ - cell = row.insertCell(-1); - cell.setAttribute('style', 'text-align: left'); - cell.setAttribute('bgcolor', '#c0c0c0'); - cell.innerHTML = ""; - }); - - $('.binary_project_button').button(); - $('.binary_project_button').popupWindow({ - height:200, - width:400, - top:50, - left:50 }); } -function buildProject(type) { - var distName = $("#select-distribution option:selected").val(); - var buildProjectList = [{ "distribution" : distName}]; - - var node_list = document.getElementsByTagName('input'); - for (var i = 0; i < node_list.length; i++) { - var node = node_list[i]; - - if (node.getAttribute('type') == "checkbox") { - if (node.checked == true) { - if (node.getAttribute('name') != "all-checkbox") { - var prjName = node.id.split(":")[1]; - var osName = node.id.split(":")[2]; - var buildData = { "project" : prjName, "os" : osName }; - buildProjectList.push(buildData); - } - } - } +function projectsAppendProjectList( project, projectList ) { + var name = project.find("Name").text(); + var type = project.find("Type").text(); + var groupAccess = project.find("GroupAccess").text(); + + var div = document.createElement('div'); + div.setAttribute('data-role', 'collapsible'); + div.setAttribute('data-inset', 'false'); + div.setAttribute('data-mini', 'true'); + div.setAttribute('class', 'projects-project-list-collapsible'); + if(groupAccess == "TRUE") { + div.setAttribute('data-theme', "b"); } - - $.ajax({ - type: "POST", - url: baseUrl+"/projects/buildProject/" + type, - data: JSON.stringify({ BuildProjectList: buildProjectList }), - contentType: "application/json; charset=utf-8", - dataType: "json", - success: function() { - alert("Build started! Move to jobs page"); - $.mobile.changePage("#jobs"); - }, - error: function(jqXHR) { - switch (jqXHR.status) { - case 401: - expireSession(); + else { + div.setAttribute('data-theme', "d"); + } + projectList.appendChild(div); + + var h2 = document.createElement('h2'); + h2.innerHTML = "["+type+"] "+name; + div.appendChild(h2); + + var br = document.createElement('br'); + div.appendChild(br); + + var ul = document.createElement('ul'); + ul.setAttribute('data-role', "listview"); + ul.setAttribute('class', "projects-project-list-listview"); + ul.setAttribute('data-filter-theme', "c"); + ul.setAttribute('data-divider-theme', "c"); + div.appendChild(ul); + + project.find("ProjectOs").each(function(){ + var osName = $(this).find("OsName").text(); + + var li = document.createElement('li'); + li.setAttribute('style', 'font-size: 12px'); + li.setAttribute('data-role', "list-divider") + li.innerHTML = ""+osName+""; + ul.appendChild(li); + + $(this).find("Package").each(function(){ + var packageName = $(this).find("PackageName").text(); + var packageVersion = $(this).find("PackageVersion").text(); + var startTime = $(this).find("StartTime").text(); + var endTime= $(this).find("EndTime").text(); + var userName = $(this).find("UserName").text(); + var userEmail = $(this).find("UserEmail").text(); + + if(packageName != "") + { + var liInfo = document.createElement('li'); + liInfo.setAttribute('style', 'font-size: 12px'); + var info = "

    "+packageName+" "+packageVersion+"

    "; + info += "

    Lastest build time : "+startTime+" ~ "+endTime+"

    "; + info += "

    Lastest build user : "+userName+" ["+userEmail+"]

    "; + liInfo.innerHTML = info; + ul.appendChild(liInfo); } - } - }); -} - -function queryProjectList() { - var distName = $("#select-distribution option:selected").val(); - - $.ajax({ - url: baseUrl+'/projects/queryProject/' + distName , - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function(obj) { - alert(obj); - }, - success: function(xml) { - initTable(); - addTableRow( $(xml).find("ProjectInfo").find("BuildServerInfo").find("supportedOs"), - $(xml).find("ProjectInfo").find("Project"), - $(xml).find("ProjectInfo").find("OtherProject")); - addBinaryTableRow( $(xml).find("ProjectInfo").find("BinaryProject"), - $(xml).find("ProjectInfo").find("OtherProject")); - } - }); -} - -function queryDistribution() { - $.ajax({ - headers: {'Cookie' : document.cookie }, - url: (baseUrl+"/projects/queryDistribution"), - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function(obj) { - errorProcess(obj); - }, - success: function(xml) { - // remove old select options - $("#select-distribution").empty(); - - $(xml).find("Distribution").find("Name").each(function(){ - var name = $(this).text(); - - $("#select-distribution").append(""); - }); - - /* default distribution selection */ - $("#select-distribution option:eq(0)").attr("selected", "selected"); - $("#select-distribution").selectmenu('refresh'); - - // query Project list - queryProjectList(); - } + }); }); } - -function uploadBinaryName(project_name) { - localStorage.distibutionName = $("#select-distribution option:selected").val(); - localStorage.uploadBinaryProjectName = project_name; -} diff --git a/dibs-web/public/javascripts/session.js b/dibs-web/public/javascripts/session.js index 2b7ada8..832c2a6 100644 --- a/dibs-web/public/javascripts/session.js +++ b/dibs-web/public/javascripts/session.js @@ -1,3 +1,23 @@ +function setSessionInfo(xml){ + var email = $(xml).find("Header").find("UserInfo").find("Email").text(); + var name = $(xml).find("Header").find("UserInfo").find("Name").text(); + var admin = $(xml).find("Header").find("UserInfo").find("Admin").text(); + var group; + var idx = 0; + $(xml).find("Header").find("UserInfo").find("GroupList").find("Group").each(function() { + if(idx == 0) { + group = $(this).find("GroupName").text(); + } + }); + + localStorage.sessionInfoEmail = email; + localStorage.sessionInfoName = name; + localStorage.sessionInfoGroup = group; + localStorage.sessionInfoAdmin = admin; + + checkSessionInfo(); +} + function checkSessionInfo(){ var email = localStorage.sessionInfoEmail; var name = localStorage.sessionInfoName; @@ -5,7 +25,7 @@ function checkSessionInfo(){ if(email) { sessionHtml = '
    '; - sessionHtml += '

    '+name+' logined. | '; + sessionHtml += '

    '+name+' | '; sessionHtml += 'Log out

    '; } else @@ -20,63 +40,57 @@ function checkSessionInfo(){ function clearSessionInfo(){ localStorage.sessionInfoEmail = ""; localStorage.sessionInfoName = ""; + localStorage.sessionInfoGroup = ""; + localStorage.sessionInfoAdmin = ""; } function expireSession(){ clearSessionInfo(); $.mobile.changePage("index.html"); + generateNavigationBar("index"); } -$(function(){ - $("#loginForm").submit(function(event){ - // setup some local variables - var $form = $(this), - // let's select and cache all the fields - $inputs = $form.find("input, select, button, textarea"), - // serialize the data in the form - formData = $form.serialize(); - - // let's disable the inputs for the duration of the ajax request - $inputs.attr("disabled", "disabled"); - console.log(baseUrl); - $.ajax({ - url: baseUrl + "/sessions/login", - type: 'POST', - async: false, - cache: false, - dataType: 'xml', - data: formData, - timeout: 1000, - error: function() { - $inputs.removeAttr("disabled"); - alert('Error loading XML document'); - }, - success: function(xml) { - $inputs.removeAttr("disabled"); - $(xml).find("LogInInfo").each(function(){ - var succ = $(this).find("Success").text(); - var email = $(this).find("UserInfo").find("Email").text(); - var name = $(this).find("UserInfo").find("Email").text(); - localStorage.sessionInfoEmail = email; - localStorage.sessionInfoName = name; - - clearFormData('loginForm'); - - console.log(document.cookie); - var cookies = document.cookie.split(';'); - for (var i = 0; i < cookies.length; i++) { - console.log(getCookie("name")); - } - - if(succ == "TRUE") - { - $.mobile.changePage("#projects"); - } - }); +function sessionLogin() { + var infoList = []; + var infoItem; + var email = $('#login-email').val(); + var password = $('#login-password').val(); + + if(email == ""){ + alert("Email is invalid"); + return false; + } + + if(password == ""){ + alert("Password is invalid"); + return false; + } + + changeInfoItem = {"Type":"ModifyUser", "Email":email, "Password":password }; + infoList.push(changeInfoItem); + + login(infoList, function (json) { + var result = json.Result; + var message = json.UserInfo.Message; + var email = json.UserInfo.Eamil; + var name = json.UserInfo.Name; + var group = json.UserInfo.GroupName; + var admin = json.UserInfo.Admin; + + if(result == "SUCCESS") + { + localStorage.sessionInfoEmail = email; + localStorage.sessionInfoName = name; + localStorage.sessionInfoGroup = group; + localStorage.sessionInfoAdmin = admin; + $.mobile.changePage("#index"); + } + else + { + alert(message); } - }); }); -}); +} function logout(){ $.ajax({ @@ -95,89 +109,20 @@ function logout(){ }); } -$(function(){ - $("#signupForm").submit(function(event){ - // setup some local variables - var $form = $(this), - // let's select and cache all the fields - $inputs = $form.find("input, select, button, textarea"), - // serialize the data in the form - formData = $form.serialize(); - - // let's disable the inputs for the duration of the ajax request - $inputs.attr("disabled", "disabled"); - console.log(baseUrl); - $.ajax({ - url: baseUrl + "/users/signup", - type: 'POST', - async: false, - cache: false, - dataType: 'xml', - data: formData, - timeout: 1000, - error: function() { - $inputs.removeAttr("disabled"); - alert('Error loading XML document'); - }, - success: function(xml) { - $inputs.removeAttr("disabled"); - $(xml).find("SignUpInfo").each(function(){ - var succ = $(this).find("Success").text(); - var msg = $(this).find("Message").text(); - - if(succ == "TRUE") - { - clearFormData('signupForm'); - $.mobile.changePage("#index"); - } - else - { - $('#signupErrorMessage').text(msg).trigger('create'); - console.log(msg); - } - }); - } - }); - }); -}); - -function getCookie(name) { - var cookieValue = null; - if (document.cookie && document.cookie != '') { - var cookies = document.cookie.split(';'); - for (var i = 0; i < cookies.length; i++) { - var cookie = jQuery.trim(cookies[i]); - // Does this cookie string begin with the name we want? - if (cookie.substring(0, name.length + 1) == (name + '=')) { - cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); - break; - } - } - } - return cookieValue; -} -function queryGroupListForSignup() { - $.ajax({ - url: baseUrl + "/admin/queryAdminAllGroupName", - type: 'GET', - dataType: 'xml', - timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, - success: function(xml) { - $("#applyGroupRadio").children().remove(); - - var newHtml ='
    Apply for group :'; - $(xml).find("Name").each(function(){ - var name = $(this).text(); - newHtml += ''; - newHtml += ''; - }); - console.log(newHtml); - $("#applyGroupRadio").append(newHtml).trigger('create'); - $("#applyGroupRadio div[role='heading']").attr("style","text-align: left; font-size: 12px"); - } - }); +function signupQueryGroupList() { + queryAllGroup( function(xml) { + $("#applyGroupRadio").children().remove(); + + var newHtml ='
    Apply for group :'; + $(xml).find("Data").find("GroupName").each(function(){ + var name = $(this).text(); + newHtml += ''; + newHtml += ''; + }); + console.log(newHtml); + $("#applyGroupRadio").append(newHtml).trigger('create'); + $("#applyGroupRadio div[role='heading']").attr("style","text-align: left; font-size: 12px"); + }, errorProcess); } + diff --git a/dibs-web/public/javascripts/user.js b/dibs-web/public/javascripts/user.js new file mode 100644 index 0000000..a0165cf --- /dev/null +++ b/dibs-web/public/javascripts/user.js @@ -0,0 +1,79 @@ +function userSignUp() { + var infoList = []; + var infoItem; + var email = $('#user-email').val(); + var name = $('#user-name').val(); + var password = $('#user-password').val(); + var password_confirm = $('#user-password-confirmation').val(); + + if(email == ""){ + alert("Email is invalid"); + return false; + } + if(name == ""){ + alert("Name is invalid"); + return false; + } + + if(password == ""){ + alert("Password is invalid"); + return false; + } + + if(password != password_confirm){ + alert("Password is different"); + return false; + } + + changeInfoItem = {"Type":"ModifyUser", "Email":email, "Name":name, "Password":password, "PasswordConfirm":password_confirm}; + infoList.push(changeInfoItem); + + signUp(infoList, function (xml) { + alert("Success sign up"); + }); +} + +function userQueryUserInfo() { + queryUserInfo( function (xml) { + var email = $(xml).find("Data").find("User").find("Email").text(); + var name = $(xml).find("Data").find("User").find("Name").text(); + + $("#popup-user-info-email").val(email).textinput(); + $("#popup-user-info-name").val(name).textinput(); + }); +} + +function userModifyUserInfo() { + var changeInfoList = []; + var changeInfoItem; + var email = $('#popup-user-info-email').val(); + var name = $('#popup-user-info-name').val(); + var password = $('#popup-user-info-password').val(); + var password_confirm = $('#popup-user-info-password-confirm').val(); + + if(email == ""){ + alert("Email is invalid"); + return false; + } + if(name == ""){ + alert("Name is invalid"); + return false; + } + + if(password == ""){ + alert("Password is invalid"); + return false; + } + + if(password != password_confirm){ + alert("Password is different"); + return false; + } + + changeInfoItem = {"Type":"ModifyUser", "Email":email, "Name":name, "Password":password, "PasswordConfirm":password_confirm}; + changeInfoList.push(changeInfoItem); + + modifyUserInfo(changeInfoList, function (xml) { + alert("Success changed information"); + }); +} diff --git a/dibs-web/public/log.html b/dibs-web/public/log.html new file mode 100644 index 0000000..f2023ff --- /dev/null +++ b/dibs-web/public/log.html @@ -0,0 +1,145 @@ + + +
    + +
    +
    + + +
    +
    + diff --git a/dibs-web/public/robots.txt b/dibs-web/public/robots.txt new file mode 100644 index 0000000..085187f --- /dev/null +++ b/dibs-web/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-Agent: * +# Disallow: / diff --git a/dibs-web/public/stylesheets/style.css b/dibs-web/public/stylesheets/style.css index 138a018..6116373 100644 --- a/dibs-web/public/stylesheets/style.css +++ b/dibs-web/public/stylesheets/style.css @@ -1,42 +1,51 @@ body { } -.ui-dialog-contain { - width: 92.5%; - max-width: 500px; - margin: 10% auto 15px auto; - padding: 0; - position: relative; - top: -15px; + +div.content-primary { + width: 65%; +} + +div.content-secondary { + width: 25%; +} + +#jobDivSearchInput .ui-input-search { + width: 80%; + display: inline-block; +} + +#jobDivSearchDate .ui-input-text { + width: 80%; + display: inline-block; } -