diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 766967e38..63ce5a2df 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -14,7 +14,7 @@ class CoursesController < ApplicationController menu_item l(:label_sort_by_influence), :only => :index before_filter :can_show_course, :except => [] - before_filter :find_course, :except => [ :index, :search,:list, :new,:join,:unjoin, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise,:view_homework_attaches] + before_filter :find_course, :except => [ :index, :search,:list, :new,:join,:unjoin, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise,:view_homework_attaches,:join_private_courses] before_filter :authorize_course, :only => [:show, :settings, :edit, :update, :modules, :close, :reopen, :view_homework_attaches, :course] before_filter :authorize_course_global, :only => [:view_homework_attaches, :new,:create] before_filter :require_admin, :only => [:copy, :archive, :unarchive, :destroy, :calendar] @@ -26,21 +26,30 @@ class CoursesController < ApplicationController def join if User.current.logged? course = Course.find(params[:object_id]) - if params[:course_password] == course.password - members = [] - members << Member.new(:role_ids => [10], :user_id => User.current.id) - course.members << members - - StudentsForCourse.create(:student_id => User.current.id, :course_id => params[:object_id]) - @state = 0 + unless User.current.member_of_course? course + if params[:course_password] == course.password + members = [] + members << Member.new(:role_ids => [10], :user_id => User.current.id) + course.members << members + StudentsForCourse.create(:student_id => User.current.id, :course_id => params[:object_id]) + @state = 0 + else + @state = 1 + end else - @state = 1 + @state = 3 end end respond_to do |format| # format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}} format.js { render :partial => 'set_join', :locals => {:user => User.current, :course => Course.find(params[:object_id]), :object_id => params[:object_id]} } end + rescue Exception => e + @state = 4 + respond_to do |format| + # format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}} + format.js { render :partial => 'set_join', :locals => {:user => User.current, :course => nil, :object_id => nil} } + end end def unjoin @@ -60,6 +69,12 @@ class CoursesController < ApplicationController end end + def join_private_courses + respond_to do |format| + format.js + end + end + #更新课程信息 def update @course.safe_attributes = params[:course] diff --git a/app/views/courses/_join_private_course.html.erb b/app/views/courses/_join_private_course.html.erb new file mode 100644 index 000000000..60223922f --- /dev/null +++ b/app/views/courses/_join_private_course.html.erb @@ -0,0 +1,60 @@ + + + +

加入公开课程或私有课程

+ +<%= form_tag({:controller => 'courses', + :action => 'join'}, + :remote => true, + :method => :post, + :id => 'new-watcher-form') do %> +
+ 课程ID: + <%= text_field_tag 'object_id', nil, :style=>'width:80%'%> + (课程ID是课程的网址中出现的序号) +
+
+ 密码   : + <%= text_field_tag 'course_password', nil, :style=>'width:80%'%> +
+ +

+ <%= submit_tag l(:label_new_join), :name => nil, :class => "bid_btn", :onclick => "hideModal(this);" %> + <%= submit_tag l(:button_cancel), :name => nil, :class => "bid_btn", :onclick => "hideModal(this);", :type => 'button' %> +

