From 3cda9294fde0d4d3a4aa371f27ba4523525d1857 Mon Sep 17 00:00:00 2001 From: z9hang Date: Wed, 16 Jul 2014 09:40:18 +0800 Subject: [PATCH 01/24] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=9C=AA=E8=83=BD?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E7=9A=84gem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 2 +- Gemfile.lock | 8 -------- db/schema.rb | 1 + 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index 91259aad8..3431ad649 100644 --- a/Gemfile +++ b/Gemfile @@ -43,7 +43,7 @@ group :development, :test do gem 'spork-testunit' gem 'guard-spork' gem 'guard-test', '~> 1.0.0' - gem 'ruby-prof' + #gem 'ruby-prof' gem 'pry' gem 'pry-nav' end diff --git a/Gemfile.lock b/Gemfile.lock index fe06a5e46..5d5f167ca 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,7 +100,6 @@ GEM hike (1.2.3) htmlentities (4.3.2) i18n (0.6.1) - iconv (1.0.4) journey (1.0.4) jquery-rails (2.0.3) railties (>= 3.1.0, < 5.0) @@ -190,7 +189,6 @@ GEM sass-rails rmagick (2.13.2) ruby-openid (2.1.8) - ruby-prof (0.15.1) rubyzip (1.1.6) sass (3.3.10) sass-rails (3.2.6) @@ -235,8 +233,6 @@ GEM win32console (1.3.2-x86-mingw32) xpath (1.0.0) nokogiri (~> 1.3) - zip-zip (0.3) - rubyzip (>= 1.0.0) PLATFORMS ruby @@ -257,7 +253,6 @@ DEPENDENCIES guard-test (~> 1.0.0) htmlentities i18n (~> 0.6.0) - iconv jquery-rails (~> 2.0.2) kaminari mocha (~> 0.13.3) @@ -273,12 +268,9 @@ DEPENDENCIES rich (= 1.4.6) rmagick (>= 2.0.0) ruby-openid (~> 2.1.4) - ruby-prof - rubyzip sass-rails (~> 3.2.3) seems_rateable! shoulda (> 3.3.2) spork-testunit therubyracer uglifier (>= 1.0.3) - zip-zip diff --git a/db/schema.rb b/db/schema.rb index f318ff96a..6a732b3ce 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -379,6 +379,7 @@ ActiveRecord::Schema.define(:version => 20140714081030) do t.text "description" t.datetime "created_on" t.integer "user_id", :default => 0 + t.integer "is_public", :default => 1 end add_index "documents", ["category_id"], :name => "index_documents_on_category_id" From cc4bf3b328262c80568b4e90c78d00d141f93d93 Mon Sep 17 00:00:00 2001 From: z9hang Date: Wed, 16 Jul 2014 14:22:12 +0800 Subject: [PATCH 02/24] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B6=85=E7=BA=A7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E6=8E=A7=E5=88=B6=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E7=83=AD=E9=97=A8=E9=A1=B9=E7=9B=AE=E6=8E=92=E5=BA=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin_controller.rb | 1 + app/controllers/welcome_controller.rb | 28 +++++++++++++++++++ app/helpers/welcome_helper.rb | 4 +-- app/models/first_page.rb | 2 +- app/views/admin/first_page_made.html.erb | 8 ++++++ app/views/welcome/index.html.erb | 4 +-- config/locales/zh.yml | 1 + ...0140716021202_add_column_for_first_page.rb | 5 ++++ db/migrate/20140716021558_set_sort_type.rb | 8 ++++++ db/schema.rb | 3 +- 10 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 db/migrate/20140716021202_add_column_for_first_page.rb create mode 100644 db/migrate/20140716021558_set_sort_type.rb diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index fea29759d..171d34377 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -244,6 +244,7 @@ class AdminController < ApplicationController @first_page.web_title = params[:web_title] @first_page.description = params[:description] @first_page.title = params[:title] + @first_page.sort_type = params[:sort_type] if @first_page.save respond_to do |format| flash[:notice] = l(:notice_successful_update) diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 03bca6162..48c0cf1fb 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -17,12 +17,40 @@ class WelcomeController < ApplicationController include ApplicationHelper + include WelcomeHelper caches_action :robots # before_filter :fake, :only => [:index, :course] before_filter :entry_select, :only => [:index] def index @first_page = FirstPage.where("page_type = 'project'").first + @hot_projects = find_miracle_project(10, 3) + @hot_projects_ids = [] + @hot_projects.each do |p| + @hot_projects_ids << p + end + @projects_all = Project.active.visible. + joins("LEFT JOIN #{ProjectStatus.table_name} ON #{Project.table_name}.id = #{ProjectStatus.table_name}.project_id"). + where("#{Project.table_name}.project_type = ? and #{Project.table_name}.id in (?)", Project::ProjectType_project,@hot_projects_ids) + + case @first_page.sort_type + when 0 + @projects = @projects_all.order("created_on desc") + when 1 + @projects = @projects_all.order("grade desc") + when 2 + @projects = @projects_all.order("watchers_count desc") + + #gcm + #when '3' + #@projects=desc_sort_course_by_avtivity(@project_activity_count_array,@project_all_array) + # @projects=handle_project @projects_all,@project_activity_count + # @s_type = 3 + # @projects = @projects[@project_pages.offset, @project_pages.per_page] + + else + @projects = @projects_all.order("grade desc") + end end def robots diff --git a/app/helpers/welcome_helper.rb b/app/helpers/welcome_helper.rb index 4ff5a48e4..99357a3d0 100644 --- a/app/helpers/welcome_helper.rb +++ b/app/helpers/welcome_helper.rb @@ -208,7 +208,7 @@ module WelcomeHelper #c1 = find_new_project(sum).to_a.dup #c2 = find_all_hot_project(sum).to_a.dup #(c2.take(sum-max)+c1.take(max)).take(sum) - find_all_hot_project(sum).to_a.dup + find_all_hot_project(sum).dup#.to_a.dup end def find_new_course limit=15 @@ -433,7 +433,7 @@ module WelcomeHelper # FROM projects AS p LEFT OUTER JOIN ( # SELECT project_id,grade FROM project_statuses # WHERE project_type = #{project_type} ORDER BY #{order_by} LIMIT #{limit} ) AS t ON p.id = t.project_id ") - Project.visible.joins(:project_status).where("#{Project.table_name}.project_type = ?", project_type).order(order_by).limit(limit).all + Project.visible.joins(:project_status).where("#{Project.table_name}.project_type = ?", project_type).order(order_by).limit(limit)#.all end def sort_bid_by_hot_rails reward_type, limit = 10 diff --git a/app/models/first_page.rb b/app/models/first_page.rb index 113edc0f8..d1fca531e 100644 --- a/app/models/first_page.rb +++ b/app/models/first_page.rb @@ -1,6 +1,6 @@ class FirstPage < ActiveRecord::Base attr_accessible :description, :title, :web_title,:page_type - validates_presence_of :web_title, :title, :description,:page_type + validates_presence_of :web_title, :title, :description,:page_type,:sort_type validates_length_of :web_title,:title, maximum: 30 validates_length_of :description, maximum: 100 end diff --git a/app/views/admin/first_page_made.html.erb b/app/views/admin/first_page_made.html.erb index d3b7416e4..242b7c689 100644 --- a/app/views/admin/first_page_made.html.erb +++ b/app/views/admin/first_page_made.html.erb @@ -28,6 +28,14 @@ <%= text_area_tag 'description',@first_page.description,:rows => 8, :size => 30,:style => "font-size:small;width:490px;margin-left:10px;" %>

