--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>dibs</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>json.validation.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.tizen.web.jslint.nature.JSLintBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.tizen.web.css.nature.CSSBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.tizen.web.project.builder.WebBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>usedLibraryType</key>
+ <value>jQueryMobile</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>json.validation.nature</nature>
+ <nature>org.tizen.web.jslint.nature.JSLintNature</nature>
+ <nature>org.tizen.web.css.nature.CSSNature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.tizen.web.project.builder.WebNature</nature>
+ </natures>
+</projectDescription>
gem 'jquery-rails'
+# mysql
+gem 'mysql2', '> 0.3' # as stated above
+
# user
gem 'builder'
--- /dev/null
+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)
--- /dev/null
+== 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:
+ <tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name)
+
+2. Change directory to <tt>myapp</tt> and start the web server:
+ <tt>cd myapp; rails server</tt> (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 <tt>sudo gem install ruby-debug</tt>. 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
+ => "[#<Post:0x14a6be8
+ @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>,
+ #<Post:0x14a6620
+ @attributes={"title"=>"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
+ => #<Post:0x13630c4 @attributes={"title"=>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 <tt>rails console</tt> from the application
+directory.
+
+Options:
+
+* Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications
+ made to the database.
+* Passing an environment name as an argument will load the corresponding
+ environment. Example: <tt>rails console production</tt>.
+
+To reload your controllers and models after launching the console run
+<tt>reload!</tt>
+
+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 <tt>rails
+dbconsole</tt>. 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 <tt>rails dbconsole production</tt>. 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 <tt>layout :default</tt> 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 <tt>rake doc:app</tt>
+
+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.
--- /dev/null
+#!/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
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
}
}
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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
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
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 => "<JobList></JobList>",
- :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
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)
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
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)
#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
end
def binaryFileUpload
- distribution = params[:distribution]
+ dist_name = params[:distribution]
project = params[:project]
uploaded_io = params[:file]
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
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 )
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"
end
def destroy
- session[:user_id] = nil
+ session[:user_email] = nil
redirect_to root_url, :notice => "Logged out!"
end
end
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
--- /dev/null
+module AdminDistributionHelper
+end
--- /dev/null
+module AdminGroupHelper
+end
--- /dev/null
+module AdminProjectHelper
+end
--- /dev/null
+module AdminServerHelper
+end
--- /dev/null
+module AdminUserHelper
+end
class Distribution < ActiveRecord::Base
- attr_accessible :name, :pkgsvr_addr, :pkgsvr_url
+ attr_accessible :id, :name, :pkgsvr_url, :pkgsvr_addr, :status, :description
end
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
--- /dev/null
+class GroupProjectAccess < ActiveRecord::Base
+ self.primary_key = 'group_id', 'project_id'
+ attr_accessible :group_id, :project_id, :build
+end
+++ /dev/null
-class GroupProjectAccesses < ActiveRecord::Base
- self.primary_key = 'group_id', 'prj_id'
- attr_accessible :group_id, :prj_id, :build
-end
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
--- /dev/null
+class OsCategory < ActiveRecord::Base
+ set_table_name "os_category"
+ attr_accessible :id, :name
+end
--- /dev/null
+class Package < ActiveRecord::Base
+ attr_accessible :id, :pkg_name, :sources_id, :supported_os_id
+end
class Project < ActiveRecord::Base
- attr_accessible :name, :type, :password, :dist_name
+ attr_accessible :id, :distribution_id, :name, :ptype, :password
end
class ProjectBin < ActiveRecord::Base
- attr_accessible :prj_id, :pkg_name
+ attr_accessible :project_id, :pkg_name
end
class ProjectGit < ActiveRecord::Base
- attr_accessible :prj_id, :git_repos, :git_branch
+ attr_accessible :project_id, :git_repos, :git_branch
end
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
--- /dev/null
+class RemoteBuildServer < ActiveRecord::Base
+ attr_accessible :id, :svr_addr, :description
+end
+++ /dev/null
-class RemoteBuildServers < ActiveRecord::Base
- attr_accessible :svr_addr
-end
--- /dev/null
+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
--- /dev/null
+class Source < ActiveRecord::Base
+ attr_accessible :id, :location, :pkg_ver, :project_id
+end
class SupportedOs < ActiveRecord::Base
- attr_accessible :name
+ attr_accessible :id, :os_category_id, :name
end
--- /dev/null
+class SyncPkgServer < ActiveRecord::Base
+ attr_accessible :description, :distribution_id, :id, :period, :pkgsvr_url
+end
--- /dev/null
+class SyncProject < ActiveRecord::Base
+ attr_accessible :project_id, :sync_pkg_server_id
+end
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
--- /dev/null
+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
--- /dev/null
+# This file is used by Rack-based servers to start the application.
+
+require ::File.expand_path('../config/environment', __FILE__)
+run Dibs::Application
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://172.21.110.234:3300" version="1.0" viewmodes="fullscreen">
+ <tizen:application id="q3tpr9HXDs" required_version="1.0"/>
+ <content src="index.html"/>
+ <icon src="icon.png"/>
+ <name>test</name>
+</widget>
# # 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:
get "sessions/new" => "sessions#new"
resources :users
- resources :jobs
get "jobs" => "jobs#list"
# 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.
--- /dev/null
+# 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
--- /dev/null
+# 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)
--- /dev/null
+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.
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <title>The page you were looking for doesn't exist (404)</title>
+ <style type="text/css">
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+ div.dialog {
+ width: 25em;
+ padding: 0 4em;
+ margin: 4em auto 0 auto;
+ border: 1px solid #ccc;
+ border-right-color: #999;
+ border-bottom-color: #999;
+ }
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+ </style>
+</head>
+
+<body>
+ <!-- This file lives in public/404.html -->
+ <div class="dialog">
+ <h1>The page you were looking for doesn't exist.</h1>
+ <p>You may have mistyped the address or the page may have moved.</p>
+ </div>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <title>The change you wanted was rejected (422)</title>
+ <style type="text/css">
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+ div.dialog {
+ width: 25em;
+ padding: 0 4em;
+ margin: 4em auto 0 auto;
+ border: 1px solid #ccc;
+ border-right-color: #999;
+ border-bottom-color: #999;
+ }
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+ </style>
+</head>
+
+<body>
+ <!-- This file lives in public/422.html -->
+ <div class="dialog">
+ <h1>The change you wanted was rejected.</h1>
+ <p>Maybe you tried to change something you didn't have access to.</p>
+ </div>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <title>We're sorry, but something went wrong (500)</title>
+ <style type="text/css">
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+ div.dialog {
+ width: 25em;
+ padding: 0 4em;
+ margin: 4em auto 0 auto;
+ border: 1px solid #ccc;
+ border-right-color: #999;
+ border-bottom-color: #999;
+ }
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+ </style>
+</head>
+
+<body>
+ <!-- This file lives in public/500.html -->
+ <div class="dialog">
+ <h1>We're sorry, but something went wrong.</h1>
+ </div>
+</body>
+</html>
<script src="javascripts/popup-window.js"></script>
<script src="javascripts/main.js"></script>
+ <script src="javascripts/dibs-api.js"></script>
<script src="javascripts/session.js"></script>
+ <script src="javascripts/user.js"></script>
+ <script src="javascripts/build.js"></script>
<script src="javascripts/projects.js"></script>
<script src="javascripts/jobs.js"></script>
+ <script src="javascripts/log.js"></script>
<script src="javascripts/admin-user.js"></script>
+ <script src="javascripts/admin-user-modify.js"></script>
<script src="javascripts/admin-group.js"></script>
+ <script src="javascripts/admin-group-add.js"></script>
+ <script src="javascripts/admin-group-modify.js"></script>
<script src="javascripts/admin-project.js"></script>
+ <script src="javascripts/admin-project-add.js"></script>
+ <script src="javascripts/admin-project-modify.js"></script>
+ <script src="javascripts/admin-distribution.js"></script>
+ <script src="javascripts/admin-distribution-add.js"></script>
+ <script src="javascripts/admin-distribution-modify.js"></script>
<script src="javascripts/admin-server.js"></script>
+ <script src="javascripts/admin-server-add.js"></script>
+ <script src="javascripts/admin-server-modify.js"></script>
+ <script src="javascripts/admin-server-remove.js"></script>
</head>
<body>
</div><!--/content-primary -->
<div class="content-secondary">
- <div data-role="collapsible" data-collapsed="true" >
- <ul data-role="listview" >
- <li data-role="list-divider" >BUILD</li>
- <li><a href="#projects">Projects</a></li>
- <li><a href="#jobs">Jobs</a></li>
- <li data-role="list-divider">ADMIN</li>
- <li><a href="#adminUser">User</a></li>
- <li><a href="#adminGroup">Group</a></li>
- <li><a href="#adminServer">Server</a></li>
- <li><a href="#adminProject">Project</a></li>
- </ul>
- </div>
+ <ul data-role="listview" id="index-navigationBar">
+ </ul>
</div>
</div><!-- /content -->
</div>
<div data-role="content">
<form id="loginForm">
- <label for="email" style="text-align: left; font-size: 12px">Email</label>
- <input id="email" name="email" type="text" style="font-size: 12px"/>
- <label for="password" style="text-align: left; font-size: 12px">Password</label>
- <input id="password" name="password" type="password" style="font-size: 12px"/>
+ <label for="login-email" style="text-align: left; font-size: 12px">Email</label>
+ <input id="login-email" name="email" type="text" style="font-size: 12px"/>
+ <label for="login-password" style="text-align: left; font-size: 12px">Password</label>
+ <input id="login-password" name="password" type="password" style="font-size: 12px"/>
<br/>
<div data-role="controlgroup" data-type="horizontal">
<a href="#" data-rel="back" data-role="button" data-mini="true" >Cancel</a>
- <input type="submit" value="Log in" data-mini="true"/>
+ <a href="#" onClick="sessionLogin()" data-role="button" data-mini="true" >Log in</a>
</div>
</form>
</div>
</div>
<div data-role="content">
<form id="signupForm">
- <label for="user_email" style="text-align: left; font-size: 12px">Email</label>
- <input id="user_email" name="user[email]" type="text" style="font-size: 12px"/>
- <label for="user_name" style="text-align: left; font-size: 12px">Name</label>
- <input id="user_name" name="user[name]" type="text" style="font-size: 12px"/>
- <label for="user_password" style="text-align: left; font-size: 12px">Password</label>
- <input id="user_password" name="user[password]" type="password" style="font-size: 12px"/>
- <label for="user_password_confirmation" style="text-align: left; font-size: 12px">Password Comfirmation</label>
- <input id="password_confirmation" name="user[password_confirmation]" type="password" style="font-size: 12px"/>
+ <label for="user-email" style="text-align: left; font-size: 12px">Email</label>
+ <input id="user-email" name="user[email]" type="text" style="font-size: 12px"/>
+ <label for="user-name" style="text-align: left; font-size: 12px">Name</label>
+ <input id="user-name" name="user[name]" type="text" style="font-size: 12px"/>
+ <label for="user-password" style="text-align: left; font-size: 12px">Password</label>
+ <input id="user-password" name="user[password]" type="password" style="font-size: 12px"/>
+ <label for="user-password-confirmation" style="text-align: left; font-size: 12px">Password Comfirmation</label>
+ <input id="user-password-confirmation" name="user[password_confirmation]" type="password" style="font-size: 12px"/>
<div data-role="controlgroup" id="applyGroupRadio">
</div>
<div data-role="controlgroup" data-type="horizontal">
<a href="#" data-rel="back" data-role="button" data-mini="true" >Cancel</a>
- <input type="submit" value="Sign up" data-mini="true" data-ajax="false"/>
+ <a href="#" onClick="userSignUp()" data-role="button" data-mini="true" data-inline="true">Sign up</a>
</div>
</form>
<p id="signupErrorMessage" style="text-align: left; font-size: 12px font-color: red">
</div><!-- /page -->
<div data-role="page" id="projects" class="type-interior">
+ <div data-role="header" data-theme="a">
+ <a href=#index data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
+ <h1>DIBS Web 2.0</h1>
+ <div class="sessionInfo">
+ </div>
+ </div><!-- /header -->
+
+ <div data-role="content" >
+ <div class="content-primary">
+ <div data-role="fieldcontain" style="text-align: center; font-size: 14px;">
+ <select id="projects-select-distribution" data-native-menu="false" onchange="projectsQueryProjectList()">
+ </select>
+ </div>
+ <br>
+ <div id="projects-project-list">
+ </div>
+ </div><!--/content-primary -->
+
+ <div class="content-secondary">
+ <ul data-role="listview" id="projects-navigationBar">
+ </ul>
+ </div>
+ </div><!-- /content -->
+
+ <div data-role="footer" class="footer-docs" data-position="fixed">
+ <p>© S-Core</p>
+ </div><!-- /footer -->
+ </div><!-- /page -->
+
+ <div data-role="page" id="build" class="type-interior">
<div data-role="header" data-theme="a">
<a href=#index data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
<h1>DIBS Web 2.0</h1>
<div class="content-primary">
<div>
<div data-role="fieldcontain" style="text-align: center; font-size: 14px;">
- <select id="select-distribution" data-native-menu="false" onchange="queryProjectList(this)">
+ <select id="select-distribution" data-native-menu="false" onchange="projectsQueryProjectList()">
</select>
</div>
</div>
<div data-role="collapsible" data-collapsed="false" style="width: auto;" >
<h3>Git Project</h3>
<div align="right" style="font-size: 10px">
- <a href="#" data-role="button" data-inline="true" data-mini="true" onClick='buildProject("build")'>Build</a>
- <a href="#" data-role="button" data-inline="true" data-mini="true" onClick='buildProject("resolve")'>Resolve</a>
+ <a href="#" data-role="button" data-inline="true" data-mini="true" onClick='buildBuildProject("build")'>Build</a>
+ <a href="#" data-role="button" data-inline="true" data-mini="true" onClick='buildBuildProject("resolve")'>Resolve</a>
</div>
<div data-role="content">
<table class="projectTableStyle" style="font-size: 14px" id="projectTable">
</div><!--/content-primary -->
<div class="content-secondary">
- <div data-role="collapsible" data-collapsed="true" >
- <ul data-role="listview" >
- <li data-role="list-divider" >BUILD</li>
- <li><a href="#projects">Projects</a></li>
- <li><a href="#jobs">Jobs</a></li>
- <li data-role="list-divider">ADMIN</li>
- <li><a href="#adminUser">User</a></li>
- <li><a href="#adminGroup">Group</a></li>
- <li><a href="#adminServer">Server</a></li>
- <li><a href="#adminProject">Project</a></li>
- </ul>
- </div>
+ <ul data-role="listview" id="build-navigationBar">
+ </ul>
</div>
</div><!-- /content -->
<div data-role="content" >
<div class="content-primary">
- <ul id="jobList" data-role="listview">
- </ul>
- <br>
- <button id="moreJobList" onClick="queryJobList()" >MORE</button>
- </div><!--/content-primary -->
+ <div id="jobDivDistribution" data-role="fieldcontain" style="text-align: center; font-size: 14px;">
+ <select id="jobSelectDistribution" date-mini="true" data-native-menu="false" onchange="jobsQuerySelected()">
+ </select>
+ </div>
+ <div id="jobSearchSelect">
+ <fieldset data-role="controlgroup" data-type="horizontal" data-mini="true">
+ <input type="radio" name="radio-choice" id="search-radio-choice-1" class="jobSearch" value="ALL" checked="checked" />
+ <label for="search-radio-choice-1">ALL</label>
+
+ <input type="radio" name="radio-choice" id="search-radio-choice-2" class="jobSearch" value="JOBID" />
+ <label for="search-radio-choice-2">JOB ID</label>
+
+ <input type="radio" name="radio-choice" id="search-radio-choice-3" class="jobSearch" value="USER" />
+ <label for="search-radio-choice-3">USER</label>
+
+ <input type="radio" name="radio-choice" id="search-radio-choice-4" class="jobSearch" value="GROUP" />
+ <label for="search-radio-choice-4">GROUP</label>
+
+ <input type="radio" name="radio-choice" id="search-radio-choice-5" class="jobSearch" value="PROJECT" />
+ <label for="search-radio-choice-5">PROJECT</label>
+
+ <input type="radio" name="radio-choice" id="radio-choice-6" class="jobSearch" value="DATE" />
+ <label for="radio-choice-6">DATE</label>
+ </fieldset>
+ </div>
- <div class="content-secondary">
- <div data-role="collapsible" data-collapsed="true" >
- <ul data-role="listview" >
- <li data-role="list-divider" >BUILD</li>
- <li><a href="#projects">Projects</a></li>
- <li><a href="#jobs">Jobs</a></li>
- <li data-role="list-divider">ADMIN</li>
- <li><a href="#adminUser">User</a></li>
- <li><a href="#adminGroup">Group</a></li>
- <li><a href="#adminServer">Server</a></li>
- <li><a href="#adminProject">Project</a></li>
+ <div id="jobDivSearchInput" >
+ <input type="search" name="search-mini" id="jobSearchInputText" autocomplete="off" value="" data-mini="true" />
+ <a href="#" onClick="searchJobInput()" data-role="button" data-mini="true" data-inline="true">Search</a>
+
+ <ul data-role="listview" id="jobSearchList" data-inset="true">
</ul>
</div>
+ <div id="jobDivSearchDate" >
+ <input type="date" name="date" id="jobSearchDate" autocomplete="off" data-mini="true" data-inline="true" data-options='{"mode": "flipbox","noButtonFocusMode": true}' />
+ <a href="#" onClick="searchJobDate()" data-role="button" data-mini="true" data-inline="true">Search</a>
+ </div>
+ <br>
+
+ <ul id="jobList" data-role="listview">
+ </ul>
+ <br>
+
+ <button id="moreJobList" onClick="queryJobList()" data-mini="true">MORE</button>
+ </div><!--/content-primary -->
+
+ <div class="content-secondary">
+ <ul data-role="listview" id="jobs-navigationBar">
+ </ul>
</div>
</div><!-- /content -->
<p>© S-Core</p>
</div><!-- /footer -->
</div><!-- /page -->
+
+ <div data-role="page" id="log">
+ <table id="logTable" style="border: #000000 1px solid; font-size:9pt">
+ </table>
+ <div data-role="controlgroup" data-type="horizontal">
+ <input type="button" value="More" onClick=moreLog() / >
+ <input type="button" value="Stop" onClick=stopLog() / >
+ </div>
+ </div><!-- /page -->
<div data-role="page" id="adminUser" class="type-interior">
<div data-role="header" data-theme="a">
<div data-role="content" >
<div class="content-primary">
<h2>User information</h2>
+ <div>
<table class="imagetable" style="font-size: 14px" id="adminUserTable">
</table>
+ </div>
</div><!--/content-primary -->
<div class="content-secondary">
- <div data-role="collapsible" >
- <ul data-role="listview" >
- <li data-role="list-divider" >BUILD</li>
- <li><a href="#projects">Projects</a></li>
- <li><a href="#jobs">Jobs</a></li>
- <li data-role="list-divider">ADMIN</li>
- <li><a href="#adminUser">User</a></li>
- <li><a href="#adminGroup">Group</a></li>
- <li><a href="#adminServer">Server</a></li>
- <li><a href="#adminProject">Project</a></li>
- </ul>
- </div>
+ <ul data-role="listview" id="adminUser-navigationBar">
+ </ul>
</div>
</div><!-- /content -->
</div><!-- /footer -->
</div><!-- /page -->
- <div data-role="page" id="modifyUser" style="height: 800px; width: 800px">
+ <div data-role="page" id="adminUserModifyPopup" style="height: 800px; width: 800px">
<div data-role="header" >
<h1>Modify User</h1>
</div>
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href=#adminUser onClick="modifyUser()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href=#adminUser onClick="adminUserModifyPopupModify()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
<div class="content-primary">
<h2>Group information</h2>
<div align="right" style="font-size: 10px">
- <a href="#addGroup" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add group </a>
+ <a href="#adminGroupAddPopup" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add group </a>
</div>
<div data-role="content" class="container">
<table class="imagetable" style="font-size: 14px" id="groupTable">
</div><!--/content-primary -->
<div class="content-secondary">
- <div data-role="collapsible" >
- <ul data-role="listview" >
- <li data-role="list-divider" >BUILD</li>
- <li><a href="#projects">Projects</a></li>
- <li><a href="#jobs">Jobs</a></li>
- <li data-role="list-divider">ADMIN</li>
- <li><a href="#adminUser">User</a></li>
- <li><a href="#adminGroup">Group</a></li>
- <li><a href="#adminServer">Server</a></li>
- <li><a href="#adminProject">Project</a></li>
- </ul>
- </div>
+ <ul data-role="listview" id="adminGroup-navigationBar">
+ </ul>
</div>
</div><!-- /content -->
<div class="content-primary">
<h2>Server information</h2>
<div align="right" style="font-size: 10px">
- <a href="#addServer" data-role="button"data-rel="dialog" data-inline="true" data-icon="plus"> Add Server </a>
+ <a href="#adminServerAddServerInfo" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add server config </a>
</div>
- <div data-role="content" class="container">
- <table class="imagetable" style="font-size: 14px" id="serverTable">
- </table>
+ <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false">
+ <h2> Server info </h2>
+ <ul data-role="listview" id="adminServer-ServerInfo">
+ </ul>
+ </div>
+ <div align="right" style="font-size: 10px">
+ <a href="#adminServerAddSupportedOs" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add supported os</a>
+ <a href="#adminServerAddOSCategory" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add os category</a>
+ <a href="#adminServerRemoveOSCategory" data-role="button" data-rel="dialog" data-inline="true" data-icon="minus"> Remove os category</a>
+ </div>
+ <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false">
+ <h2> Supported OS </h2>
+ <ul data-role="listview" id="adminServer-SupportedOS">
+ </ul>
+ </div>
+ <div align="right" style="font-size: 10px">
+ <a href="#adminServerAddRemoteBuildServer" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add remote build server </a>
+ </div>
+ <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false">
+ <h2> Remote build server </h2>
+ <ul data-role="listview" id="adminServer-RemoteBuildServer">
+ </ul>
</div>
</div><!--/content-primary -->
<div class="content-secondary">
- <div data-role="collapsible" >
- <ul data-role="listview" >
- <li data-role="list-divider" >BUILD</li>
- <li><a href="#projects">Projects</a></li>
- <li><a href="#jobs">Jobs</a></li>
- <li data-role="list-divider">ADMIN</li>
- <li><a href="#adminUser">User</a></li>
- <li><a href="#adminGroup">Group</a></li>
- <li><a href="#adminServer">Server</a></li>
- <li><a href="#adminProject">Project</a></li>
- </ul>
- </div>
+ <ul data-role="listview" id="adminServer-navigationBar">
+ </ul>
</div>
</div><!-- /content -->
<div data-role="content" >
<div class="content-primary" >
- <h2>Project information</h2>
- <div style="border:1px solid black">
+ <h2>Build</h2>
+ <div>
<div data-role="fieldcontain" style="text-align: center; font-size: 14px;">
- <select id="select-admin-distribution" onchange="queryDistributionInfo(this)">
+ <select id="adminProjectDistributionSelect" data-native-menu="false" onchange="adminProjectSetProjectInfo()">
</select>
</div>
- <div style="margin-left: 20px; margin-right: 20px">
- <ul data-role="listview" data-theme="d" data-divider-theme="d">
- <li data-role="list-divider"> Package server url</li>
- <li style="font-size: 12px" id="ProjectTable:packageServerUrl"></li>
- <li data-role="list-divider"> Package server address</li>
- <li style="font-size: 12px" id="ProjectTable:packageServerAddress"></li>
- <li data-role="list-divider"> Distribution status</li>
- <li style="font-size: 12px;"id="ProjectTable:distributionStatus"></li>
- </ul>
- </div>
- <br>
- <div align="right" style="font-size: 10px">
- <a href="#addDistribution" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add distribution</a>
- <a href="#modifyDistribution" data-role="button" data-rel="dialog" data-inline="true" data-icon="gear"> Modify distribution</a>
- <a href="javascript:removeDistribution()" data-role="button" data-rel="dialog" data-inline="true" data-icon="minus"> Remove distribution</a>
- </div>
</div>
- <br><br>
- <div style="border:1px solid black">
+ <div>
<div style="margin-left: 20px; margin-right: 20px; margin-top: 10px">
- <ul data-role="listview" data-theme="d" data-divider-theme="d">
- <li data-role="list-divider"> Git project </li>
+ <div data-role="collapsible" data-theme="b" data-content-theme="c" data-collapsed="false" >
+ <h2> Git project </h2>
<div align="right" style="font-size: 10px">
<a href="#addGitProject" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add git project</a>
</div>
<br>
<table class="imagetable" id="adminProjectTable" style="font-size: 14px">
</table>
- <br>
- <li data-role="list-divider"> Binary project </li>
+ </div>
+ <br>
+ <div data-role="collapsible" data-theme="b" data-content-theme="c" data-collapsed="false" >
+ <h2> Binary project </h2>
<div align="right" style="font-size: 10px">
<a href="#addBinaryProject" data-role="button"data-rel="dialog" data-inline="true" data-icon="plus"> Add binary project</a>
</div>
<table class="imagetable" id="adminBinaryProjectTable" style="font-size: 14px">
</table>
- <br>
- </ul>
+ </div>
</div>
</div>
</div><!--/content-primary -->
<div class="content-secondary">
- <div data-role="collapsible" >
- <ul data-role="listview" >
- <li data-role="list-divider" >BUILD</li>
- <li><a href="#projects">Projects</a></li>
- <li><a href="#jobs">Jobs</a></li>
- <li data-role="list-divider">ADMIN</li>
- <li><a href="#adminUser">User</a></li>
- <li><a href="#adminGroup">Group</a></li>
- <li><a href="#adminServer">Server</a></li>
- <li><a href="#adminProject">Project</a></li>
- </ul>
+ <ul data-role="listview" id="adminProject-navigationBar">
+ </ul>
+ </div>
+ </div><!-- /content -->
+
+ <div data-role="footer" class="footer-docs" data-position="fixed">
+ <p>© S-Core</p>
+ </div><!-- /footer -->
+ </div><!-- /page -->
+
+ <div data-role="page" id="adminDistribution" class="type-interior">
+ <div data-role="header" data-theme="a">
+ <a href=#index data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
+ <h1>DIBS Web 2.0</h1>
+ <div class="sessionInfo">
+ </div>
+ </div><!-- /header -->
+
+ <div data-role="content" >
+ <div class="content-primary" >
+ <h2>Distribution information</h2>
+ <div>
+ <div data-role="fieldcontain" style="text-align: center; font-size: 14px;">
+ <select id="adminDistributionSelect" data-native-menu="false" onchange="adminDistributionSetInfo()">
+ </select>
+ </div>
+ <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" >
+ <h2> Package server url </h2>
+ <p id="adminDistribution:packageServerUrl" style="font-size: 14px"> </p>
+ </div>
+ <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" >
+ <h2> Package server address </h2>
+ <p id="adminDistribution:packageServerAddress" style="font-size: 14px"> </p>
+ </div>
+ <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" >
+ <h2> Status </h2>
+ <p id="adminDistribution:distributionStatus" style="font-size: 14px"> </p>
+ </div>
+ <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" >
+ <h2> Description </h2>
+ <p id="adminDistribution:distributionDescription" style="font-size: 14px"> </p>
+ </div>
+ <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" >
+ <h2> Sync package server </h2>
+ <div id="adminDistribution-SyncPackageServer">
+ </div>
+ </div>
+ <br>
+ <div align="right" style="font-size: 10px">
+ <a href="#addDistribution" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add distribution</a>
+ <a href="#modifyDistribution" data-role="button" data-rel="dialog" data-inline="true" data-icon="gear"> Modify distribution</a>
+ <a href="javascript:adminDistributionRemove()" data-role="button" data-rel="dialog" data-inline="true" data-icon="minus"> Remove distribution</a>
+ </div>
</div>
+ </div><!--/content-primary -->
+
+ <div class="content-secondary">
+ <ul data-role="listview" id="adminDistribution-navigationBar">
+ </ul>
</div>
</div><!-- /content -->
</div>
<div data-role="content">
<form method="post" style="font-size: 12px">
- <label for="popup:addDistributionName"> Distirbution name </label>
- <input type="text" id="popup:addDistributionName"/>
+ <label for="adminDistributionAddPopup-DistirubtionName"> Distirbution name </label>
+ <input type="text" id="adminDistributionAddPopup-DistirubtionName"/>
+ <br>
+ <label for="adminDistributionAddPopup-PackageServerUrl"> Package server url </label>
+ <input type="text" id="adminDistributionAddPopup-PackageServerUrl"/>
<br>
- <label for="popup:addPackageServerUrl"> Package server url </label>
- <input type="text" id="popup:addPackageServerUrl"/>
+ <label for="adminDistributionAddPopup-PackageServerAddress"> Package server address </label>
+ <input type="text" id="adminDistributionAddPopup-PackageServerAddress"/>
<br>
- <label for="popup:addPackageServerAddress"> Package server address </label>
- <input type="text" id="popup:addPackageServerAddress"/>
- <label for="popup:addDistributionStatus"> Distribution status </label>
- <select id="popup:addDistributionStatus">
+ <label for="adminDistributionAddPopup-DistributionStatus"> Distribution status </label>
+ <select id="adminDistributionAddPopup-DistributionStatus">
<option value="OPEN" selected="selected">OPEN</option>
<option value="CLOSE">CLOSE</option>
</select>
+ <br>
+ <label for="adminDistributionAddPopup-DistributionDescription"> Description </label>
+ <input type="text" id="adminDistributionAddPopup-DistributionDescription"/>
+ <br>
+ <div>
+ <h3> Sync package server </h3>
+ <label for="adminDistributionAddPopup-SyncPackageServer-Url"> Url </label>
+ <input type="text" id="adminDistributionAddPopup-SyncPackageServer-Url"/>
+ <label for="adminDistributionAddPopup-SyncPackageServer-period"> Period </label>
+ <input type="text" id="adminDistributionAddPopup-SyncPackageServer-period"/>
+ <label for="adminDistributionAddPopup-SyncPackageServer-Description"> Description </label>
+ <input type="text" id="adminDistributionAddPopup-SyncPackageServer-Description"/>
+ </div>
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href=#adminProject onClick="addDistribution()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href=# onClick="adminDistributionAdd()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
</div>
<div data-role="content">
<form method="post" style="font-size: 12px">
- <label for="popup:modifyPackageServerUrl"> Package server url </label>
- <input type="text" id="popup:modifyPackageServerUrl"/>
+ <label for="adminDistributionModifyPopup-PackageServerUrl"> Package server url </label>
+ <input type="text" id="adminDistributionModifyPopup-PackageServerUrl"/>
<br>
- <label for="popup:modifyPackageServerAddress"> Package server address </label>
- <input type="text" id="popup:modifyPackageServerAddress"/>
+ <label for="adminDistributionModifyPopup-PackageServerAddress"> Package server address </label>
+ <input type="text" id="adminDistributionModifyPopup-PackageServerAddress"/>
<br>
- <label for="popup:modifyDistributionStatus"> Distribution status </label>
- <select id="popup:modifyDistributionStatus">
- <option value="OPEN">OPEN</option>
- <option value="CLOSE">CLOSE</option>
+ <label for="adminDistributionModifyPopup-Status"> Distribution status </label>
+ <select id="adminDistributionModifyPopup-Status">
</select>
+ <br>
+ <label for="adminDistributionModifyPopup-Description"> Description </label>
+ <input type="text" id="adminDistributionModifyPopup-Description"/>
+ <br>
+ <div>
+ <h3> Sync package server </h3>
+ <label for="adminDistributionModifyPopup-SyncPackageServer-Url"> Url </label>
+ <input type="text" id="adminDistributionModifyPopup-SyncPackageServer-Url"/>
+ <label for="adminDistributionModifyPopup-SyncPackageServer-Period"> Period </label>
+ <input type="text" id="adminDistributionModifyPopup-SyncPackageServer-Period"/>
+ <label for="adminDistributionModifyPopup-SyncPackageServer-Description"> Description </label>
+ <input type="text" id="adminDistributionModifyPopup-SyncPackageServer-Description"/>
+ </div>
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href=#adminProject onClick="modifyDistribution()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href=# onClick="adminDistributionModify()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div>
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href="#adminProject" onClick="addGitProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href="#adminProject" onClick="adminProjectAddGitProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
</select>
</div>
<br>
+ <label for="popup:addBinaryProjectPassword"> Project password</label>
+ <input type="text" id="popup:addBinaryProjectPassword"/>
+ <br>
<label for="popup:addBinaryPackageName"> Pakcage name</label>
<input type="text" id="popup:addBinaryPackageName"/>
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href="#adminProject" onClick="addBinaryProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href="#" onClick="adminProjectAddBinaryProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
</div>
<div data-role="content">
<form method="post" style="font-size: 12px">
- <label for="popup:modifyBinaryOldProjectName"> Project name </label>
- <input type="text" id="popup:modifyBinaryOldProjectName" disabled="disabled"/>
+ <input type="hidden" id="popup:modifyBinaryOldProjectName" disabled="disabled"/>
<br>
<label for="popup:modifyBinaryNewProjectName"> New Project name </label>
<input type="text" id="popup:modifyBinaryNewProjectName"/>
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href="javascript:modifyBinaryProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href="#" onClick="adminProjectModfyBinaryProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
</div>
<div data-role="content">
<form method="post" style="font-size: 12px">
- <label for="popup:modifyGitOldProjectName"> Project name </label>
- <input type="text" id="popup:modifyGitOldProjectName" disabled="disabled"/>
+ <input type="hidden" id="popup:modifyGitOldProjectName" disabled="disabled"/>
<br>
<label for="popup:modifyGitNewProjectName"> New Project name </label>
<input type="text" id="popup:modifyGitNewProjectName"/>
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href="javascript:modifyGitProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href="#" onClick="adminProjectModfyGitProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
- <div data-role="page" id="addGroup" style="height: 800px; width: 800px">
+ <div data-role="page" id="adminGroupAddPopup" style="height: 800px; width: 800px">
<div data-role="header" >
<h1>Add Group</h1>
</div>
<div data-role="content">
<form method="post" style="font-size: 12px">
- <label for="popup:groupName"> Group name </label>
- <input type="text" id="popup:addGroupName"/>
+ <label for="adminGroupAddPopup-Name"> Group name </label>
+ <input type="text" id="adminGroupAddPopup-Name"/>
+ <br>
+ <div data-role="fieldcontain">
+ <label for="adminGroupAddPopup-Admin"> Admin Flag </label>
+ <br>
+ <select id="adminGroupAddPopup-Admin">
+ <option value="TRUE">True</option>
+ <option value="FALSE" selected="selected">False</option>
+ </select>
+ </div>
+ <br>
+ <label for="adminGroupAddPopup-Description"> Description </label>
+ <input type="text" id="adminGroupAddPopup-Description"/>
<br>
<div data-role="fieldcontain">
<fieldset data-role="controlgroup" data-mini="true" id="popup:addProjectCheckbox">
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href=#adminGroup onClick="addGroup()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href=# onClick="adminGroupAddGroup()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
- <div data-role="page" id="modifyGroup" style="height: 800px; width: 800px">
+ <div data-role="page" id="adminGroupModifyPopup" style="height: 800px; width: 800px">
<div data-role="header" >
<h1>modify Group</h1>
</div>
<div data-role="content" data-role="fieldcontain">
<form method="post" style="font-size: 12px">
- <label for="popup:modifyOldGroupName"> Old group name </label>
- <input type="text" id="popup:modifyOldGroupName" disabled="disabled"/>
- <label for="popup:modifyGroupName"> New group name </label>
- <input type="text" id="popup:modifyGroupName"/>
+ <label for="adminGroupModifyPopup-Name"> Old group name </label>
+ <input type="text" id="adminGroupModifyPopup-Name" disabled="disabled"/>
+ <label for="adminGroupModifyPopup-NewName"> New group name </label>
+ <input type="text" id="adminGroupModifyPopup-NewName"/>
+ <br>
+ <div data-role="fieldcontain">
+ <label for="adminGroupModifyPopup-Admin"> Admin Flag </label>
+ <br>
+ <select id="adminGroupModifyPopup-Admin">
+ </select>
+ </div>
+ <br>
+ <label for="adminGroupModifyPopup-Description"> Description </label>
+ <input type="text" id="adminGroupModifyPopup-Description"/>
<br>
<div>
<fieldset data-role="controlgroup" data-mini="true" data-role="fieldcontain" id="popup:modifyProjectSelect">
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href=#adminGroup onClick="modifyGroup()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href="#" onClick="adminGroupModifyGroup()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
- <div data-role="page" id="addServer" style="height: 800px; width: 800px">
+ <div data-role="page" id="adminServerAddRemoteBuildServer" style="height: 800px; width: 800px">
<div data-role="header" >
- <h1>Add server </h1>
+ <h1>Add remote build server</h1>
</div>
<div data-role="content" data-role="fieldcontain">
<form method="post" style="font-size: 12px">
- <label for="popup:addServerAddress"> Add server address </label>
- <input type="text" id="popup:addServerAddress"/>
+ <label for="adminServer-AddRemoteBuildServer-Address"> Server address </label>
+ <input type="text" id="adminServer-AddRemoteBuildServer-Address"/>
+ <br>
+ <label for="adminServer-AddRemoteBuildServer-Description"> Server description</label>
+ <input type="text" id="adminServer-AddRemoteBuildServer-Description"/>
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href=#adminServer onClick="addServer()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href=# onClick="adminServerAddRemoteBuildServer()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
- <div data-role="page" id="modifyServer" style="height: 800px; width: 800px">
- <div data-role="header" >
+ <div data-role="page" id="adminServerModifyRemoteBuildServer" style="height: 800px; width: 800px"> <div data-role="header" >
<h1>Modify server </h1>
</div>
<div data-role="content" data-role="fieldcontain">
<form method="post" style="font-size: 12px">
- <label for="popup:modifyServerOldAddress"> Old server address </label>
- <input type="text" id="popup:modifyServerOldAddress" disabled="disabled"/>
+ <input type="hidden" id="adminServer-modifyRemoteBuildServer-OldAddress"/>
+ <br>
+ <label for="adminServer-modifyRemoteBuildServer-newAddress"> New server address </label>
+ <input type="text" id="adminServer-modifyRemoteBuildServer-newAddress"/>
+ <br>
+ <label for="adminServer-modifyRemoteBuildServer-description"> Description </label>
+ <input type="text" id="adminServer-modifyRemoteBuildServer-description"/>
+ </form>
+ </div>
+ <div align="right" style="font-size: 10px">
+ <a href=# onClick="adminServerModifyRemoteBuildServer()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href=# onClick="adminServerRemoveRemoteBuildServer()" data-role="button" data-inline="true" data-icon="minus">Delete</a>
+ </div>
+ </div><!-- /page -->
+
+ <div data-role="page" id="userModifyPopup" style="height: 800px; width: 800px">
+ <div data-role="header" >
+ <h1>User information</h1>
+ </div>
+ <div data-role="content" data-role="fieldcontain">
+ <form method="post" style="font-size: 12px">
+ <label for="popup-user-info-email">Email</label>
+ <input type="text" id="popup-user-info-email" disabled="disabled"/>
+ <br>
+ <label for="popup-user-info-name">Name</label>
+ <input type="text" id="popup-user-info-name"/>
+ <br>
+ <label for="popup-user-info-password">Password</label>
+ <input type="password" id="popup-user-info-password"/>
<br>
- <label for="popup:modifyServerNewAddress"> New server address </label>
- <input type="text" id="popup:modifyServerNewAddress"/>
+ <label for="popup-user-info-password-confirm">Password confirmation</label>
+ <input type="password" id="popup-user-info-password-confirm"/>
</form>
</div>
<div align="right" style="font-size: 10px">
- <a href=#adminServer onClick="modifyServer()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href="#" onClick="userModifyUserInfo()" data-role="button" data-inline="true" data-icon="gear">Save</a>
</div>
</div><!-- /page -->
- <div data-role="page" id="common" style="height: 800px; width: 800px">
- <div data-role="header" id="header" data-theme="a">
- <a href=#index data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
- <h1>DIBS Web 2.0</h1>
- <div data-role="controlgroup" data-type="horizontal" class="ui-btn-right ui-btn-corner-all">
- <a href=#signup data-direction="reverse" data-role="button" data-rel="dialog">Sign up</a>
- <a href=#login data-direction="reverse" data-role="button" data-rel="dialog">Log in</a>
- </div>
+ <div data-role="page" id="adminServerAddSupportedOs" style="height: 800px; width: 800px">
+ <div data-role="header" >
+ <h1>Add supported os</h1>
</div>
- <div data-role="footer" id="footer" data-position="fixed">
- <p>© S-Core</p>
- </div><!-- /footer -->
- </div>
+ <div data-role="content" data-role="fieldcontain">
+ <form method="post" style="font-size: 12px">
+ <label for="adminServer-AddSupportedOs-OsName">Supported os name</label>
+ <input type="text" id="adminServer-AddSupportedOs-OsName"/>
+ <br>
+ <div data-role="fieldcontain">
+ <label for="adminServer-AddSupportedOs-OsCategory"> Os category </label>
+ <br>
+ <select id="adminServer-AddSupportedOs-OsCategory">
+ </select>
+ </div>
+ </form>
+ </div>
+ <div align="right" style="font-size: 10px">
+ <a href="#" onClick="adminServerAddSupportedOs()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ </div>
+ </div><!-- /page -->
+
+ <div data-role="page" id="adminServerModifySupportedOS" style="height: 800px; width: 800px">
+ <div data-role="header" >
+ <h1>Modify supported os</h1>
+ </div>
+ <div data-role="content" data-role="fieldcontain">
+ <form method="post" style="font-size: 12px">
+ <input type="hidden" id="adminServer-ModifySupportedOs-OldOsName" disabled="disabled"/>
+ <label for="adminServer-ModifySupportedOs-OsName">Supported os name</label>
+ <input type="text" id="adminServer-MoidfySupportedOs-OsName"/>
+ <br>
+ <div data-role="fieldcontain">
+ <label for="adminServer-ModifySupportedOs-OsCategory"> Os category </label>
+ <br>
+ <select id="adminServer-ModifySupportedOs-OsCategory">
+ </select>
+ </div>
+ </form>
+ </div>
+ <div align="right" style="font-size: 10px">
+ <a href="#" onClick="adminServerRemoveSupportedOS()" data-role="button" data-inline="true" data-icon="minus">Remove</a>
+ <a href="#" onClick="adminServerModifySupportedOS()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ </div>
+ </div><!-- /page -->
+
+ <div data-role="page" id="adminServerAddOSCategory" style="height: 800px; width: 800px">
+ <div data-role="header" >
+ <h1>Add os category</h1>
+ </div>
+ <div data-role="content" data-role="fieldcontain">
+ <form method="post" style="font-size: 12px">
+ <label for="adminServer-AddOsCategory-Name">OS category name</label>
+ <input type="text" id="adminServer-AddOsCategory-Name"/>
+ </form>
+ </div>
+ <div align="right" style="font-size: 10px">
+ <a href="#" onClick="adminServerAddOSCategory()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ </div>
+ </div><!-- /page -->
+
+ <div data-role="page" id="adminServerRemoveOSCategory" style="height: 800px; width: 800px">
+ <div data-role="header" >
+ <h1>Add os category</h1>
+ </div>
+ <div data-role="content" data-role="fieldcontain">
+ <form method="post" style="font-size: 12px">
+ <div data-role="fieldcontain">
+ <label for="adminServer-RemoveOSCategory-CategorySelect"> Os category </label>
+ <br>
+ <select id="adminServer-RemoveOSCategory-CategorySelect">
+ </select>
+ </div>
+ </form>
+ </div>
+ <div align="right" style="font-size: 10px">
+ <a href="#" onClick="adminServerRemoveOSCategory()" data-role="button" data-inline="true" data-icon="minus">Delete</a>
+ </div>
+ </div><!-- /page -->
+
+ <div data-role="page" id="adminServerAddServerInfo" style="height: 800px; width: 800px"> <div data-role="header" >
+ <h1>Add server config </h1>
+ </div>
+ <div data-role="content" data-role="fieldcontain">
+ <form method="post" style="font-size: 12px">
+ <label for="adminServer-addServerInfo-property"> Property</label>
+ <input type="text" id="adminServer-addServerInfo-property"/>
+ <br>
+ <label for="adminServer-addServerInfo-value"> Value </label>
+ <input type="text" id="adminServer-addServerInfo-value"/>
+ </form>
+ </div>
+ <div align="right" style="font-size: 10px">
+ <a href=# onClick="adminServerAddServerInfo()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ </div>
+ </div><!-- /page -->
+
+ <div data-role="page" id="adminServerModifyServerInfo" style="height: 800px; width: 800px"> <div data-role="header" >
+ <h1>Modify server config </h1>
+ </div>
+ <div data-role="content" data-role="fieldcontain">
+ <form method="post" style="font-size: 12px">
+ <label for="adminServer-modifyServerInfo-property"> Property</label>
+ <input type="text" id="adminServer-modifyServerInfo-property" disabled="disabled"/>
+ <br>
+ <label for="adminServer-modifyServerInfo-value"> Value </label>
+ <input type="text" id="adminServer-modifyServerInfo-value"/>
+ </form>
+ </div>
+ <div align="right" style="font-size: 10px">
+ <a href=# onClick="adminServerModifyServerInfo()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+ <a href=# onClick="adminServerRemoveServerInfo()" data-role="button" data-inline="true" data-icon="minus">Delete</a>
+ </div>
+ </div><!-- /page -->
+
</body>
<script src="javascripts/post-process.js"></script>
--- /dev/null
+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");
+ });
+}
+
--- /dev/null
+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 = '<option value="OPEN" selected="selected">OPEN</option>';
+ } else {
+ option = '<option value="OPEN">OPEN</option>';
+ }
+ $("#adminDistributionModifyPopup-Status").append(option);
+
+ if(serverStatusText.toUpperCase() == "CLOSE") {
+ option = '<option value="CLOSE" selected="selected">CLOSE</option>';
+ } else {
+ option = '<option value="CLOSE">FALSE</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");
+ });
+}
+
--- /dev/null
+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("<option value=\'"+name+"\' selected=\"selected\">"+name+"</option>");
+ find = true;
+
+ } else {
+ $("#adminDistributionSelect").append("<option value=\'"+name+"\'>"+name+"</option>");
+ }
+ });
+
+ /* 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 = '<h3 style="font-size: 16px" id="adminDistribution-SyncPackageServer-Url">Package server url : '+serverInfo.find("Url").text()+'</h3>';
+ info += '<p style="font-size: 14px" id="adminDistribution-SyncPackageServer-period">Period : '+serverInfo.find("Period").text()+'</p>';
+ info += '<p style="font-size: 14px" id="adminDistribution-SyncPackageServer-Description">Description : '+serverInfo.find("Description").text()+'</p>';
+
+ $("#adminDistribution-SyncPackageServer").append(info);
+}
+
--- /dev/null
+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");
+ });
+}
+
--- /dev/null
+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 = '<option value="TRUE" selected="selected">TRUE</option>';
+ } else {
+ option = '<option value="TRUE">TRUE</option>';
+ }
+ $("#adminGroupModifyPopup-Admin").append(option);
+
+ if(adminFlagText.toUpperCase() == "FALSE") {
+ option = '<option value="FALSE" selected="selected">FALSE</option>';
+ } else {
+ option = '<option value="FALSE">FALSE</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");
+ });
+}
+
-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 */
/* create table header */
var row = groupTable.insertRow(-1);
- var tableHeader = "";
- tableHeader = "<tr><th> Group name </th><th> Project list </th><th> Modify </th><th> Delete </th></tr>";
+ var tableHeader = "<tr><th> Group name </th><th> Project list </th><th> Admin </th><th> Description </th><th> Modify </th><th> Delete </th></tr>";
$("#groupTable").append(tableHeader);
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);
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);
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);
$(".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;
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);
- }
- }
- });
-}
--- /dev/null
+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");
+ });
+}
+
--- /dev/null
+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");
+ });
+}
+
-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("<option value=\'"+name+"\' selected=\"selected\">"+name+"</option>");
+ find = true;
+
+ } else {
+ $("#adminProjectDistributionSelect").append("<option value=\'"+name+"\'>"+name+"</option>");
}
- }
- });
-}
-
-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);
});
}
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)
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");
binaryProjectTable.removeChild(binaryProjectTable.firstChild);
}
- var projectTable = document.getElementById("adminProjectTable");
- var binaryProjectTable = document.getElementById("adminBinaryProjectTable");
-
// Project table header
var tableHeader = "<tr><th>Project</th><th>Git repos</th><th>Branch</th><th>OS list</th><th>Modify</th><th>Delete</th>";
$("#adminProjectTable").append(tableHeader);
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);
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;
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;
$(".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');
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("<option value=\'"+name+"\' selected=\"selected\">"+name+"</option>");
- find = true;
-
- } else {
- $("#select-admin-distribution").append("<option value=\'"+name+"\'>"+name+"</option>");
- }
- });
-
- /* 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();
- }
- });
-}
-
--- /dev/null
+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("<option value=\'"+name+"\'>"+name+"</option>");
+
+ $('#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");
+ });
+}
+
--- /dev/null
+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 = '<option value="'+name+'" selected="selected">'+name+'</option>'
+ } else {
+ option = '<option value="'+name+'">'+name+'</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");
+ });
+}
+
--- /dev/null
+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("<option value=\'"+name+"\'>"+name+"</option>");
+
+ $('#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");
+ });
+}
+
+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 = "<tr><th> Server Address </th><th> Modify </th><th> Delete </th></tr>";
- $("#serverTable").append(tableHeader);
-
- var index = 2;
+ var li = '<li><a href="#adminServerModifySupportedOS" ';
+ li += 'onClick="adminServerModifySupportedOSInit(\''+osName+'\',\''+osCategory+'\')" ';
+ li += 'data-rel="dialog">';
+ li += '<h3>'+osName+'</h3>';
+ li += '<p>OS category : '+osCategory+'</p>';
+ li += '</a></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><a href="#adminServerModifyServerInfo" ';
+ li += 'onClick="adminServerModifyServerInfoInit(\''+property+'\',\''+value+'\')" ';
+ li += 'data-rel="dialog">';
+ li += '<p>'+property+' : '+value+'</p>';
+ li += '</a></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><a href="#adminServerModifyRemoteBuildServer" ';
+ li += 'onClick="popupModifyRemoteBuildServerInfo(\''+address+'\',\''+description+'\')" ';
+ li += 'data-rel="dialog">';
+ li += '<h3>'+address+'</h3>';
+ li += '<p>Description : '+$(this).find("Description").text()+'</p>';
+ li += '</a></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;
}
+
--- /dev/null
+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("<option value=\'"+groupName+"\' selected=\"selected\">"+groupName+"</option>");
+ } else {
+ $("#popup\\:modifyUserGroup").append("<option value=\'"+groupName+"\'>"+groupName+"</option>");
+ }
+
+ $("#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 () {
+ });
+}
+
-function fillUserTable(userList) {
+function adminUserInit() {
var userTable = document.getElementById("adminUserTable");
/* remove all table rows */
}
/* create table header */
- var row = userTable.insertRow(-1);
- var tableHeader = "";
- tableHeader = "<tr><th>User name</th><th>Email</th><th>Group</th><th>Modify</th><th>Delete</th></tr>";
+ var tableHeader = "<tr><th>User name</th><th>Email</th><th>Group</th><th>Modify</th><th>Delete</th></tr>";
$("#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){
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)
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("<option value=\'"+groupName+"\' selected=\"selected\">"+groupName+"</option>");
- } else {
- $("#popup\\:modifyUserGroup").append("<option value=\'"+groupName+"\'>"+groupName+"</option>");
- }
- });
-
- $("#popup\\:modifyUserGroup").selectmenu('refresh');
- }
- });
-}
--- /dev/null
+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("<option value=\'"+name+"\'>"+name+"</option>");
+ });
+
+ /* 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 = "<tr><th>Project</th>";
+ supportedOs.each(function(){
+ var osName = $(this).text();
+ tableHeader = tableHeader + "<th>"+osName+"</th>";
+
+ osArray[idx] = osName;
+ idx++;
+ });
+
+ tableHeader = tableHeader + "<th>ALL</th></tr>";
+ $("#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<osArray.length;i++)
+ {
+ var cell = row.insertCell(-1);
+ var os = osArray[i];
+
+ cell.setAttribute('id', "table"+":"+name+":"+os);
+ cell.setAttribute('style', 'text-align: center');
+ cell.setAttribute('bgcolor', '#dcddc0');
+
+ var buttonnode = document.createElement('input');
+ buttonnode.setAttribute('type','checkbox');
+ buttonnode.setAttribute('id',"table"+":"+name+':'+os);
+ buttonnode.setAttribute('name','projectBuildCheckbox'+":"+name);
+ buttonnode.setAttribute('class','projectTableBuildButton');
+ cell.appendChild(buttonnode);
+
+ if(!contains(osList, os))
+ {
+ buttonnode.setAttribute('disabled','disabled');
+ }
+ }
+
+ /* append all checkbox */
+ var cell = row.insertCell(-1);
+ cell.setAttribute('style', 'text-align: center');
+ cell.setAttribute('bgcolor', '#dcddc0');
+
+ var buttonnode = document.createElement('input');
+ buttonnode.setAttribute('type','checkbox');
+ buttonnode.setAttribute('id','projectBuildCheckbox'+":"+name);
+ buttonnode.setAttribute('name','all-checkbox');
+ buttonnode.setAttribute('class','projectTableAllButton');
+ buttonnode.setAttribute('onClick','buildSelectAll(this)');
+ cell.appendChild(buttonnode);
+ });
+
+ otherProjectList.each(function(){
+ var name = $(this).find("ProjectName").text();
+ var row = projectTable.insertRow(-1);
+
+ var cell = row.insertCell(0);
+ cell.setAttribute('style', 'text-align: left');
+ cell.setAttribute('bgcolor', '#c0c0c0');
+ cell.innerHTML = name;
+
+ /* add empty cell for status */
+ for (i=0;i<osArray.length;i++)
+ {
+ cell = row.insertCell(-1);
+ cell.setAttribute('id', "table"+":"+name+"-"+osArray[i]);
+ cell.setAttribute('style', 'text-align: left');
+ cell.setAttribute('bgcolor', '#c0c0c0');
+ cell.innerHTML = "";
+ }
+
+ /* add empty cell for all*/
+ cell = row.insertCell(-1);
+ cell.setAttribute('style', 'text-align: left');
+ cell.setAttribute('bgcolor', '#c0c0c0');
+ cell.innerHTML = "";
+ });
+}
+
+function buildAddBinaryTableRow(binaryProjectList, otherProjectList) {
+ var binaryProjectTable = document.getElementById("binaryProjectTable");
+ var row = binaryProjectTable.insertRow(-1);
+ var thCell = document.createElement('th');
+ thCell.innerHTML = "Project";
+ row.appendChild(thCell);
+ thCell = document.createElement('th');
+ thCell.innerHTML = "Package name";
+ row.appendChild(thCell);
+ thCell = document.createElement('th');
+ thCell.innerHTML = "Register";
+ row.appendChild(thCell);
+
+ /* insert binary project in binary project table */
+ binaryProjectList.each(function(){
+ var name = $(this).find("ProjectName").text();
+ var packageName = $(this).find("PackageName").text();
+ var row = '<tr><td bgcolor="#dcddc0" style="text-align:left">'+name+'</td>';
+ row += '<td bgcolor="#dcddc0" style="text-align:left">' + packageName + '</td>'
+ row += '<td bgcolor="#dcddc0" style="text-align:left"><a href="upload.html" onClick="buildUploadBinaryName(\'' +name+'\')" class="binary_project_button" data-role="button" data-ajax="false" data-mini="true">REGISTER</a>';
+ row += '</tr>'
+
+ $("#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;
+}
--- /dev/null
+// 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);
+ }
+ });
+}
+
+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("<option value='ALL'>ALL</option>");
+
+ $(xml).find("Data").find("DistributionName").each(function(){
+ var name = $(this).text();
+
+ $("#jobSelectDistribution").append("<option value=\'"+name+"\'>"+name+"</option>");
+ });
+
+ /* 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();
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 = '<li data-role="list-divider">'
+ id+ ' ' +projectName+ '</li>'
- + '<li><a href=' +logLink+ ' class="logWindow" data-ajax="false">'
+ + '<li><a href=log.html?jobid='+id+' class="logWindow" data-ajax="false">'
+ '<h3>' +projectName+ '</h3>'
+ '<p>ID : <strong>' +id+ '</strong></p>'
+ '<p>TYPE : <strong>' +jobType+ '</strong></p>'
}
else if(jobAttribute == "MULTI")
{
- li = '<li data-role="list-divider">'
- +id+ ' ' +projectName+ '</li>';
+ li = '<li data-role="list-divider">' +id+ ' ' +jobType+ '</li>'
+ + '<li><a href=log.html?jobid='+id+' class="logWindow" data-ajax="false">'
+ + '<p>USER : <strong>' +userName+ '</strong></p>'
+ + '<p>TIME: <strong>' +startTime+ ' ~ '+endTime+ '</strong></p>'
+ + '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
+ + '</a></li>';
}
else if(jobAttribute == "CHILD")
{
- li = '<li><a href=' +logLink+ ' class="logWindow" data-ajax="false">'
+ li = '<li><a href=log.html?jobid='+id+' class="logWindow" data-ajax="false">'
+ '<h3>' +projectName+ '</h3>'
+ '<p>ID : <strong>' +id+ '</strong></p>'
+ '<p>TYPE : <strong>' +jobType+ '</strong></p>'
+ '<p>OS : <strong>' +os+ '</strong></p>'
- + '<p>USER : <strong>' +userName+ '</strong></p>'
+ '<p>TIME: <strong>' +startTime+ ' ~ '+endTime+ '</strong></p>'
+ '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
+ '</a></li>';
$("#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<len; i++) {
+ suggestion = suggestion_list[i];
+
+ if(suggestion.search(inputText) >= 0)
+ {
+ str += "<li data-mini='true'><a href='#' onClick='jobSuggestListClick(\""+suggestion+"\")'>"+suggestion+"</a></li>";
+ }
+ }
+ 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++;
+ });
+ });
+ }
+}
--- /dev/null
+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());
+}
});
+$( 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();
$.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;
}
}
});
}
+function generateNavigationBar(id) {
+ var admin = localStorage.sessionInfoAdmin;
+ if(admin == "TRUE")
+ {
+ generateNavigationBarAdmin(id);
+ }
+ else
+ {
+ generateNavigationBarUser(id);
+ }
+}
+
+function generateNavigationBarUser(id) {
+ var naviHtml = ""
+ naviHtml = '<li data-role="list-divider">BUILD</li>';
+ naviHtml += '<li><a href="#projects">Projects</a></li>';
+ naviHtml += '<li><a href="#build">Build</a></li>';
+ naviHtml += '<li><a href="#jobs">Jobs</a></li>';
+
+ $("#"+id+"-navigationBar").empty();
+ $("#"+id+"-navigationBar").append(naviHtml).listview("refresh");
+}
+
+function generateNavigationBarAdmin(id) {
+ var naviHtml = ""
+ naviHtml = '<li data-role="list-divider">BUILD</li>';
+ naviHtml += '<li><a href="#projects">Projects</a></li>';
+ naviHtml += '<li><a href="#build">Build</a></li>';
+ naviHtml += '<li><a href="#jobs">Jobs</a></li>';
+ naviHtml += '<li data-role="list-divider">ADMIN</li>';
+ naviHtml += '<li><a href="#adminUser">User</a></li>';
+ naviHtml += '<li><a href="#adminGroup">Group</a></li>';
+ naviHtml += '<li><a href="#adminServer">Server</a></li>';
+ naviHtml += '<li><a href="#adminDistribution">Distribution</a></li>';
+ naviHtml += '<li><a href="#adminProject">Project</a></li>';
+
+ $("#"+id+"-navigationBar").empty();
+ $("#"+id+"-navigationBar").append(naviHtml).listview("refresh");
+}
-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 = "<tr><th>Project</th>";
- supportedOs.each(function(){
- var osName = $(this).text();
- tableHeader = tableHeader + "<th>"+osName+"</th>";
-
- osArray[idx] = osName;
- idx++;
+ $("#projects-select-distribution").append("<option value=\'"+name+"\'>"+name+"</option>");
+ });
+
+ /* default distribution selection */
+ $("#projects-select-distribution option:eq(0)").attr("selected", "selected");
+ $("#projects-select-distribution").selectmenu('refresh');
+
+ //query Project list
+ projectsQueryProjectList();
});
+}
- tableHeader = tableHeader + "<th>ALL</th></tr>";
- $("#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<osArray.length;i++)
+ /* remove all list */
+ while(projectList.hasChildNodes())
{
- var cell = row.insertCell(-1);
- var os = osArray[i];
-
- cell.setAttribute('id', "table"+":"+name+":"+os);
- cell.setAttribute('style', 'text-align: center');
- cell.setAttribute('bgcolor', '#dcddc0');
-
- var buttonnode = document.createElement('input');
- buttonnode.setAttribute('type','checkbox');
- buttonnode.setAttribute('id',"table"+":"+name+':'+os);
- buttonnode.setAttribute('name','projectBuildCheckbox'+":"+name);
- buttonnode.setAttribute('class','projectTableBuildButton');
- cell.appendChild(buttonnode);
-
- if(!contains(osList, os))
- {
- buttonnode.setAttribute('disabled','disabled');
- }
+ projectList.removeChild(projectList.firstChild);
}
-
- /* append all checkbox */
- var cell = row.insertCell(-1);
- cell.setAttribute('style', 'text-align: center');
- cell.setAttribute('bgcolor', '#dcddc0');
-
- var buttonnode = document.createElement('input');
- buttonnode.setAttribute('type','checkbox');
- buttonnode.setAttribute('id','projectBuildCheckbox'+":"+name);
- buttonnode.setAttribute('name','all-checkbox');
- buttonnode.setAttribute('class','projectTableAllButton');
- buttonnode.setAttribute('onClick','selectAll(this)');
- cell.appendChild(buttonnode);
- });
- otherProjectList.each(function(){
- var name = $(this).find("ProjectName").text();
- var row = projectTable.insertRow(-1);
-
- var cell = row.insertCell(0);
- cell.setAttribute('style', 'text-align: left');
- cell.setAttribute('bgcolor', '#c0c0c0');
- cell.innerHTML = name;
-
- /* add empty cell for status */
- for (i=0;i<osArray.length;i++)
- {
- cell = row.insertCell(-1);
- cell.setAttribute('id', "table"+":"+name+"-"+osArray[i]);
- cell.setAttribute('style', 'text-align: left');
- cell.setAttribute('bgcolor', '#c0c0c0');
- cell.innerHTML = "";
- }
-
- /* add empty cell for all*/
- cell = row.insertCell(-1);
- cell.setAttribute('style', 'text-align: left');
- cell.setAttribute('bgcolor', '#c0c0c0');
- cell.innerHTML = "";
- });
-}
-
-function addBinaryTableRow(binaryProjectList, otherProjectList) {
- var binaryProjectTable = document.getElementById("binaryProjectTable");
- var row = binaryProjectTable.insertRow(-1);
- var thCell = document.createElement('th');
- thCell.innerHTML = "Project";
- row.appendChild(thCell);
- thCell = document.createElement('th');
- thCell.innerHTML = "Package name";
- row.appendChild(thCell);
- thCell = document.createElement('th');
- thCell.innerHTML = "Register";
- row.appendChild(thCell);
-
- /* insert binary project in binary project table */
- binaryProjectList.each(function(){
- var name = $(this).find("ProjectName").text();
- var packageName = $(this).find("PackageName").text();
- var row = '<tr><td bgcolor="#dcddc0" style="text-align:left">'+name+'</td>';
- row += '<td bgcolor="#dcddc0" style="text-align:left">' + packageName + '</td>'
- row += '<td bgcolor="#dcddc0" style="text-align:left"><a href="upload.html" onClick="uploadBinaryName(\'' +name+'\')" class="binary_project_button" data-role="button" data-ajax="false" data-mini="true">REGISTER</a>';
- row += '</tr>'
-
- $("#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 = "<strong>"+osName+"</strong>";
+ 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 = "<h3>"+packageName+" "+packageVersion+"</h3>";
+ info += "<p>Lastest build time : <strong>"+startTime+" ~ "+endTime+"</strong></p>";
+ info += "<p>Lastest build user : <strong>"+userName+" ["+userEmail+"]</strong></p>";
+ 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("<option value=\'"+name+"\'>"+name+"</option>");
- });
-
- /* 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;
-}
+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;
if(email)
{
sessionHtml = '<div data-role="controlgroup" style="text-align: left; font-size: 12px" data-type="horizontal" class="ui-btn-right ui-btn-corner-all">';
- sessionHtml += '<p data-direction="reverse" >'+name+' logined. | ';
+ sessionHtml += '<p data-direction="reverse" ><a href="#userModifyPopup" onClick="userQueryUserInfo()" data-rel="dialog">'+name+'</a> | ';
sessionHtml += '<a href=# onClick="logout()" data-direction="reverse">Log out</a></p></div>';
}
else
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({
});
}
-$(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 ='<fieldset data-role="controlgroup" data-mini="true"><legend>Apply for group :</legend>';
- $(xml).find("Name").each(function(){
- var name = $(this).text();
- newHtml += '<input type="radio" name="group" id="group-'+name+'" value="'+name+'" />';
- newHtml += '<label for="group-'+name+'">'+name+'</label>';
- });
- 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 ='<fieldset data-role="controlgroup" data-mini="true"><legend>Apply for group :</legend>';
+ $(xml).find("Data").find("GroupName").each(function(){
+ var name = $(this).text();
+ newHtml += '<input type="radio" name="group" id="group-'+name+'" value="'+name+'" />';
+ newHtml += '<label for="group-'+name+'">'+name+'</label>';
+ });
+ console.log(newHtml);
+ $("#applyGroupRadio").append(newHtml).trigger('create');
+ $("#applyGroupRadio div[role='heading']").attr("style","text-align: left; font-size: 12px");
+ }, errorProcess);
}
+
--- /dev/null
+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");
+ });
+}
--- /dev/null
+<script language="javascript" type="text/javascript">
+ var request;
+ var stop = 1;
+
+ var job_id;
+ var last_line = 0;
+
+ var myUrl = location.href;
+ var varCut = myUrl.indexOf("?");
+ var varCheck = myUrl.substring(varCut+1);
+ eval(varCheck);
+
+ job_id = jobid;
+
+ function createHttpRequest() {
+ request = false;
+ try {
+ request = new XMLHttpRequest();
+ }
+ catch(trymicrosoft) {
+ try {
+ request = new ActiveXobject("Msxml2.XMLHTTP");
+ }
+ catch(othermicrosoft) {
+ try {
+ request = new ActiveXobject("Microsoft.XMLHTTP");
+ }
+ catch(failed) {
+ request = false;
+ }
+ }
+ }
+
+ if(!request) {
+ alert("Error XMLHttpRequest");
+ }
+ }
+
+ 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) {
+ 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 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());
+ }
+
+ requestLog();
+</script>
+
+<div data-role="page" id="jobs">
+ <table id="logTable" style="border: #000000 1px solid; font-size:9pt">
+ </table>
+ <div data-role="controlgroup" data-type="horizontal">
+ <input type="button" value="More" onClick=moreLog() / >
+ <input type="button" value="Stop" onClick=stopLog() / >
+ </div>
+</div>
+
--- /dev/null
+# 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: /
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;
}
-<style type="text/css">
- table.imagetable {
- font-family: verdana,arial,sans-serif;
- font-size:11px;
- color:#333333;
- border-width: 1px;
- border-color: #999999;
- border-collapse: collapse;
- text-align : center;
- }
- table.imagetable th {
- background:#b5cfd2;
- border-width: 1px;
- padding: 8px;
- border-style: solid;
- border-color: #999999;
- text-align: center;
- }
- table.imagetable td {
- background:#dcddc0;
- border-width: 1px;
- padding: 8px;
- border-style: solid;
- border-color: #999999;
- max-width: 500px;
- }
-#for projects page
+table.imagetable {
+ font-family: verdana,arial,sans-serif;
+ font-size:11px;
+ color:#333333;
+ border-width: 1px;
+ border-color: #999999;
+ border-collapse: collapse;
+ text-align : center;
+}
+table.imagetable th {
+ background:#b5cfd2;
+ border-width: 1px;
+ padding: 8px;
+ border-style: solid;
+ border-color: #999999;
+ text-align: center;
+}
+table.imagetable td {
+ background:#dcddc0;
+ border-width: 1px;
+ padding: 8px;
+ border-style: solid;
+ border-color: #999999;
+ max-width: 500px;
+}
+
table.projectTableStyle {
font-family: verdana,arial,sans-serif;
font-size:11px;
--- /dev/null
+#!/usr/bin/env ruby
+# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
+
+APP_PATH = File.expand_path('../../config/application', __FILE__)
+require File.expand_path('../../config/boot', __FILE__)
+require 'rails/commands'