+<% end %> diff --git a/app/views/courses/_set_join.js.erb b/app/views/courses/_set_join.js.erb index a4b5dd3c6..8b5c1fb36 100644 --- a/app/views/courses/_set_join.js.erb +++ b/app/views/courses/_set_join.js.erb @@ -1,4 +1,6 @@ -$("#<%=object_id%>").replaceWith('<%= escape_javascript join_in_course_for_list(course, user) %>'); +<% if object_id%> + $("#<%=object_id%>").replaceWith('<%= escape_javascript join_in_course_for_list(course, user) %>'); +<% end %> <% if @state %> <% if @state == 0 %> alert("加入成功") @@ -6,7 +8,11 @@ $("#<%=object_id%>").replaceWith('<%= escape_javascript join_in_course_for_list( alert("密码错误") <% elsif @state == 2 %> alert("课程已过期\n请联系课程管理员重启课程。(在配置课程处)") - <% else %> + <% elsif @state == 3 %> + alert("您已经加入了课程"); + <% elsif @state == 3 %> + alert("您已经的课程不存在") + <% else %> alert("未知错误,请稍后再试") <% end %> <% end %> diff --git a/app/views/courses/join_private_courses.js.erb b/app/views/courses/join_private_courses.js.erb new file mode 100644 index 000000000..71c7e62b7 --- /dev/null +++ b/app/views/courses/join_private_courses.js.erb @@ -0,0 +1,3 @@ +$('#ajax-modal').html('<%= escape_javascript(render :partial => 'join_private_course') %>'); +showModal('ajax-modal', '400px'); +$('#ajax-modal').addClass('new-watcher'); \ No newline at end of file diff --git a/app/views/layouts/base_courses.html.erb b/app/views/layouts/base_courses.html.erb index 1c1e6dbd2..bfb8d11d5 100644 --- a/app/views/layouts/base_courses.html.erb +++ b/app/views/layouts/base_courses.html.erb @@ -80,9 +80,9 @@ <% else %> <%= join_in_course(@course, User.current) %> <% end %> - <% unless User.current.member_of_course?(@course) %> + <%# unless User.current.member_of_course?(@course) %> - <% end %> + <%# end %> <% end %> diff --git a/app/views/projects/_new_join.html.erb b/app/views/projects/_new_join.html.erb index cc83ac80d..e74ddeba0 100644 --- a/app/views/projects/_new_join.html.erb +++ b/app/views/projects/_new_join.html.erb @@ -56,6 +56,7 @@

<%= submit_tag l(:label_new_join), :name => nil, :class => "bid_btn", :onclick => "hideModal(this);" %> <%= submit_tag l(:button_cancel), :name => nil, :class => "bid_btn", :onclick => "hideModal(this);", :type => 'button' %> +

<% end %> diff --git a/app/views/welcome/_more_course.html.erb b/app/views/welcome/_more_course.html.erb index c871e7f97..a5464c27c 100644 --- a/app/views/welcome/_more_course.html.erb +++ b/app/views/welcome/_more_course.html.erb @@ -3,6 +3,8 @@ <%= link_to(l(:label_course_new), {:controller => 'courses', :action => 'new'}, :class => 'icon icon-add') if User.current.allowed_to?(:add_course,nil, :global => true) %> <% end %> +      <% end %> +<%= link_to l(:label_course_join_student), join_private_courses_courses_path ,:remote => true, :class => 'icon icon-add' %>      <%= link_to l(:label_more), {:controller => 'courses', :action => 'index', :school_id => school_id} %> \ No newline at end of file diff --git a/app/views/welcome/course.html.erb b/app/views/welcome/course.html.erb index ea8963f7e..b9eec5014 100644 --- a/app/views/welcome/course.html.erb +++ b/app/views/welcome/course.html.erb @@ -127,6 +127,8 @@ <%= l(:label_issue_feedback_activities)%> <%= link_to l(:label_my_question), newbie_send_path, {:class => 'orangeButton idea_btn', :style => "color: #EEEEEE"} %> <%= link_to l(:label_my_feedback), suggestion_send_path, {:class => 'orangeButton idea_btn', :style => "color: #EEEEEE"} %> + + <%= link_to "更多>>", forums_path %> diff --git a/config/routes.rb b/config/routes.rb index 04b3cd1fc..3f3ef1b59 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -31,7 +31,6 @@ RedmineApp::Application.routes.draw do #match '/contests/:id/contestnotifications', :controller => 'contestnotifications', :action => 'index' resources :homework_users - resources :no_uses delete 'no_uses', :to => 'no_uses#delete' @@ -626,7 +625,12 @@ RedmineApp::Application.routes.draw do get 'member', :controller => 'courses', :action => 'member', :as => 'member' post 'finishcourse' post 'restartcourse' + end + collection do + match 'join_private_courses', :via => [:get, :post] + end + match '/member', :to => 'courses#member', :as => 'member', :via => :get resources :boards resources :files, :only => [:index, :new, :create] do