+

+ + +

<%= submit_tag l(:button_save), :class => "small", :name => nil %> <% end %> diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb index 0cc5c5e2a..8ffbb0469 100644 --- a/app/views/welcome/index.html.erb +++ b/app/views/welcome/index.html.erb @@ -60,8 +60,8 @@ <%= link_to "更多>>", { :controller => 'projects', :action => 'index', :project_type => 0, :host => Setting.project_domain}, :target => "_blank" %>
    - <% projects = find_miracle_project(10, 3) %> - <% projects.map do |project| %> + <% #projects = find_miracle_project(10, 3) %> + <% @projects.map do |project| %>
  • diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 593a73aa6..b1ec95186 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -572,6 +572,7 @@ zh: label_site_title: 网站标题 label_site_description: 网站简介 label_site_image: 简介图片 + label_sort_type: 热门项目排序方式 #by young label_requirement: 需求 label_new_course: 课程列表 diff --git a/db/migrate/20140716021202_add_column_for_first_page.rb b/db/migrate/20140716021202_add_column_for_first_page.rb new file mode 100644 index 000000000..a7cd6854a --- /dev/null +++ b/db/migrate/20140716021202_add_column_for_first_page.rb @@ -0,0 +1,5 @@ +class AddColumnForFirstPage < ActiveRecord::Migration + def change + add_column("first_pages","sort_type",:integer) + end +end diff --git a/db/migrate/20140716021558_set_sort_type.rb b/db/migrate/20140716021558_set_sort_type.rb new file mode 100644 index 000000000..04511ca2b --- /dev/null +++ b/db/migrate/20140716021558_set_sort_type.rb @@ -0,0 +1,8 @@ +class SetSortType < ActiveRecord::Migration + def change + FirstPage.all.each do |fp| + fp.sort_type = 1 + fp.save + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 6a732b3ce..6134f1601 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20140714081030) do +ActiveRecord::Schema.define(:version => 20140716021558) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -415,6 +415,7 @@ ActiveRecord::Schema.define(:version => 20140714081030) do t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.string "page_type" + t.integer "sort_type" end create_table "forums", :force => true do |t| From 386aa1adc385e3dbe1cd8b8f77887c9565a256c5 Mon Sep 17 00:00:00 2001 From: yanxd Date: Wed, 16 Jul 2014 14:35:54 +0800 Subject: [PATCH 03/24] . --- test/fixtures/courses.yml | 159 ++++++++++++++------- test/fixtures/user_extensions.yml | 43 +++++- test/fixtures/users.yml | 40 +++++- test/functional/courses_controller_test.rb | 50 +++++++ 4 files changed, 235 insertions(+), 57 deletions(-) create mode 100644 test/functional/courses_controller_test.rb diff --git a/test/fixtures/courses.yml b/test/fixtures/courses.yml index 69665d935..c3b7c22a3 100644 --- a/test/fixtures/courses.yml +++ b/test/fixtures/courses.yml @@ -1,69 +1,126 @@ --- -courses_006: - id: 6 - tea_id: 193 - name: - state: 0 +courses_008: + id: 8 + tea_id: 5 + name: 分布式计算环境 + state: code: time: 2013 - extra: course2013-09-30_08-11-15 - created_at: 2013-09-30 08:11:15.000000000 +08:00 - updated_at: 2013-10-11 12:34:29.000000000 +08:00 + extra: course2013-09-30_23-36-00 + created_at: 2013-09-30 15:36:00.000000000 Z + updated_at: 2014-04-19 01:50:41.000000000 Z location: - term: "秋季学期" + term: 春季学期 + string: + password: '1234' + setup_time: + endup_time: '2014-04-18 00:00:00' + class_period: '' + school_id: 117 + description: 介绍分布计算模型,分布计算平台,分布式软件开发环境等分布计算方向的概念、技术和环境,并通过实验提高学生的实践能力。 + status: 1 + attachmenttype: 2 + lft: + rgt: + is_public: 1 + inherit_members: 1 +courses_058: + id: 58 + tea_id: 1168 + name: 软件工程实践 + state: + code: + time: 2014 + extra: course2014-04-17_17-12-17 + created_at: 2014-04-17 09:12:17.000000000 Z + updated_at: 2014-04-17 09:12:17.000000000 Z + location: + term: 春季学期 + string: + password: SEP2014 + setup_time: + endup_time: + class_period: '18' + school_id: 0 + description: 国防科技大学计算机学院工程硕士专业选修课。 + status: 1 + attachmenttype: 2 + lft: + rgt: + is_public: 1 + inherit_members: 1 +courses_059: + id: 59 + tea_id: 193 + name: 软件项目管理 + state: + code: + time: 2014 + extra: course2014-04-18_18-10-46 + created_at: 2014-04-18 10:10:46.000000000 Z + updated_at: 2014-04-18 10:10:46.000000000 Z + location: + term: 春季学期 string: password: software setup_time: endup_time: - class_period: -courses_004: - id: 4 - tea_id: 193 - name: - state: 0 - code: - time: 2013 - extra: course2013-09-27_11-16-11 - created_at: 2013-09-27 11:16:11.000000000 +08:00 - updated_at: 2013-12-21 10:55:20.000000000 +08:00 - location: - term: "秋季学期" - string: - password: '123456' - setup_time: '' - endup_time: '' - class_period: '' -courses_012: - id: 12 - tea_id: 193 - name: + class_period: '30' + school_id: 0 + description: 面向“软件工程”专业的本科生 + status: 1 + attachmenttype: 2 + lft: + rgt: + is_public: 1 + inherit_members: 1 +courses_060: + id: 60 + tea_id: 1179 + name: android开发 state: code: - time: 2013 - extra: course2013-10-08_20-52-10 - created_at: 2013-10-08 20:52:10.000000000 +08:00 - updated_at: 2013-10-08 20:52:10.000000000 +08:00 + time: 2014 + extra: course2014-04-19_15-40-39 + created_at: 2014-04-19 07:40:39.000000000 Z + updated_at: 2014-04-19 07:40:39.000000000 Z location: - term: "秋季学期" + term: 春季学期 string: - password: software + password: trustie740208 setup_time: endup_time: - class_period: -courses_020: - id: 20 - tea_id: 193 - name: + class_period: '48' + school_id: 37 + description: '' + status: 1 + attachmenttype: 2 + lft: + rgt: + is_public: 1 + inherit_members: 1 +courses_061: + id: 61 + tea_id: 29 + name: 测试课程1 state: code: - time: 2013 - extra: course2013-10-21_20-47-58 - created_at: 2013-10-21 20:47:58.000000000 +08:00 - updated_at: 2014-01-08 09:48:56.000000000 +08:00 + time: 2014 + extra: course2014-06-04_14-51-56 + created_at: 2014-06-04 06:51:56.000000000 Z + updated_at: 2014-07-15 01:40:49.000000000 Z location: - term: '秋季学期' + term: 春季学期 string: - password: multi-agent - setup_time: '' - endup_time: '' - class_period: '' + password: '1234' + setup_time: + endup_time: '2014-07-14 00:00:00' + class_period: '23' + school_id: 1579 + description: '233' + status: 1 + attachmenttype: 2 + lft: + rgt: + is_public: 0 + inherit_members: 1 diff --git a/test/fixtures/user_extensions.yml b/test/fixtures/user_extensions.yml index c8f2ebf58..8c19ad7b1 100644 --- a/test/fixtures/user_extensions.yml +++ b/test/fixtures/user_extensions.yml @@ -1,5 +1,3 @@ -# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html - person_one_extra: id: 44 user_id: 29 @@ -36,4 +34,43 @@ person_mao_extra: student_id: nil teacher_realname: nil student_realname: nil - location_city: nil \ No newline at end of file + location_city: nil +ue_lirongzhen: + id: 587 + user_id: 642 + birthday: + brief_introduction: + gender: 0 + location: 河南 + occupation: kylinos-cloud + work_experience: + zip_code: + created_at: 2014-03-18 14:52:55.000000000 Z + updated_at: 2014-03-26 07:19:04.000000000 Z + technical_title: + identity: 1 + student_id: '14066023' + teacher_realname: + student_realname: + location_city: 周口 + school_id: +ue_yingang: + id: 6 + user_id: 5 + birthday: + brief_introduction: 现有功能的精细化! + gender: 0 + location: 湖南 + occupation: 国防科学技术大学计算机学院 + work_experience: + zip_code: + created_at: 2013-09-24 09:36:12.000000000 Z + updated_at: 2014-04-19 08:16:55.000000000 Z + technical_title: 副教授 + identity: 0 + student_id: '' + teacher_realname: + student_realname: + location_city: 长沙 + school_id: 117 + diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index 587199f62..cf7f6da7c 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -72,7 +72,7 @@ users_003: login: dlopper type: User users_005: - id: 5 + id: 12 created_on: 2006-07-19 19:33:19 +02:00 # Locked status: 3 @@ -165,5 +165,39 @@ groups_011: id: 11 lastname: B Team type: Group - - +users_yingang_teacher: + id: 5 + login: jacknudt + hashed_password: dbbd96684c9a64afe9c4935ce0b517e5e9c08064 + firstname: 刚 + lastname: 尹 + mail: jack_nudt@163.com + admin: false + status: 1 + last_login_on: 2014-04-27 13:49:18.000000000 Z + language: zh + auth_source_id: + created_on: 2013-06-25 05:20:59.000000000 Z + updated_on: 2014-07-16 03:37:51.000000000 Z + type: User + identity_url: + mail_notification: only_my_events + salt: 92944df2ce4dae1a4f01007263c5d8bb +users_lirongzhen_student: + id: 642 + login: lirongzhen + hashed_password: 070922b015398577c3ae0d87a68d5ffa93bf82e9 + firstname: 荣振 + lastname: 李 + mail: lrongzheni@gmail.com + admin: false + status: 1 + last_login_on: 2014-04-16 14:06:07.000000000 Z + language: zh + auth_source_id: + created_on: 2014-03-18 14:52:55.000000000 Z + updated_on: 2014-03-26 07:19:04.000000000 Z + type: User + identity_url: + mail_notification: all + salt: dca66d84fcb88b37de04dd3058f73576 diff --git a/test/functional/courses_controller_test.rb b/test/functional/courses_controller_test.rb new file mode 100644 index 000000000..865a4524d --- /dev/null +++ b/test/functional/courses_controller_test.rb @@ -0,0 +1,50 @@ +require File.expand_path('../../test_helper', __FILE__) + +class CoursesControllerTest < ActionController::TestCase + fixtures :courses, :users, :user_extensions, :roles, :members, :member_roles, :enabled_modules, :boards, :messages + + def setup + @request.session[:user_id] = nil + @request.session[:ctime] = Time.now.to_i + @request.session[:atime] = Time.now.to_i + Setting.default_language = 'en' + end + + def test_index_by_anonymous_should_not_show_private_projects + get :index + assert_response :success + assert_template 'index' + courses = assigns(:courses) + assert_not_nil courses + assert courses.all?(&:is_public?) + end + + test "test_create_courses_anyone_temporary" do + @request.session[:user_id] = 5 + Role.find(2).add_permisstion! :add_course + + + get :new + assert_redirected_to new_course_path + assert_response :success + end + +# test "#index by non-admin user with view_time_entries permission should show overall spent time link" do +# @request.session[:user_id] = 3 +# get :index +# assert_template 'index' +# assert_select 'a[href=?]', '/time_entries' +# end +# +# test "#index by non-admin user without view_time_entries permission should not show overall spent time link" do +# Role.find(2).remove_permission! :view_time_entries +# Role.non_member.remove_permission! :view_time_entries +# Role.anonymous.remove_permission! :view_time_entries +# @request.session[:user_id] = 3 +# +# get :index +# assert_template 'index' +# assert_select 'a[href=?]', '/time_entries', 0 +# end +end + From 297fe9a3f457222648a9d7031e2c7df698a5450d Mon Sep 17 00:00:00 2001 From: nwb Date: Wed, 16 Jul 2014 15:05:16 +0800 Subject: [PATCH 04/24] =?UTF-8?q?=E6=B7=BB=E5=8A=A0gitlab=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 5 ++ app/helpers/gitlab_helper.rb | 115 ++++++++++++++++++++++++++++ db/schema.rb | 4 +- 3 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 app/helpers/gitlab_helper.rb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 36e57de5a..f546a2ac3 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -53,6 +53,7 @@ class UsersController < ApplicationController include CustomFieldsHelper include AvatarHelper include WordsHelper + include GitlabHelper # added by liuping 关注 @@ -362,6 +363,10 @@ class UsersController < ApplicationController end def show + # 测试代码 + #login_gitlab("admin@local.host","19840410") + # 测试结束 + pre_count = 10 #limit case params[:type] when "1" diff --git a/app/helpers/gitlab_helper.rb b/app/helpers/gitlab_helper.rb new file mode 100644 index 000000000..486190c88 --- /dev/null +++ b/app/helpers/gitlab_helper.rb @@ -0,0 +1,115 @@ +# Gitlab5.3 API操作接口 +# Add by nwb + +module GitlabHelper + + # gitlab版本库数据本地保存的根目录 + ROOT_PATH="/home/git/repositories/" + PROJECT_PATH_CUT = 40 + # gitlab版本库所在服务器 + #REPO_IP_ADDRESS = Setting.repository_domain + REPO_IP_ADDRESS = "http://192.168.137.100" + GITLAB_API = "/api/v3" + + def self.gitlab_token=(token) + Thread.current[:gitlab_token] = token + end + + # gitlab的登录验证信息 + # add by nwb + def self.gitlab_token + Thread.current[:gitlab_token] ||= nil + end + + # 登录gitlab + # add by nwb + def login_gitlab(email,password) + url = REPO_IP_ADDRESS + GITLAB_API + "/session" + uri = URI.parse(url) + data = {email:email, password:password} + begin + res = Net::HTTP.post_form(uri, data) + if res.code == '201' + temp = ActiveSupport::JSON.decode(res.body) + gitlab_token= temp['private_token'] + return true + else + return false + end + rescue =>err + return false + end + end + + # 创建项目 + # add by nwb + def create_project(name) + + end + + # 为指定用户创建版本库 + # name:版本库名称 user:版本库创建后所属的用户 + def create_project_for_user(name,user) + + end + + # 创建用户 + # loginname:登录名称 username:用户姓名 + def create_user (loginname,username,password,email) + + end + + # 删除用户 + def delete_user(user_id) + + end + + # 给用户添加一个可操作的项目 + def add_project_to_user(project_name,user) + end + + def post(url, params) + uri = URI.parse(url) + http = Net::HTTP.new(uri.host, uri.port) + if uri.scheme == 'https' + http.verify_mode = OpenSSL::SSL::VERIFY_NONE + http.use_ssl = true + end + begin + request = Net::HTTP::Post.new(uri.request_uri) + request['Content-Type'] = 'application/json;charset=utf-8' + request['User-Agent'] = 'Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0' + request['X-ACL-TOKEN'] = 'xxx_token' + #request.set_form_data(params) + request.body = params.to_json + response = http.start { |http| http.request(request) } + puts response.body.inspect + return JSON.parse response.body + rescue =>err + return nil + end + end + + + def get(url, params) + uri = URI.parse(url) + uri.query = URI.encode_www_form(params) + http = Net::HTTP.new uri.host, uri.port + if uri.scheme == 'https' + http.verify_mode = OpenSSL::SSL::VERIFY_NONE + http.use_ssl = true + end + begin + request = Net::HTTP::Get.new uri.request_uri + request['Content-Type'] = 'application/json;charset=utf-8' + request['User-Agent'] = 'Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0' + request['X-ACL-TOKEN'] = 'xxx_token' + response = http.start { |http| http.request request } + puts response.body.inspect + return JSON.parse response.body + rescue =>err + return nil + end + end + +end \ No newline at end of file diff --git a/db/schema.rb b/db/schema.rb index f318ff96a..3d1499022 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20140714081030) do +ActiveRecord::Schema.define(:version => 20140715015540) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -379,6 +379,7 @@ ActiveRecord::Schema.define(:version => 20140714081030) do t.text "description" t.datetime "created_on" t.integer "user_id", :default => 0 + t.integer "is_public", :default => 1 end add_index "documents", ["category_id"], :name => "index_documents_on_category_id" @@ -768,6 +769,7 @@ ActiveRecord::Schema.define(:version => 20140714081030) do t.boolean "hidden_repo", :default => false, :null => false t.integer "attachmenttype", :default => 1 t.integer "user_id" + t.integer "dts_test", :default => 0 end add_index "projects", ["lft"], :name => "index_projects_on_lft" From 494d3af9a4acc7f817560e603fa1760ba46ee351 Mon Sep 17 00:00:00 2001 From: z9hang Date: Wed, 16 Jul 2014 15:16:10 +0800 Subject: [PATCH 05/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B4=B4=E5=90=A7?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/forums_controller.rb | 6 +++--- db/schema.rb | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/controllers/forums_controller.rb b/app/controllers/forums_controller.rb index 3b8b4b928..9c41f91d6 100644 --- a/app/controllers/forums_controller.rb +++ b/app/controllers/forums_controller.rb @@ -50,14 +50,14 @@ class ForumsController < ApplicationController def index @offset, @limit = api_offset_and_limit({:limit => 10}) - @forums_all = Forum.all + @forums_all = Forum.where('1=1') @forums_count = @forums_all.count @forums_pages = Paginator.new @forums_count, @limit, params['page'] @offset ||= @forums_pages.offset - # @forums = @forums_all.offset(@offset).limit(@limit).all - @forums = Forum.all + @forums = @forums_all.offset(@offset).limit(@limit).all + #@forums = Forum.all respond_to do |format| format.html # index.html.erb format.json { render json: @forums } diff --git a/db/schema.rb b/db/schema.rb index 6134f1601..ac5ca0644 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -770,6 +770,7 @@ ActiveRecord::Schema.define(:version => 20140716021558) do t.boolean "hidden_repo", :default => false, :null => false t.integer "attachmenttype", :default => 1 t.integer "user_id" + t.integer "dts_test", :default => 0 end add_index "projects", ["lft"], :name => "index_projects_on_lft" From 2cab9f78952212202c1a1766c0138b4ded414356 Mon Sep 17 00:00:00 2001 From: z9hang Date: Wed, 16 Jul 2014 15:24:56 +0800 Subject: [PATCH 06/24] =?UTF-8?q?=E7=83=AD=E9=97=A8=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E6=B7=BB=E5=8A=A0=E7=A9=BA=E5=80=BC=E5=88=A4?= =?UTF-8?q?=E6=96=AD=EF=BC=8C=E9=BB=98=E8=AE=A4=E6=8C=89=E6=B4=BB=E8=B7=83?= =?UTF-8?q?=E5=BA=A6=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/welcome_controller.rb | 34 +++++++++++++++------------ 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 48c0cf1fb..6a1772c8b 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -32,25 +32,29 @@ class WelcomeController < ApplicationController @projects_all = Project.active.visible. joins("LEFT JOIN #{ProjectStatus.table_name} ON #{Project.table_name}.id = #{ProjectStatus.table_name}.project_id"). where("#{Project.table_name}.project_type = ? and #{Project.table_name}.id in (?)", Project::ProjectType_project,@hot_projects_ids) + if @first_page.nil? || @first_page.sort_type.nil? + @projects = @projects_all.order("grade desc") + else + case @first_page.sort_type + when 0 + @projects = @projects_all.order("created_on desc") + when 1 + @projects = @projects_all.order("grade desc") + when 2 + @projects = @projects_all.order("watchers_count desc") - case @first_page.sort_type - when 0 - @projects = @projects_all.order("created_on desc") - when 1 - @projects = @projects_all.order("grade desc") - when 2 - @projects = @projects_all.order("watchers_count desc") - - #gcm - #when '3' + #gcm + #when '3' #@projects=desc_sort_course_by_avtivity(@project_activity_count_array,@project_all_array) - # @projects=handle_project @projects_all,@project_activity_count - # @s_type = 3 - # @projects = @projects[@project_pages.offset, @project_pages.per_page] + # @projects=handle_project @projects_all,@project_activity_count + # @s_type = 3 + # @projects = @projects[@project_pages.offset, @project_pages.per_page] - else - @projects = @projects_all.order("grade desc") + else + @projects = @projects_all.order("grade desc") + end end + end def robots From 8d181c4e934271c557470462175e58644b1bc81d Mon Sep 17 00:00:00 2001 From: z9hang Date: Wed, 16 Jul 2014 15:32:27 +0800 Subject: [PATCH 07/24] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=87=BA=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/first_page.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/first_page.rb b/app/models/first_page.rb index d1fca531e..52c6e204d 100644 --- a/app/models/first_page.rb +++ b/app/models/first_page.rb @@ -1,6 +1,6 @@ class FirstPage < ActiveRecord::Base - attr_accessible :description, :title, :web_title,:page_type - validates_presence_of :web_title, :title, :description,:page_type,:sort_type + attr_accessible :description, :title, :web_title,:page_type,:sort_type + validates_presence_of :web_title, :title, :description,:page_type validates_length_of :web_title,:title, maximum: 30 validates_length_of :description, maximum: 100 end From 6dcc50e60b6970eb852a060108239eb5d4b8c1a6 Mon Sep 17 00:00:00 2001 From: nwb Date: Wed, 16 Jul 2014 15:52:41 +0800 Subject: [PATCH 08/24] =?UTF-8?q?=E6=B7=BB=E5=8A=A0gitlab=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E9=A1=B9=E7=9B=AE(=E7=89=88=E6=9C=AC=E5=BA=93)?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 2 ++ app/helpers/gitlab_helper.rb | 54 +++++++++++++++++++++++++---- db/schema.rb | 3 +- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index f546a2ac3..2051eb4c9 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -365,6 +365,8 @@ class UsersController < ApplicationController def show # 测试代码 #login_gitlab("admin@local.host","19840410") + #create_project("testproject1") + #create_project_for_user("testproject1","2") # 测试结束 pre_count = 10 #limit diff --git a/app/helpers/gitlab_helper.rb b/app/helpers/gitlab_helper.rb index 486190c88..ea7013c31 100644 --- a/app/helpers/gitlab_helper.rb +++ b/app/helpers/gitlab_helper.rb @@ -1,5 +1,6 @@ # Gitlab5.3 API操作接口 # Add by nwb +# 暂时没支持SSH module GitlabHelper @@ -7,7 +8,7 @@ module GitlabHelper ROOT_PATH="/home/git/repositories/" PROJECT_PATH_CUT = 40 # gitlab版本库所在服务器 - #REPO_IP_ADDRESS = Setting.repository_domain + #REPO_IP_ADDRESS = "http://" + Setting.repository_domain REPO_IP_ADDRESS = "http://192.168.137.100" GITLAB_API = "/api/v3" @@ -31,7 +32,7 @@ module GitlabHelper res = Net::HTTP.post_form(uri, data) if res.code == '201' temp = ActiveSupport::JSON.decode(res.body) - gitlab_token= temp['private_token'] + GitlabHelper.gitlab_token= temp['private_token'] return true else return false @@ -43,14 +44,53 @@ module GitlabHelper # 创建项目 # add by nwb - def create_project(name) - + def create_project(project_name) + url = REPO_IP_ADDRESS + GITLAB_API + "/projects" + uri = URI.parse(url) + data = {name:project_name, private_token:GitlabHelper.gitlab_token} + begin + res = Net::HTTP.post_form(uri, data) + if res.code == '201' + temp = ActiveSupport::JSON.decode(res.body) + #新创建项目的版本库地址 + respo = temp['http_url_to_repo'] + respo['http://localhost'] = REPO_IP_ADDRESS + # 新创建项目的web地址 + webaddress = temp['web_url'] + webaddress['http://localhost'] = REPO_IP_ADDRESS + return true + else + return false + end + rescue =>err + return false + end end # 为指定用户创建版本库 - # name:版本库名称 user:版本库创建后所属的用户 - def create_project_for_user(name,user) - + # project_name:版本库名称 user_id:Gitlab版本库中的用户编号 + # add by nwb + def create_project_for_user(project_name,user_id) + url = REPO_IP_ADDRESS + GITLAB_API + "/projects/user/" + user_id + uri = URI.parse(url) + data = {user_id:user_id, name:project_name,private_token:GitlabHelper.gitlab_token} + begin + res = Net::HTTP.post_form(uri, data) + if res.code == '201' + temp = ActiveSupport::JSON.decode(res.body) + #新创建项目的版本库地址 + respo = temp['http_url_to_repo'] + respo['http://localhost'] = REPO_IP_ADDRESS + # 新创建项目的web地址 + webaddress = temp['web_url'] + webaddress['http://localhost'] = REPO_IP_ADDRESS + return true + else + return false + end + rescue =>err + return false + end end # 创建用户 diff --git a/db/schema.rb b/db/schema.rb index 3d1499022..ac5ca0644 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20140715015540) do +ActiveRecord::Schema.define(:version => 20140716021558) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -415,6 +415,7 @@ ActiveRecord::Schema.define(:version => 20140715015540) do t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.string "page_type" + t.integer "sort_type" end create_table "forums", :force => true do |t| From 3d8571b59e2e1fa1325e12a90b3df4876deda3bf Mon Sep 17 00:00:00 2001 From: nwb Date: Wed, 16 Jul 2014 16:50:28 +0800 Subject: [PATCH 09/24] =?UTF-8?q?1.=E5=AE=9E=E7=8E=B0=E6=96=B0=E5=A2=9Egit?= =?UTF-8?q?lab=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3=202.=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=88=A0=E9=99=A4gitlab=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 2 ++ app/helpers/gitlab_helper.rb | 41 ++++++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 2051eb4c9..d272a7678 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -367,6 +367,8 @@ class UsersController < ApplicationController #login_gitlab("admin@local.host","19840410") #create_project("testproject1") #create_project_for_user("testproject1","2") + #create_user("test","just test","123456","test@sina.com") + #delete_user("3") # 测试结束 pre_count = 10 #limit diff --git a/app/helpers/gitlab_helper.rb b/app/helpers/gitlab_helper.rb index ea7013c31..1b2906523 100644 --- a/app/helpers/gitlab_helper.rb +++ b/app/helpers/gitlab_helper.rb @@ -94,14 +94,47 @@ module GitlabHelper end # 创建用户 - # loginname:登录名称 username:用户姓名 - def create_user (loginname,username,password,email) - + # loginname:登录名称(版本库路径包含) name:用户姓名 + # add by nwb + def create_user (loginname,name,password,email) + url = REPO_IP_ADDRESS + GITLAB_API + "/users" + uri = URI.parse(url) + data = {email:email,password:password,username:loginname, name:name, private_token:GitlabHelper.gitlab_token} + begin + res = Net::HTTP.post_form(uri, data) + if res.code == '201' + temp = ActiveSupport::JSON.decode(res.body) + #新创建的gitlab用户编号(需保存) + user_id = temp['id'] + return true + else + return false + end + rescue =>err + return false + end end # 删除用户 def delete_user(user_id) - + url = REPO_IP_ADDRESS + GITLAB_API + "/users/" + user_id + uri = URI.parse(url) + data = {id:user_id,private_token:GitlabHelper.gitlab_token} + http = Net::HTTP.new uri.host, uri.port + begin + req = Net::HTTP::Delete.new(uri.request_uri) + req.form_data = data + res= http.start { |http| http.request req } + if res.code == '200' + temp = ActiveSupport::JSON.decode(res.body) + # 删除成功,对应更新trustie用户的gitlab用户编号 + return true + else + return false + end + rescue =>err + return false + end end # 给用户添加一个可操作的项目 From b34a8d6166d6f66ab26a69d6dc662d8ceaeccaf2 Mon Sep 17 00:00:00 2001 From: nwb Date: Wed, 16 Jul 2014 17:25:47 +0800 Subject: [PATCH 10/24] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index 12c932dd8..b68fc6aa9 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -156,7 +156,7 @@ class Project < ActiveRecord::Base where(nil) else pattern = "%#{arg.to_s.strip.downcase}%" - where("LOWER(identifier) LIKE :p OR LOWER(name) LIKE :p ", :p => pattern) + where("LOWER(name) LIKE :p ", :p => pattern) end } scope :project_entities, -> { where(project_type: ProjectType_project) } From 4eee70a84539e736ae87d852509b5fbef6a491b0 Mon Sep 17 00:00:00 2001 From: yanxd Date: Wed, 16 Jul 2014 17:46:17 +0800 Subject: [PATCH 11/24] course new/created test --- app/models/user.rb | 2 +- test/fixtures/enabled_modules.yml | 51 +++++++ test/fixtures/member_roles.yml | 5 + test/fixtures/members.yml | 7 + test/fixtures/roles.yml | 154 +++++++++++++++++++++ test/functional/courses_controller_test.rb | 29 +++- 6 files changed, 243 insertions(+), 5 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 9665a4fb0..195346e7c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -996,4 +996,4 @@ class AnonymousUser < User def destroy false end -end \ No newline at end of file +end diff --git a/test/fixtures/enabled_modules.yml b/test/fixtures/enabled_modules.yml index edb2e6972..a0a157142 100644 --- a/test/fixtures/enabled_modules.yml +++ b/test/fixtures/enabled_modules.yml @@ -103,3 +103,54 @@ enabled_modules_026: name: repository project_id: 2 id: 26 +#trustie +enabled_modules_trustie_001: + id: 415 + project_id: -1 + name: issue_tracking + course_id: 8 +enabled_modules_trustie_002: + id: 416 + project_id: -1 + name: time_tracking + course_id: 8 +enabled_modules_trustie_003: + id: 417 + project_id: -1 + name: news + course_id: 8 +enabled_modules_trustie_004: + id: 418 + project_id: -1 + name: documents + course_id: 8 +enabled_modules_trustie_005: + id: 419 + project_id: -1 + name: files + course_id: 8 +enabled_modules_trustie_006: + id: 420 + project_id: -1 + name: wiki + course_id: 8 +enabled_modules_trustie_007: + id: 421 + project_id: -1 + name: repository + course_id: 8 +enabled_modules_trustie_008: + id: 422 + project_id: -1 + name: boards + course_id: 8 +enabled_modules_trustie_009: + id: 423 + project_id: -1 + name: calendar + course_id: 8 +enabled_modules_trustie_010: + id: 424 + project_id: -1 + name: gantt + course_id: 8 diff --git a/test/fixtures/member_roles.yml b/test/fixtures/member_roles.yml index 999985395..79a8a8530 100644 --- a/test/fixtures/member_roles.yml +++ b/test/fixtures/member_roles.yml @@ -47,3 +47,8 @@ member_roles_011: role_id: 2 member_id: 10 inherited_from: 10 +member_roles_179: + id: 179 + member_id: 126 + role_id: 3 + inherited_from: diff --git a/test/fixtures/members.yml b/test/fixtures/members.yml index 10d52f300..7f918f683 100644 --- a/test/fixtures/members.yml +++ b/test/fixtures/members.yml @@ -60,3 +60,10 @@ members_010: project_id: 2 user_id: 8 mail_notification: false +members_course_001: + id: 126 + user_id: 5 + project_id: -1 + created_on: 2013-09-30 15:36:00.000000000 Z + mail_notification: false + course_id: 8 diff --git a/test/fixtures/roles.yml b/test/fixtures/roles.yml index 6f4b6724d..00fbdfb56 100644 --- a/test/fixtures/roles.yml +++ b/test/fixtures/roles.yml @@ -199,4 +199,158 @@ roles_005: - :view_changesets position: 5 +roles_trustie_001: + id: 7 + name: 助教 + position: 6 + assignable: true + builtin: 0 + permissions: + - :add_project + - :edit_project + - :manage_members + - :view_journals_for_messages + - :add_course + - :edit_course + - :close_course + - :select_course_modules + - :view_course_journals_for_messages + - :manage_files + - :view_course_files + - :comment_news + - :manage_boards + - :add_messages + - :delete_own_messages + - :view_calendar + - :view_documents + - :view_files + - :view_gantt + - :view_issues + - :add_issues + - :add_issue_notes + - :save_queries + - :browse_repository + - :view_changesets + - :view_time_entries + - :view_wiki_pages + - :export_wiki_pages + - :view_wiki_edits + - :edit_wiki_pages + - :delete_wiki_pages_attachments + - :as_teacher + issues_visibility: default +roles_trustie_002: + id: 9 + name: 老师 + position: 7 + assignable: true + builtin: 0 + permissions: + - :add_project + - :edit_project + - :close_project + - :select_project_modules + - :manage_members + - :manage_versions + - :add_subprojects + - :view_journals_for_messages + - :add_course + - :edit_course + - :close_course + - :select_course_modules + - :view_course_journals_for_messages + - :manage_files + - :view_course_files + - :manage_news + - :comment_news + - :manage_boards + - :add_messages + - :edit_messages + - :edit_own_messages + - :delete_messages + - :delete_own_messages + - :view_calendar + - :add_documents + - :edit_documents + - :delete_documents + - :view_documents + - :view_files + - :view_gantt + - :manage_categories + - :view_issues + - :add_issues + - :edit_issues + - :manage_issue_relations + - :manage_subtasks + - :set_issues_private + - :set_own_issues_private + - :add_issue_notes + - :edit_issue_notes + - :edit_own_issue_notes + - :view_private_notes + - :set_notes_private + - :move_issues + - :delete_issues + - :manage_public_queries + - :save_queries + - :view_issue_watchers + - :add_issue_watchers + - :delete_issue_watchers + - :manage_repository + - :browse_repository + - :view_changesets + - :commit_access + - :manage_related_issues + - :log_time + - :view_time_entries + - :edit_time_entries + - :edit_own_time_entries + - :manage_project_activities + - :manage_wiki + - :rename_wiki_pages + - :delete_wiki_pages + - :view_wiki_pages + - :export_wiki_pages + - :view_wiki_edits + - :edit_wiki_pages + - :delete_wiki_pages_attachments + - :protect_wiki_pages + - :as_teacher + issues_visibility: default +roles_trustie_003: + id: 10 + name: 学生 + position: 8 + assignable: true + builtin: 0 + permissions: + - :add_project + - :view_journals_for_messages + - :add_course + - :edit_course + - :close_course + - :select_course_modules + - :view_course_journals_for_messages + - :view_course_files + - :comment_news + - :manage_boards + - :add_messages + - :edit_own_messages + - :delete_own_messages + - :view_calendar + - :view_documents + - :view_files + - :view_gantt + - :view_issues + - :add_issues + - :add_issue_notes + - :save_queries + - :browse_repository + - :view_changesets + - :view_time_entries + - :view_wiki_pages + - :view_wiki_edits + - :paret_in_homework + - :as_student + issues_visibility: default diff --git a/test/functional/courses_controller_test.rb b/test/functional/courses_controller_test.rb index 865a4524d..ebd0325b3 100644 --- a/test/functional/courses_controller_test.rb +++ b/test/functional/courses_controller_test.rb @@ -19,14 +19,35 @@ class CoursesControllerTest < ActionController::TestCase assert courses.all?(&:is_public?) end - test "test_create_courses_anyone_temporary" do + # 人员添加课程的权限是不属于任何角色 + def test_new_course_anyone_temporary @request.session[:user_id] = 5 - Role.find(2).add_permisstion! :add_course - + Role.find_by_name("Non member").add_permission! :add_course #Non member get :new - assert_redirected_to new_course_path assert_response :success + assert_template :new + end + + def test_create_course_anyone_temporary + @request.session[:user_id] = 5 + Role.find_by_name("Non member").add_permission! :add_course #Non member + + post :create, + :class_period => '32', + :time => '2014', + :term => 'spring', + :course => { + :name => 'course one', + :password => '1234', + :description => 'description', + :is_public => '1234', + :course_type => '1' + } + assert_response :found + course = Course.find_by_name('course one') + assert_redirected_to "courses/#{course.id}/settings" + #assert_redirected_to "courses/#{course.id}/settings" end # test "#index by non-admin user with view_time_entries permission should show overall spent time link" do From a58a747cfa9160f7913771867701e46d06a76ebb Mon Sep 17 00:00:00 2001 From: nwb Date: Thu, 17 Jul 2014 09:10:29 +0800 Subject: [PATCH 12/24] =?UTF-8?q?=E5=B1=8F=E8=94=BD=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E7=9A=84=E5=85=B3=E6=B3=A8=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/base_users.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/base_users.html.erb b/app/views/layouts/base_users.html.erb index 172bd67af..ac2b0e6fa 100644 --- a/app/views/layouts/base_users.html.erb +++ b/app/views/layouts/base_users.html.erb @@ -130,7 +130,7 @@ <%= link_to l(:label_x_user_fans, :count => User.current.watcher_users(User.current.id).count)+"("+@user.watcher_users.count.to_s+")", :controller=>"users", :action=>"user_fanslist" %>  - <%= link_to l(:label_requirement_focus)+"("+Bid.watched_by(@user).where('reward_type = ?', 1).count.to_s+")" ,:controller=>"users", :action=>"watch_bids"%>   +   <% if @user.id == User.current.id %>

    From 12fb6bf5ca3c3ff67c144db3766379832f70db8a Mon Sep 17 00:00:00 2001 From: yanxd Date: Thu, 17 Jul 2014 09:52:56 +0800 Subject: [PATCH 13/24] . --- app/controllers/courses_controller.rb | 28 ++++++++--------- test/functional/courses_controller_test.rb | 36 ++++++++++++++++++---- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index a38d9f9c8..e10d6df88 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -217,7 +217,7 @@ class CoursesController < ApplicationController @issue_category ||= IssueCategory.new @member ||= @course.members.new @trackers = Tracker.sorted.all - end + end def create if User.current.user_extensions.identity @@ -239,18 +239,18 @@ class CoursesController < ApplicationController @trackers = Tracker.sorted.all if User.current.user_extensions.identity == 0 - if @course.save + if @course.save #unless User.current.admin? - r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first - m = Member.new(:user => User.current, :roles => [r]) - m.project_id = -1 - course = CourseInfos.new(:user_id => User.current.id, :course_id => @course.id) - #user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id) - if params[:course][:is_public] == '1' - course_status = CourseStatus.create(:course_id => @course.id, :watchers_count => 0, :changesets_count => 0, :grade => 0, :course_type => @course_tag) - end - @course.members << m - @course.course_infos << course + r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first + m = Member.new(:user => User.current, :roles => [r]) + m.project_id = -1 + course = CourseInfos.new(:user_id => User.current.id, :course_id => @course.id) + #user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id) + if params[:course][:is_public] == '1' + course_status = CourseStatus.create(:course_id => @course.id, :watchers_count => 0, :changesets_count => 0, :grade => 0, :course_type => @course_tag) + end + @course.members << m + @course.course_infos << course #end respond_to do |format| format.html { @@ -272,7 +272,7 @@ class CoursesController < ApplicationController format.api { render_validation_errors(@course) } end end - end + end end @@ -715,4 +715,4 @@ class CoursesController < ApplicationController -end \ No newline at end of file +end diff --git a/test/functional/courses_controller_test.rb b/test/functional/courses_controller_test.rb index ebd0325b3..a1551a717 100644 --- a/test/functional/courses_controller_test.rb +++ b/test/functional/courses_controller_test.rb @@ -29,27 +29,51 @@ class CoursesControllerTest < ActionController::TestCase assert_template :new end - def test_create_course_anyone_temporary + def test_create_course_with_access_control @request.session[:user_id] = 5 Role.find_by_name("Non member").add_permission! :add_course #Non member + course_name = 'course_one' post :create, :class_period => '32', :time => '2014', :term => 'spring', :course => { - :name => 'course one', + :name => course_name, # names can't contain space. :password => '1234', :description => 'description', - :is_public => '1234', + :is_public => '1', :course_type => '1' } + assert_response :found - course = Course.find_by_name('course one') - assert_redirected_to "courses/#{course.id}/settings" - #assert_redirected_to "courses/#{course.id}/settings" + course = Course.find_by_name(course_name) + red_url = "courses/#{course.id}/settings" + assert_match %r(#{red_url}), @response.redirect_url + # 创建成功跳转settings方法会带参数一枚,故一下方法失败 + # assert_redirected_to "courses/#{course.id}/settings" end + def test_create_course_without_access_control + @request.session[:user_id] = 5 + #Role.find_by_name("Non member").add_permission! :add_course #Non member + course_name = 'course_one' + + post :create, + :class_period => '32', + :time => '2014', + :term => 'spring', + :course => { + :name => course_name, # names can't contain space. + :password => '1234', + :description => 'description', + :is_public => '1', + :course_type => '1' + } + + assert_response :forbidden + end + # test "#index by non-admin user with view_time_entries permission should show overall spent time link" do # @request.session[:user_id] = 3 # get :index From b60a0ddf592aa03d19f9bb738211fbdba0fb74da Mon Sep 17 00:00:00 2001 From: nwb Date: Thu, 17 Jul 2014 09:55:40 +0800 Subject: [PATCH 14/24] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E7=BB=99gitlab?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7=E5=8F=8A?= =?UTF-8?q?=E8=B5=8B=E6=9D=83=E9=99=90=E6=8E=A5=E5=8F=A3=202.=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=BB=99gitlab=E9=A1=B9=E7=9B=AE=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 4 +- app/helpers/gitlab_helper.rb | 60 ++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index d272a7678..a72444f0a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -364,11 +364,13 @@ class UsersController < ApplicationController def show # 测试代码 - #login_gitlab("admin@local.host","19840410") + login_gitlab("admin@local.host","19840410") #create_project("testproject1") #create_project_for_user("testproject1","2") #create_user("test","just test","123456","test@sina.com") #delete_user("3") + add_user_to_project("1","2",GitlabHelper::GUEST) + delete_user_from_project("1","2") # 测试结束 pre_count = 10 #limit diff --git a/app/helpers/gitlab_helper.rb b/app/helpers/gitlab_helper.rb index 1b2906523..20faf551c 100644 --- a/app/helpers/gitlab_helper.rb +++ b/app/helpers/gitlab_helper.rb @@ -12,6 +12,12 @@ module GitlabHelper REPO_IP_ADDRESS = "http://192.168.137.100" GITLAB_API = "/api/v3" + # 用户在项目中的权限级别 + GUEST = 10 + REPORTER = 20 + DEVELOPER = 30 + MASTER = 40 + def self.gitlab_token=(token) Thread.current[:gitlab_token] = token end @@ -116,6 +122,8 @@ module GitlabHelper end # 删除用户 + # user_id:用户在gitlab中的id + # add by nwb def delete_user(user_id) url = REPO_IP_ADDRESS + GITLAB_API + "/users/" + user_id uri = URI.parse(url) @@ -138,9 +146,56 @@ module GitlabHelper end # 给用户添加一个可操作的项目 - def add_project_to_user(project_name,user) + # 若用户已在该项目中,权限级别取新权限与现有权限的最大值 + # project_id:项目在gitlab中的id user_id:用户在gitlab中的id + # access_level为用户在项目中的权限级别,对应如下: + #GUEST = 10 + #REPORTER = 20 + #DEVELOPER = 30 + #MASTER = 40 + # add by nwb + def add_user_to_project(project_id,user_id,access_level) + url = REPO_IP_ADDRESS + GITLAB_API + "/projects/" + project_id +"/members" + uri = URI.parse(url) + data = {id:project_id,user_id:user_id,access_level:access_level, private_token:GitlabHelper.gitlab_token} + begin + res = Net::HTTP.post_form(uri, data) + if res.code == '201' + temp = ActiveSupport::JSON.decode(res.body) + return true + else + return false + end + rescue =>err + return false + end end + # 从项目中删除用户 + # project_id:项目在gitlab中的ids user_id:用户在gitlab中的id + # add by nwb + def delete_user_from_project(project_id,user_id) + url = REPO_IP_ADDRESS + GITLAB_API + "/projects/" + project_id +"/members/" + user_id + uri = URI.parse(url) + data = {id:project_id,user_id:user_id,private_token:GitlabHelper.gitlab_token} + http = Net::HTTP.new uri.host, uri.port + begin + req = Net::HTTP::Delete.new(uri.request_uri) + req.form_data = data + res= http.start { |http| http.request req } + if res.code == '200' + temp = ActiveSupport::JSON.decode(res.body) + return true + else + return false + end + rescue =>err + return false + end + end + + # 发送post消息 + # add by nwb def post(url, params) uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) @@ -163,7 +218,8 @@ module GitlabHelper end end - + # 发送get消息 + # add by nwb def get(url, params) uri = URI.parse(url) uri.query = URI.encode_www_form(params) From 6a65b2a84b3f696d05cb0a8dff5f737d278ccdaa Mon Sep 17 00:00:00 2001 From: nwb Date: Thu, 17 Jul 2014 10:52:01 +0800 Subject: [PATCH 15/24] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 6 +++--- app/helpers/gitlab_helper.rb | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index a72444f0a..24850a585 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -364,13 +364,13 @@ class UsersController < ApplicationController def show # 测试代码 - login_gitlab("admin@local.host","19840410") + #login_gitlab("admin@local.host","19840410") #create_project("testproject1") #create_project_for_user("testproject1","2") #create_user("test","just test","123456","test@sina.com") #delete_user("3") - add_user_to_project("1","2",GitlabHelper::GUEST) - delete_user_from_project("1","2") + #add_user_to_project("1","2",GitlabHelper::GUEST) + #delete_user_from_project("1","2") # 测试结束 pre_count = 10 #limit diff --git a/app/helpers/gitlab_helper.rb b/app/helpers/gitlab_helper.rb index 20faf551c..ceaaf6d21 100644 --- a/app/helpers/gitlab_helper.rb +++ b/app/helpers/gitlab_helper.rb @@ -1,6 +1,8 @@ # Gitlab5.3 API操作接口 # Add by nwb # 暂时没支持SSH +# 接口通过HTTP协议与服务器交互,理论上只要能安装gitlab的操作系统本接口都能支持 +# 本机的测试环境是Ubuntu 12.04 module GitlabHelper @@ -8,6 +10,7 @@ module GitlabHelper ROOT_PATH="/home/git/repositories/" PROJECT_PATH_CUT = 40 # gitlab版本库所在服务器 + # 注意REPO_IP_ADDRESS必须以http://开头,暂时只支持HTTP协议,未支持SSH #REPO_IP_ADDRESS = "http://" + Setting.repository_domain REPO_IP_ADDRESS = "http://192.168.137.100" GITLAB_API = "/api/v3" @@ -18,6 +21,8 @@ module GitlabHelper DEVELOPER = 30 MASTER = 40 + # gitlab的登录验证信息 + # add by nwb def self.gitlab_token=(token) Thread.current[:gitlab_token] = token end @@ -211,7 +216,6 @@ module GitlabHelper #request.set_form_data(params) request.body = params.to_json response = http.start { |http| http.request(request) } - puts response.body.inspect return JSON.parse response.body rescue =>err return nil @@ -234,7 +238,6 @@ module GitlabHelper request['User-Agent'] = 'Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0' request['X-ACL-TOKEN'] = 'xxx_token' response = http.start { |http| http.request request } - puts response.body.inspect return JSON.parse response.body rescue =>err return nil From 615b3ac2acdb1bb14024fe593683d8ae6adc1bc2 Mon Sep 17 00:00:00 2001 From: nwb Date: Thu, 17 Jul 2014 14:32:07 +0800 Subject: [PATCH 16/24] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 10 ---------- app/views/layouts/base_courses.html.erb | 2 +- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 24850a585..e81355260 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -363,16 +363,6 @@ class UsersController < ApplicationController end def show - # 测试代码 - #login_gitlab("admin@local.host","19840410") - #create_project("testproject1") - #create_project_for_user("testproject1","2") - #create_user("test","just test","123456","test@sina.com") - #delete_user("3") - #add_user_to_project("1","2",GitlabHelper::GUEST) - #delete_user_from_project("1","2") - # 测试结束 - pre_count = 10 #limit case params[:type] when "1" diff --git a/app/views/layouts/base_courses.html.erb b/app/views/layouts/base_courses.html.erb index 5958e18bd..38691bd1e 100644 --- a/app/views/layouts/base_courses.html.erb +++ b/app/views/layouts/base_courses.html.erb @@ -42,7 +42,7 @@ <%= link_to request.host()+"/course", :controller => 'courses', :action => 'index' %>

    <%= link_to "主页", home_path %> - > <%= link_to l(:label_course_practice), :controller => 'courses', :action => 'index' %> + > <%= link_to l(:label_course_all), :controller => 'courses', :action => 'index' %> > <%= link_to @course.name, nil %>

    From 02b4029e8c6035525f911882a0e55d1c9e475b1d Mon Sep 17 00:00:00 2001 From: nwb Date: Thu, 17 Jul 2014 15:05:49 +0800 Subject: [PATCH 17/24] =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E7=95=8C=E9=9D=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/files/_course_file.html.erb | 6 ++++-- app/views/files/_project_file.html.erb | 5 ++++- config/locales/en.yml | 1 + config/locales/zh.yml | 1 + public/stylesheets/application.css | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/views/files/_course_file.html.erb b/app/views/files/_course_file.html.erb index d9913539f..a1547bc2b 100644 --- a/app/views/files/_course_file.html.erb +++ b/app/views/files/_course_file.html.erb @@ -11,7 +11,9 @@
    <%= link_to(l(:label_upload_files), 'javascript:void(0);', :class => 'icon m5p5 button_submit', :onclick => "$('#relation_file_div').slideUp();$('#upload_file_div').slideToggle('slow');") if User.current.allowed_to?(:manage_files, @course) %> <%= link_to(l(:label_relation_files), 'javascript:void(0);', :onclick => "$('#upload_file_div').slideUp();$('#relation_file_div').slideToggle();", :class => 'icon m5p5 button_submit') if User.current.allowed_to?(:manage_files, @course) %> - +

    +
    + <% if attachmenttypes.any? %>       @@ -24,7 +26,7 @@ <%= select_tag "attach_sufix_browse", content_tag(:option, l(:attachment_all), :value => '0') +options_for_select(sufixtypes), :onchange => "course_attachment_contenttypes_searchex(this.value)" %> <% end %> - +
    diff --git a/app/views/files/_project_file.html.erb b/app/views/files/_project_file.html.erb index 1212db052..67067a638 100644 --- a/app/views/files/_project_file.html.erb +++ b/app/views/files/_project_file.html.erb @@ -11,7 +11,9 @@
    <%= link_to(l(:label_upload_files), 'javascript:void(0);', :class => 'icon m5p5 button_submit', :onclick => "$('#relation_file_div').slideUp();$('#upload_file_div').slideToggle('slow');") if User.current.allowed_to?(:manage_files, @project) %> <%= link_to(l(:label_relation_files), 'javascript:void(0);', :onclick => "$('#upload_file_div').slideUp();$('#relation_file_div').slideToggle();", :class => 'icon m5p5 button_submit') if User.current.allowed_to?(:manage_files, @project) %> - +

    +
    + <% if attachmenttypes.any? %>       @@ -24,6 +26,7 @@ <%= select_tag "attach_sufix_browse", content_tag(:option, l(:attachment_all), :value => '0') +options_for_select(sufixtypes), :onchange => "attachment_contenttypes_searchex(this.value)" %> <% end %> +
  • <%= link_to l(:label_my_projects), {:controller => 'users', :action => 'user_projects', id: User.current.id, host: Setting.project_domain} %>
      <% User.current.projects.each do |project| %> -
    • <%= link_to project.name.truncate(10, omission: '...'), project_path(project) %>
    • +
    • <%= link_to project.name.truncate(10, omission: '...'), {:controller => 'projects', :action => 'show',id: project.id } %>
    • <% end %>
  • diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index bd15b128e..80486da7a 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -1,4 +1,4 @@ -<% @nav_dispaly_project_label = 1 %> +<% #@nav_dispaly_project_label = 1 %>