diff --git a/.gitignore b/.gitignore index daa8b3ace..cf96fa998 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /.project +/.idea /.bundle /config/database.yml diff --git a/Gemfile b/Gemfile index dd19b4435..63dd32df4 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,11 @@ source 'https://rubygems.org' +unless RUBY_PLATFORM =~ /w32/ + # unix-like only + gem 'iconv' + gem 'rubyzip' + gem 'zip-zip' +end gem "rails", "3.2.13" gem "jquery-rails", "~> 2.0.2" gem "i18n", "~> 0.6.0" diff --git a/app/assets/javascripts/softapplications.js b/app/assets/javascripts/softapplications.js new file mode 100644 index 000000000..dee720fac --- /dev/null +++ b/app/assets/javascripts/softapplications.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/javascripts/zipdown.js b/app/assets/javascripts/zipdown.js new file mode 100644 index 000000000..dee720fac --- /dev/null +++ b/app/assets/javascripts/zipdown.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/stylesheets/softapplications.css b/app/assets/stylesheets/softapplications.css new file mode 100644 index 000000000..afad32db0 --- /dev/null +++ b/app/assets/stylesheets/softapplications.css @@ -0,0 +1,4 @@ +/* + Place all the styles related to the matching controller here. + They will automatically be included in application.css. +*/ diff --git a/app/assets/stylesheets/zipdown.css b/app/assets/stylesheets/zipdown.css new file mode 100644 index 000000000..afad32db0 --- /dev/null +++ b/app/assets/stylesheets/zipdown.css @@ -0,0 +1,4 @@ +/* + Place all the styles related to the matching controller here. + They will automatically be included in application.css. +*/ diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 1c02326a7..6edd2a8c8 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -150,6 +150,7 @@ class AttachmentsController < ApplicationController ori = Attachment.find_by_id(attach_id) next if ori.blank? attach_copied_obj = ori.copy + attach_copied_obj.tag_list.add(ori.tag_list) # tag关联 attach_copied_obj.container = obj attach_copied_obj.created_on = Time.now attach_copied_obj.author_id = User.current.id @@ -174,7 +175,7 @@ private @attachment = Attachment.find(params[:id]) # Show 404 if the filename in the url is wrong raise ActiveRecord::RecordNotFound if params[:filename] && params[:filename] != @attachment.filename - unless @attachment.container_type == 'Bid' || @attachment.container_type == 'HomeworkAttach' || @attachment.container_type == 'Memo' + unless @attachment.container_type == 'Bid' || @attachment.container_type == 'HomeworkAttach' || @attachment.container_type == 'Memo' || @attachment.container_type == 'Softapplication' @project = @attachment.project end rescue ActiveRecord::RecordNotFound diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb index 2b0ed762c..3136c5838 100644 --- a/app/controllers/bids_controller.rb +++ b/app/controllers/bids_controller.rb @@ -472,22 +472,22 @@ class BidsController < ApplicationController # added by bai type ==1 需求,type==2 竞赛, type==3 作业 if @bid.reward_type == 1 - flash[:notice] = l(:label_bidding_succeed) + flash.now[:notice] = l(:label_bidding_succeed) elsif @bid.reward_type == 2 - flash[:notice] = l(:label_bidding_contest_succeed) + flash.now[:notice] = l(:label_bidding_contest_succeed) else @bid.reward_type == 3 - flash[:notice] = l(:label_bidding_homework_succeed) + flash.now[:notice] = l(:label_bidding_homework_succeed) end # end end else if @bid.reward_type == 3 - flash[:error] = l(:label_bidding_homework_fail) + flash.now[:error] = l(:label_bidding_homework_fail) else - flash[:error] = l(:label_bidding_fail) + flash.now[:error] = l(:label_bidding_fail) end end @bidding_project = @bid.biding_projects diff --git a/app/controllers/contests_controller.rb b/app/controllers/contests_controller.rb new file mode 100644 index 000000000..5511b15ca --- /dev/null +++ b/app/controllers/contests_controller.rb @@ -0,0 +1,494 @@ +# fq +# class BidsController < ApplicationController +class ContestsController < ApplicationController + menu_item :respond + menu_item :project, :only => :show_project + menu_item :application, :only => :show_softapplication + before_filter :find_contest, :only => [:show_contest, :show_project, :show_softapplication, :create,:destroy,:more,:back,:add,:add_softapplication,:new,:show_results, :set_reward, + :show_contest_project, :show_contest_user, :join_in_contest, :unjoin_in_contest, :new_join,:show_participator, :settings] + + # added by fq + before_filter :require_login, :only => [:join_in_contest, :unjoin_in_contest] + # end + before_filter :require_login,:only => [:set_reward, :destroy, :add, :new, ] + + helper :watchers + helper :attachments + include AttachmentsHelper + include ApplicationHelper + helper :projects + helper :words + + + def index + # @contests = Contest.visible + # @contests ||= [] + @offset, @limit = api_offset_and_limit({:limit => 10}) + @contests = Contest.visible + @contests = @contests.like(params[:name]) if params[:name].present? + @contest_count = @contests.count + @contest_pages = Paginator.new @contest_count, @limit, params['page'] + + @offset ||= @contest_pages.reverse_offset + if params[:contest_sort_type].present? + case params[:contest_sort_type] + when '0' + unless @offset == 0 + @contests = @contests.offset(@offset).limit(@limit).all.reverse + else + limit = @contest_count % @limit + limit = @limit if limit == 0 + @contests = @contests.offset(@offset).limit(limit).all.reverse + end + @s_state = 0 + when '1' + unless @offset == 0 + @contests = @contests.reorder('contests.commit').offset(@offset).limit(@limit).all.reverse + else + limit = @contest_count % @limit + limit = @limit if limit == 0 + @contests = @contests.reorder('contests.commit').offset(@offset).limit(limit).all.reverse + end + @s_state = 1 + when '2' + unless @offset == 0 + @contests = @contests.offset(@offset).limit(@limit).all.reverse + else + limit = @contest_count % @limit + limit = @limit if limit == 0 + @contests = @contests.offset(@offset).limit(@limit).all.reverse + end + @s_state = 0 + end + else + unless @offset == 0 + @contests = @contests.reorder('contests.commit').offset(@offset).limit(@limit).all.reverse + else + limit = @contest_count % @limit + limit = @limit if limit == 0 + @contests = @contests.reorder('contests.commit').offset(@offset).limit(limit).all.reverse + end + @s_state = 1 + end + end + + def show_contest + @user = @contest.author + @jours = @contest.journals_for_messages.order('created_on DESC') + @limit = 10 + @feedback_count = @jours.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + @jour = @jours[@offset, @limit] + @state = false + + respond_to do |format| + layout_file = 'base_newcontest' + format.html { + render :layout => layout_file + } + format.api + end + end + + def join_in_contest + if params[:contest_password] == @contest.password + JoinInCompetition.create(:user_id => User.current.id, :competition_id => @contest.id) + @state = 0 + else + @state = 1 + end + + respond_to do |format| + format.js { render :partial => 'set_join', :locals => {:user => User.current, :object_id => params[:id]} } + end + end + + def unjoin_in_contest + + joined = JoinInCompetition.where('competition_id = ? and user_id = ?', @contest.id, User.current.id) + + joined.each do |join| + join.delete + end + + respond_to do |format| + format.js { render :partial => 'set_join', :locals => {:user => User.current, :object_id => params[:id]} } + end + end + + def new_join + + + end + + def show_participator + render :layout => 'base_newcontest' + + end + + + def settings + if @contest.author.id == User.current.id + @contest = Contest.find(params[:id]) + render :layout => 'base_newcontest' + else + render_403 :message => :notice_not_contest_setting_authorized + end + end + + def show_contest_project + contests = Contest.where('parent_id = ?', @contest.id) + @projects = [] + for contest in contests + @projects += contest.contesting_projects + end + + respond_to do |format| + format.html { + render :layout => 'base_newcontest' + } + format.api + + end + end + + def show_contest_softapplication + contests = Contest.where('parent_id = ?', @contest.id) + @softapplications = [] + for contest in contests + @softapplications += contest.contesting_softapplications + end + + respond_to do |format| + format.html { + render :layout => 'base_newcontest' + } + format.api + + end + end + + def show_contest_user + contests = Contest.find(:all) + @users = [] + for contest in contests + for project in contest.projects + @users += project.users + end + end + + respond_to do |format| + format.html { + render :layout => 'base_newcontest' + } + format.api + + end + end + #显示参赛的项目 + def show_project + @membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current)) + @option = [] + # @contesting_project_count = @contesting_project_all.count + # @contesting_project_pages = Paginator.new @contesting_project_count, per_page_option, params['page'] + @membership.each do |membership| + unless(membership.project.project_type==1) + membership.member_roles.each{|role| + if(role.role_id == 3) + @option << membership.project + end + } + end + end + @user = @contest.author + @contesting_project = @contest.contesting_projects.all + if params[:student_id].present? + @temp = [] + @contesting_project.each do |pro| + if pro.project && pro.project.project_status + if /#{params[:student_id]}/ =~ pro.user.user_extensions.student_id + @temp << pro + end + end + @temp + end + @contesting_project = @temp + else + + @temp = [] + @contesting_project.each do |pro| + if pro.project && pro.project.project_status + @temp << pro + end + @temp + end + if @temp.size > 0 + @contesting_project = @temp.sort {|a,b| b.project.project_status.grade <=> a.project.project_status.grade} + end + end + @contesting_project = paginateHelper @contesting_project + respond_to do |format| + format.html { + render :layout => 'base_newcontest' + } + format.api + end + end + ############ + ##显示参赛的应用 + def show_softapplication + # @membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current)) + # @option = [] + + # @user = @contest.user + @softapplication = Softapplication.all + @contesting_softapplication = @contest.contesting_softapplications + + @contesting_softapplication = paginateHelper @contesting_softapplication, 10 + + # @temp = [] + # @softapplicationt.each do |pro| + # if pro.project && pro.project.project_status + # @temp << pro + # end + # @temp + + # if @temp.size > 0 + # @contesting_project = @temp.sort {|a,b| b.project.project_status.grade <=> a.project.project_status.grade} + # end + # end + # respond_to do |format| + # format.html { + # render :layout => 'base_newcontest' + # } + # format.api + # end +########################## + @contest = Contest.find_by_id(params[:id]) + respond_to do |format| + format.html { + render :layout => 'base_newcontest' + } + format.api + end + end + + ###添加已创建的参赛项目 + def add + project = Project.find(params[:contest]) + contest_message = params[:contest_for_save][:contest_message] + if ContestingProject.where("project_id = ? and contest_id = ?", project.id, @contest.id).size == 0 + if ContestingProject.cerate_contesting(@contest.id, project.id, contest_message) + flash.now[:notice] = l(:label_bidding_contest_succeed) + end + else + flash.now[:error] = l(:label_bidding_fail) + end + + @contesting_project = paginateHelper @contest.contesting_projects + + respond_to do |format| + + format.html { redirect_to :back } + format.js + end + end + ###添加已发布的参赛应用 + def add_softapplication + softapplication = Softapplication.find(params[:contest]) + contest_message = params[:contest_for_save][:contest_message] + if ContestingSoftapplication.where("softapplication_id = ? and contest_id = ?", softapplication.id, @contest.id).size == 0 + if ContestingSoftapplication.create_softapplication_contesting(@contest.id, softapplication.id, contest_message) + flash.now[:notice] = l(:label_release_add_contest_succeed) + end + else + flash.now[:error] = l(:label_add_contest_succeed_fail) + end + + @contesting_softapplication = paginateHelper @contest.contesting_softapplications + + respond_to do |format| + + format.html { redirect_to :back } + format.js + end + end + ## 新建留言 + def create + + if params[:contest_message][:message].size>0 + if params[:reference_content] + message = params[:contest_message][:message] + "\n" + params[:reference_content] + else + message = params[:contest_message][:message] + end + refer_user_id = params[:contest_message][:reference_user_id].to_i + @contest.add_jour(User.current, message, refer_user_id) + end + @user = @contest.author + @jours = @contest.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC') + @limit = 10 + @feedback_count = @jours.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + @jour = @jours[@offset, @limit] + @contest.set_commit(@feedback_count) + + respond_to do |format| + format.js + end + + end + + ##删除留言 + def destroy + @user = @contest.author + if User.current.admin? || User.current.id == @user.id + JournalsForMessage.delete_message(params[:object_id]) + end + @jours = @contest.journals_for_messages.reverse + @limit = 10 + @feedback_count = @jours.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + @jour = @jours[@offset, @limit] + + @contest.set_commit(@feedback_count) + respond_to do |format| + format.js + end + end + + ##引用留言 + def new + @jour = JournalsForMessage.find(params[:journal_id]) if params[:journal_id] + if @jour + user = @jour.user + text = @jour.notes + else + user = @contest.author + text = @contest.description + end + text = text.to_s.strip.gsub(%r{
((.|\s)*?)
}m, '[...]') + @content = "> #{ll(User.current.language, :text_user_wrote, user)}\n> " + @content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n" + @id = user.id + rescue ActiveRecord::RecordNotFound + render_404 + end + + ##新建竞赛 + def new_contest + @contest = Contest.new + @contest.safe_attributes = params[:contest] + end + + ##提交创建的竞赛 + def create_contest + @contest = Contest.new + @contest.name = params[:contest][:name] + @contest.description = params[:contest][:description] + @contest.budget = params[:contest][:budget] + @contest.deadline = params[:contest][:deadline] + @contest.password = params[:contest][:password] + @contest.author_id = User.current.id + @contest.commit = 0 + if @contest.save + unless @contest.watched_by?(User.current) + if @contest.add_watcher(User.current) + flash[:notice] = l(:label_contesting_created_succeed) + end + end + redirect_to show_contest_contest_path(@contest) + else + @contest.safe_attributes = params[:contest] + render :action => 'new_contest' + end + end + + ##更新竞赛配置信息 + def update_contest + @contest = Contest.find(params[:id]) + @contest.name = params[:contest][:name] + @contest.description = params[:contest][:description] + + @contest.budget = params[:contest][:budget] + @contest.deadline = params[:contest][:deadline] + @contest.password = params[:contest][:password] + @contest.author_id = User.current.id + @contest.commit = 0 + if @contest.save + unless @contest.watched_by?(User.current) + if @contest.add_watcher(User.current) + flash[:notice] = l(:label_contesting_updated_succeed) + end + end + redirect_to show_contest_contest_path(@contest) + + else + @contest.safe_attributes = params[:contest] + render :action => 'new_contest' + end + end + + def more + @jour = @contest.journals_for_messages + @jour.each_with_index {|j,i| j.indice = i+1} + @state = true + + respond_to do |format| + format.html { redirect_to :back } + format.js + #format.api { render_api_ok } + end + end + + def back + @jour = @contest.journals_for_messages + @jour.each_with_index {|j,i| j.indice = i+1} + @state = false + + respond_to do |format| + format.html { redirect_to :back } + format.js + #format.api { render_api_ok } + end + end + + def set_reward + @b_p = nil + @contesting_project_id = nil + + if params[:set_reward][:reward]&&((User.current.id==@contest.author_id)||User.current.admin) + # @contest_id = params[:id] + @contesting_project_id = params[:set_reward][:b_id] #[:b_id]??? + @b_p = ContestingProject.find_by_id(@contesting_project_id) + + # 把字段存进表中 + @b_p.update_reward(params[:set_reward][:reward].to_s) + end + + respond_to do |format| + format.js + end + end + + + def manage + + end + + private + + def find_contest + if params[:id] + @contest = Contest.find(params[:id]) + @user = @contest.author + end + rescue + render_404 + end + +end + diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index 35e27a87f..86a20d3eb 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -33,8 +33,8 @@ class FilesController < ApplicationController 'size' => "#{Attachment.table_name}.filesize", 'downloads' => "#{Attachment.table_name}.downloads" - @containers = [ Project.includes(:attachments).reorder("attachments.created_on DESC").find(@project.id)] #modify by Long Jun - @containers += @project.versions.includes(:attachments).reorder("created_on DESC").all.sort + @containers = [ Project.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").find(@project.id)] #modify by Long Jun + @containers += @project.versions.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").all.sort if @project.project_type == 1 render :layout => 'base_courses' diff --git a/app/controllers/forums_controller.rb b/app/controllers/forums_controller.rb index be1a331e0..991af0154 100644 --- a/app/controllers/forums_controller.rb +++ b/app/controllers/forums_controller.rb @@ -11,6 +11,42 @@ class ForumsController < ApplicationController include SortHelper PageLimit = 20 + + def create_memo + @memo = Memo.new(params[:memo]) + @memo.forum_id = @forum.id + @memo.author_id = User.current.id + + @memo.save_attachments(params[:attachments] || (params[:memo] && params[:memo][:uploads])) + + respond_to do |format| + if @memo.save + format.html { redirect_to (forum_memo_path(@forum, (@memo.parent_id.nil? ? @memo : @memo.parent_id))), notice: "#{l :label_memo_create_succ}" } + format.json { render json: @memo, status: :created, location: @memo } + else + sort_init 'updated_at', 'desc' + sort_update 'created_at' => "#{Memo.table_name}.created_at", + 'replies' => "#{Memo.table_name}.replies_count", + 'updated_at' => "COALESCE (last_replies_memos.created_at, #{Memo.table_name}.created_at)" + + @topic_count = @forum.topics.count + @topic_pages = Paginator.new @topic_count, per_page_option, params['page'] + @memos = @forum.topics. + reorder("#{Memo.table_name}.sticky DESC"). + includes(:last_reply). + limit(@topic_pages.per_page). + offset(@topic_pages.offset). + order(sort_clause). + preload(:author, {:last_reply => :author}). + all + + flash.now[:error] = "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" + # back_error_page = @memo.parent_id.nil? ? forum_path(@forum) : forum_memo_path(@forum, @memo.parent_id) + format.html { render action: :show, layout: 'base_forums' }#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" } + format.json { render json: @memo.errors, status: :unprocessable_entity } + end + end + end def index @offset, @limit = api_offset_and_limit({:limit => 10}) diff --git a/app/controllers/memos_controller.rb b/app/controllers/memos_controller.rb index a21086da3..f6ad48801 100644 --- a/app/controllers/memos_controller.rb +++ b/app/controllers/memos_controller.rb @@ -47,7 +47,30 @@ class MemosController < ApplicationController else flash[:error] = "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" # back_error_page = @memo.parent_id.nil? ? forum_path(@forum) : forum_memo_path(@forum, @memo.parent_id) - format.html { redirect_to back_memo_or_forum_url}#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" } + pre_count = REPLIES_PER_PAGE + + @memo_new = @memo.dup + @memo = @memo.root # 取出楼主,防止输入帖子id让回复作为主贴显示 + @memo.update_column(:viewed_count, (@memo.viewed_count.to_i + 1)) + + page = params[:page] + if params[:r] && page.nil? + offset = @memo.children.where("#{Memo.table_name}.id < ?", params[:r].to_i).count + page = 1 + offset / pre_count + else + + end + @reply_count = @memo.children.count + @reply_pages = Paginator.new @reply_count, pre_count, page + @replies = @memo.children. + includes(:author, :attachments). + reorder("#{Memo.table_name}.created_at ASC"). + limit(@reply_pages.per_page). + offset(@reply_pages.offset). + all + + format.html { render action: :show }#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" } + # format.html { redirect_to back_memo_or_forum_url}#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" } format.json { render json: @memo.errors, status: :unprocessable_entity } end end @@ -76,7 +99,7 @@ class MemosController < ApplicationController offset(@reply_pages.offset). all - @mome_new = Memo.new + @memo_new = Memo.new # @memo = Memo.find_by_id(params[:id]) diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb index d05a1f59c..c469c72ee 100644 --- a/app/controllers/my_controller.rb +++ b/app/controllers/my_controller.rb @@ -87,7 +87,7 @@ class MyController < ApplicationController se = UserExtensions.new se.user_id = @user.id if params[:occupation] - se.occupation = params[:occupation] + se.school_id = params[:occupation] end se.gender = params[:gender] @@ -109,7 +109,7 @@ class MyController < ApplicationController else se = @user.user_extensions if params[:occupation] - se.occupation = params[:occupation] + se.school_id = params[:occupation] end se.gender = params[:gender] diff --git a/app/controllers/praise_tread_controller.rb b/app/controllers/praise_tread_controller.rb index 0fdb1b2c6..53df54e9f 100644 --- a/app/controllers/praise_tread_controller.rb +++ b/app/controllers/praise_tread_controller.rb @@ -69,6 +69,8 @@ class PraiseTreadController < ApplicationController @obj = Project.find_by_id(id) when 'Bid' @obj = Bid.find_by_id(id) + when 'Contest' + @obj = Contest.find_by_id(id) end return @obj end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index d3481e2ae..3f771bf77 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -68,6 +68,8 @@ class ProjectsController < ApplicationController helper :bids include BidsHelper + helper :contests + include ContestsHelper helper :sort include SortHelper helper :custom_fields @@ -218,8 +220,10 @@ class ProjectsController < ApplicationController def search #modified by nie - @projects = Project.visible - @projects = @projects.visible.where('project_type = ?', params[:project_type]).like(params[:name]) if params[:name].present? + project_type = params[:project_type] + projects_all = (project_type.eql? Project::ProjectType_project) ? Project.project_entities : Project.course_entities + @projects = projects_all.visible + @projects = @projects.visible.like(params[:name]) if params[:name].present? @offset, @limit = api_offset_and_limit({:limit => 10}) @project_count = @projects.visible.count @project_pages = Paginator.new @project_count, @limit, params['page'] @@ -346,7 +350,7 @@ class ProjectsController < ApplicationController end def new - @project_type = params[:project_type] + @project_type = params[:project_type] ||= params[:course] @issue_custom_fields = IssueCustomField.sorted.all @trackers = Tracker.sorted.all @@ -360,9 +364,9 @@ class ProjectsController < ApplicationController @course_tag = params[:course] @course = Course.new @course.safe_attributes = params[:course] - else - render_404 - return -1 + else # default Project + @project = Project.new + @project.safe_attributes = params[:project] end render :layout => 'base' end @@ -388,7 +392,7 @@ class ProjectsController < ApplicationController # added by bai @course.term = params[:term] @course.time = params[:time] - @course.school_id = params[:school] + @course.school_id = params[:occupation] @course.setup_time = params[:setup_time] @course.endup_time = params[:endup_time] @course.class_period = params[:class_period] @@ -567,6 +571,7 @@ class ProjectsController < ApplicationController "show_messages" => true, "show_news" => true, "show_bids" => true, + "show_contests" => true, "show_journals_for_messages" => true } @date_to ||= Date.today + 1 @@ -849,8 +854,7 @@ class ProjectsController < ApplicationController def select_project_layout project = Project.find_by_id(params[:id]) - project ||= @project - project ||= @course + project ||= @project ||= @course ||= params[:course] ||= params[:project_type] (project.try(:project_type) == Project::ProjectType_project) ? 'base_projects' : 'base_courses' end diff --git a/app/controllers/school_controller.rb b/app/controllers/school_controller.rb index 05a65771b..749491b69 100644 --- a/app/controllers/school_controller.rb +++ b/app/controllers/school_controller.rb @@ -1,2 +1,15 @@ class SchoolController < ApplicationController + def get_options + @school = School.where("province = ?", params[:province]) + p = params[:province] + ##@school = School.all + options = "" + + @school.each do |s| + options << "" + end + + render :text => options + + end end diff --git a/app/controllers/softapplications_controller.rb b/app/controllers/softapplications_controller.rb new file mode 100644 index 000000000..9ac62f928 --- /dev/null +++ b/app/controllers/softapplications_controller.rb @@ -0,0 +1,194 @@ +class SoftapplicationsController < ApplicationController + # GET /softapplications + # GET /softapplications.json + def index + @softapplications = Softapplication.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @softapplications } + end + end + + # GET /softapplications/1 + # GET /softapplications/1.json + def show + @softapplication = Softapplication.find(params[:id]) + @jours = @softapplication.journals_for_messages.order('created_on DESC') + @image_results = [] + @softapplication.attachments.each do |f| + f.image? ? @image_results << f : @image_results + end + @app_items = [] + @softapplication.attachments.each do |f| + f.pack? ? @app_items << f : @app_items + end + @limit = 10 + @feedback_count = @jours.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + @jour = @jours[@offset, @limit] + @state = false + respond_to do |format| + format.html # show.html.erb + format.json { render json: @softapplication } + end + end + + # GET /softapplications/new + # GET /softapplications/new.json + def new + @softapplication = Softapplication.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @softapplication } + end + end + + # GET /softapplications/1/edit + def edit + @softapplication = Softapplication.find(params[:id]) + end + + # POST /softapplications + # POST /softapplications.json + def create + @softapplication = Softapplication.new(params[:softapplication]) + @softapplication.user = User.current + @softapplication.save_attachments(params[:attachments]) + respond_to do |format| + if @softapplication.save + format.html { redirect_to @softapplication, notice: 'Softapplication was successfully created.' } + format.json { render json: @softapplication, status: :created, location: @softapplication } + else + format.html { render action: "new" } + format.json { render json: @softapplication.errors, status: :unprocessable_entity } + end + end + end + + # PUT /softapplications/1 + # PUT /softapplications/1.json + def update + @softapplication = Softapplication.find(params[:id]) + + respond_to do |format| + if @softapplication.update_attributes(params[:softapplication]) + format.html { redirect_to @softapplication, notice: 'Softapplication was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: "edit" } + format.json { render json: @softapplication.errors, status: :unprocessable_entity } + end + end + end + + + def add_attach + @softapplication = Softapplication.find(params[:id]) + @softapplication.save_attachments(params[:attachments]) + end + + # DELETE /softapplications/1 + # DELETE /softapplications/1.json + def destroy + @softapplication = Softapplication.find(params[:id]) + @softapplication.destroy + + respond_to do |format| + format.html { redirect_to softapplications_url } + format.json { head :no_content } + end + end + #应用评价涉及到的方法 + def new_message + @jour = JournalsForMessage.find(params[:journal_id]) if params[:journal_id] + if @jour + user = @jour.user + text = @jour.notes + else + user = @softapplication.user + text = @softapplication.description + end + text = text.to_s.strip.gsub(%r{
((.|\s)*?)
}m, '[...]') + @content = "> #{ll(User.current.language, :text_user_wrote, user)}\n> " + @content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n" + @id = user.id + rescue ActiveRecord::RecordNotFound + render_404 + end + #新建评价 + def create_message + + if params[:softapplication_message][:message].size>0 + if params[:reference_content] + message = params[:softapplication_message][:message] + "\n" + params[:reference_content] + else + message = params[:softapplication_message][:message] + end + refer_user_id = params[:softapplication_message][:reference_user_id].to_i + @softapplication = Softapplication.find(params[:id]) + @softapplication.add_jour(User.current, message, refer_user_id) + + end + + @user = @softapplication.user + @jours = @softapplication.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC') + + @limit = 10 + @feedback_count = @jours.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + @jour = @jours[@offset, @limit] + #@softapplication.set_commit(@feedback_count) + + respond_to do |format| + format.js + end + + end + + ##删除评价 + def destroy_message + @user = @softapplication.user + if User.current.admin? || User.current.id == @user.id + JournalsForMessage.delete_message(params[:object_id]) + end + @jours = @softapplication.journals_for_messages.reverse + @limit = 10 + @feedback_count = @jours.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + @jour = @jours[@offset, @limit] + + @softapplication.set_commit(@feedback_count) + respond_to do |format| + format.js + end + end + # + def more + @jour = @softapplication.journals_for_messages + @jour.each_with_index {|j,i| j.indice = i+1} + @state = true + + respond_to do |format| + format.html { redirect_to :back } + format.js + #format.api { render_api_ok } + end + end + # + def back + @jour = @softapplication.journals_for_messages + @jour.each_with_index {|j,i| j.indice = i+1} + @state = false + + respond_to do |format| + format.html { redirect_to :back } + format.js + #format.api { render_api_ok } + end + end +end diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 0182f2121..18cfcb3f3 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -11,6 +11,7 @@ class TagsController < ApplicationController include BidsHelper include ForumsHelper include AttachmentsHelper + include ContestsHelper include ActsAsTaggableOn::TagsHelper helper :projects include TagsHelper @@ -30,7 +31,7 @@ class TagsController < ApplicationController # 最后是2个过滤何种数据,显示结果的控制参数params[:obj_id],params[:object_falg] # 0代表删除tag 1代表增加tag def index - + @obj_id = params[:obj_id] @obj_flag = params[:object_flag] @@ -44,28 +45,29 @@ class TagsController < ApplicationController @tag = params[:tag] @selected_tags = params[:current_selected_tags] @selected_tags = @selected_tags.nil? ? Array.new : @selected_tags - + case @do_what when '0' then - @selected_tags.delete @tag #数组中删除有多方式 可以改用shift,pop + @selected_tags.delete @tag #数组中删除有多方式 可以改用shift,pop when '1' then - # 判断是否已存在该tag 主要用来处理分页的情况 - unless @selected_tags.include? @tag - @selected_tags << @tag - end + # 判断是否已存在该tag 主要用来处理分页的情况 + unless @selected_tags.include? @tag + @selected_tags << @tag + end end end - - @users_tags_num,@projects_tags_num,@issues_tags_num,@bids_tags_num, + + @users_tags_num,@projects_tags_num,@issues_tags_num,@bids_tags_num,@contests_tags_num, @forum_tags_num, @attachments_tags_num = get_tags_size - + # 获取搜索结果 @obj,@obj_pages,@results_count,@users_results, @projects_results, @issues_results, @bids_results, @forums_results, - @attachments_results = refresh_results(@obj_id,@obj_flag,@selected_tags) + @attachments_results, + @contests_tags = refresh_results(@obj_id,@obj_flag,@selected_tags) # 这里是做tag推荐用的, 用来生产推荐的tags unless @obj.nil? @@ -74,13 +76,13 @@ class TagsController < ApplicationController # @selected_tags.each do |i| # @tags.delete(i) # end - @related_tags = @tags + @related_tags = @tags else return end end - + # 增加已选的tag def add_tag @tag = params[:tag] @@ -90,11 +92,13 @@ class TagsController < ApplicationController $related_tags.delete(@tag) # 获取搜索结果 - @obj,@obj_pages,@users_results, + @obj,@obj_pages,@results_count,@users_results, @projects_results, @issues_results, @bids_results, - @forums_results = refresh_results(@obj_id,@show_flag) + @forums_results, + @attachments_results, + @contests_results = refresh_results(@obj_id,@show_flag) end # 删除已选tag @@ -110,13 +114,15 @@ class TagsController < ApplicationController @projects_results, @issues_results, @bids_results, - @forums_results = refresh_results(@obj_id,@show_flag) + @forums_results, + @attachments_results, + @contests_results = refresh_results(@obj_id,@show_flag) end def show_all - @tags = ActsAsTaggableOn::Tag.find(:all) + @tags = ActsAsTaggableOn::Tag.find(:all) end - + # 完全从数据库删除tag # 这种删除方式是针对 印有该 tag所有对象来做删除的 # 这样是从整个系统数据库中把该tag删除了 @@ -148,24 +154,24 @@ class TagsController < ApplicationController # if can_remove_tag?(User.current,@taggable_id,@taggable_type) - @taggings = ActsAsTaggableOn::Tagging.find_by_tag_id_and_taggable_id_and_taggable_type(@tag_id,@taggable_id,@taggable_type) - - unless @taggings.nil? - @taggings.delete - end + @taggings = ActsAsTaggableOn::Tagging.find_by_tag_id_and_taggable_id_and_taggable_type(@tag_id,@taggable_id,@taggable_type) + + unless @taggings.nil? + @taggings.delete + end # 是否还有其他记录 引用了 tag_id - @tagging = ActsAsTaggableOn::Tagging.find_by_tag_id(@tag_id) + @tagging = ActsAsTaggableOn::Tagging.find_by_tag_id(@tag_id) # 如果taggings表中记录已经不存在 ,那么检查tags表 作删除动作 - if @tagging.nil? - @tag = ActsAsTaggableOn::Tag.find_by_id(@tag_id) - @tag.delete unless @tag.nil? - end + if @tagging.nil? + @tag = ActsAsTaggableOn::Tag.find_by_id(@tag_id) + @tag.delete unless @tag.nil? + end # end end end -private + private # 这里用来刷新搜索结果的区域 # 函数的返回值 前2字段用来处理获取其他tag和分页 ,另外4个返回值为过滤结果 def refresh_results(obj_id,obj_flag,selected_tags) @@ -173,11 +179,13 @@ private @projects_results = nil @issues_results = nil @bids_results = nil + @contests_results = nil @forums_results = nil attachments_results = nil @obj_pages = nil @obj = nil - + @result = nil + # 这里为了提高系统的响应速度 把搜索结果放到case中去了 case obj_flag when '1' then @@ -197,11 +205,27 @@ private @obj_pages,@forums_results,@results_count = for_pagination(get_forums_by_tag(selected_tags)) when '6' @obj = Attachment.find_by_id(obj_id) - @obj_pages, attachments_results, @results_count = for_pagination(get_attachments_by_tag(selected_tags)) + + # modifed by Long Jun + # this is used to find the attachments that came from the same project and tagged with the same tag. + @result = get_attachments_by_project_tag(selected_tags, @obj) + @obj_pages, attachments_results, @results_count = for_pagination(@result) + when '7' + @obj = Contest.find_by_id(obj_id) + @obj_pages,@contests_results,@results_count = for_pagination(get_contests_by_tag(selected_tags)) else - @obj = nil + @obj = nil end - return @obj,@obj_pages,@results_count,@users_results,@projects_results,@issues_results,@bids_results,@forums_results, attachments_results + return [@obj, + @obj_pages, + @results_count, + @users_results, + @projects_results, + @issues_results, + @bids_results, + @forums_results, + attachments_results, + @contests_results] end def for_pagination(results) @@ -221,7 +245,8 @@ private @bids_tags_num = Bid.tag_counts.size forum_tags_num = Forum.tag_counts.size attachment_tags_num = Attachment.tag_counts.size - return @users_tags_num,@projects_tags_num,@issues_tags_num,@bids_tags_num, forum_tags_num, attachment_tags_num + @contests_tags_num = Contest.tag_counts.size + return @users_tags_num,@projects_tags_num,@issues_tags_num,@bids_tags_num, forum_tags_num, attachment_tags_num, @contests_tags_num end # 通过数字 来转换出对象的类型 @@ -242,6 +267,8 @@ private return 'Forum' when '6' return 'Attachment' + when '7' + return 'Contest' else render_error :message => e.message return diff --git a/app/controllers/test_controller.rb b/app/controllers/test_controller.rb index 46ae016ed..cb28f4e66 100644 --- a/app/controllers/test_controller.rb +++ b/app/controllers/test_controller.rb @@ -1,160 +1,56 @@ class TestController < ApplicationController - - before_filter :find_user, :only => [:new, :create, :destroy] - - -def index - # @users = User.where('status = ?', 1) - # for user in @users - # if user.user_extensions.nil? - # UserExtensions.create(:user_id => user.id) - # end - # end - - # @message = Message.all - # @message.each do |m| - # Activity.create(:act_id => m.id, :act_type => 'Message', :user_id => m.author_id) - # end - # activity = Message.all - # activity += News.all - # activity += Journal.all - # activity += Issue.all - # activity += Bid.all - # @activity = activity.sort {|x,y| x.created_on <=> y.created_on} - # @activity.each do |act| - # if act.instance_of?(Bid) - # act.acts << Activity.new(:user_id => act.author_id) - # elsif act.instance_of?(News) - # act.acts << Activity.new(:user_id => act.author_id) - # elsif act.instance_of?(Message) - # act.acts << Activity.new(:user_id => act.author_id) - # elsif act.instance_of?(Journal) - # act.acts << Activity.new(:user_id => act.user_id) - # elsif act.instance_of?(Issue) - # act.acts << Activity.new(:user_id => act.author_id) - # elsif act.instance_of?(Changeset) - # act.acts << Activity.new(:user_id => act.user_id) - # end - # end - - - #@watchers_of_projects = WatchersOfProjects.new - #@watchers_of_projects.user_id = 1 - #@watchers_of_projects.project_id = 1 - #@watchers_of_projects.save - - #测试user表与watch_project表之间的关联是否成功 - #@user = User.find(params[:id]) - #@watch_table = @user.watch_projects.to_a.first - - #@watch = WatchProject.find(1) - #@watcher = @watch.user - - #测试通过watch_project表使user表可以访问project表 - #@watch_project = @user.projects - #watch_project_path(@watch) - #@project = Project.find(11) - #project_path(@project) - #@member = @project.users - #@watched = @project.watch_projects - #@issue = Issue.find(6) - - - #user_path(@user) - #issue_path(@issue) - - #@watcher2=WatchProject.where("#{WatchProject.table_name}.project_id = ?" , temp) - - #测试where语句 - #temp = 1 - #@watcher2=WatchProject.where(:project_id => temp).to_a - - #测试新建记录 - #@watch_new = WatchProject.new - #@watch_new.user_id = 4 - #@watch_new.project_id = 1 - #@watch_new.save - #@id = params[:id] - - #测试添加关注项目功能 - #WatchersOfProjects.watch(3,10) - #Project.find(50) - #测试统计关注该项目的用户数 - #@count = WatchersOfProjects.watcher_count(@watch_project.to_a.first) - #测试取消关注功能 - #WatchersOfProjects.watch_cancle(10,35) - - #测试关注用户功能 - #测试关注功能 - #WatchersOfUser.watch_user(7,7) - #测试取消关注功能 - #WatchersOfUser.cancel_watching_user(1,2) - #测试查找关注的人功能 - #@user = WatchersOfUser.find_users(1) - #测试查找被关注的人功能 - #@user = WatchersOfUser.find_watchers(10) - - #测试用户留言功能 - #测试留言功能 - # MessagesForUser.leave_message(User.current.id, 6, 'test') - #测试查找留言功能 - #@message_table = MessagesForUser.find_message(3) - #测试查找留言用户功能 - #@messager=@message_table.first.find_messager - - - #测试需求 - #测试新建需求 - #bids = Bid.creat_bids(10000, '2013.7.25', 'test', 'sfsadgfag') - #测试修改需求 - #bids.update_bids(10, '2014.7.222', 'asdf') - #测试删除需求 - # bids = Bid.where('id = ?', 5) - # bids.each do |bid| - # bid.delete_bids - # end + def zip + homeworks_attach_path = [] + homework_id = params[:homework_id] + bid = Bid.find_by_id(homework_id) + + bid.homeworks.each do |homeattach| + homeattach.attachments.each do |attach| + length = attach.storage_path.length + homeworks_attach_path << attach.diskfile.to_s.slice((length+1)..-1) + end end + @paths = homeworks_attach_path + zipfile = ziping homeworks_attach_path + send_file zipfile, :filename => bid.name, + :type => detect_content_type(zipfile) + rescue Errno::ENOENT => e + logger.error "[Errno::ENOENT] ===> #{e}" + + end + + def courselist + @courses = Project.course_entities + end + + def ziping files_path + ic = Iconv.new('GBK//IGNORE', 'UTF-8//IGNORE') + folder = "#{Rails.root}/files" + input_filename = files_path + zipfile_name = "#{Rails.root}/tmp/archiveZip/archive_#{Time.now.to_i}.zip" - # ##########留言功能 message by fq - # def new - # end -# - # def create -# - # if params[:user_search].size>0 - # unless params[:user_id].nil? - # message = params[:user_search] - # MessagesForUser.leave_message(User.current.id, params[:user_id], message) - # @message = MessagesForUser.find_message(@user.id) - # end - # end -# - # respond_to do |format| - # # format.html { redirect_to_referer_or {render :text => 'Watcher added.', :layout => true}} - # format.js - # #format.api { render_api_ok } - # end - # end -# - # def destroy - # MessagesForUser.delete_message(params[:object_id]) - # @message = MessagesForUser.find_message(@user.id) - # respond_to do |format| - # format.html { redirect_to :back } - # format.js - # #format.api { render_api_ok } - # end - # end + Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name)) + Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile| + input_filename.each do |filename| + zipfile.add(ic.iconv(filename_to_real(File.basename(filename))), folder + '/' + filename) + end + zipfile.get_output_stream("ReadMe"){ |os| + os.write "Homeworks" + } + end + zipfile_name + end + + def detect_content_type(name) + content_type = Redmine::MimeType.of(name) + content_type.to_s + end - # private -# - # def find_user - # if params[:user_id] - # @user = User.find(params[:user_id]) - # end - # rescue - # render_404 - # end - #######end of message + def filename_to_real name + attach = Attachment.find_by_disk_filename(name) + attach.filename + end + + end \ No newline at end of file diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 2142b6603..5d59a44fc 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -23,19 +23,20 @@ class UsersController < ApplicationController menu_item :user_homework, :only => :user_homeworks menu_item :user_project, :only => [:user_projects, :watch_projects] menu_item :requirement_focus, :only => :watch_bids + menu_item :requirement_focus, :only => :watch_contests menu_item :user_newfeedback, :only => :user_newfeedback #Ended by young - before_filter :require_admin, :except => [:show, :index, :search, :tag_save, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info, + before_filter :require_admin, :except => [:show, :index, :search, :tag_save, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :watch_contests, :info, :user_watchlist, :user_fanslist,:update, :user_courses, :user_homeworks, :watch_projects, :show_score, :topic_score_index, :project_score_index, :activity_score_index, :influence_score_index, :score_index] #edit has been deleted by huang, 2013-9-23 before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :user_courses, :user_homeworks, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments, - :watch_bids, :info, :watch_projects, :show_score, :topic_score_index, :project_score_index, + :watch_bids, :watch_contests, :info, :watch_projects, :show_score, :topic_score_index, :project_score_index, :activity_score_index, :influence_score_index, :score_index] accept_api_auth :index, :show, :create, :update, :destroy,:tag_save @@ -116,6 +117,28 @@ class UsersController < ApplicationController format.api end end + +#new add by linchun + def watch_contests + @bids = Contest.watched_by(@user) + @offset, @limit = api_offset_and_limit({:limit => 10}) + @contest_count = @contests.count + @contest_pages = Paginator.new @contest_count, @limit, params['page'] + @offset ||= @contest_pages.reverse_offset + unless @offset == 0 + @contest = @contests.offset(@offset).limit(@limit).all.reverse + else + limit = @bid_count % @limit + @contest = @contests.offset(@offset).limit(limit).all.reverse + end + + respond_to do |format| + format.html { + render :layout => 'base_users' + } + format.api + end + end # added by fq def user_activities @@ -633,6 +656,8 @@ class UsersController < ApplicationController @obj = Forum.find_by_id(@obj_id) when '6' @obj = Attachment.find_by_id(@obj_id) + when '7' then + @obj = Contest.find_by_id(@obj_id) else @obj = nil end diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 31168595e..d566c9b86 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -27,6 +27,7 @@ class WelcomeController < ApplicationController @projectHidenCount = @projectCount - @projectPublicCount @developerCount = User.developer.count + @allUsercount = User.count end def robots @@ -80,7 +81,7 @@ class WelcomeController < ApplicationController def entry_select_contest if request.original_url.match(/contest\.trustie\.net/) contest - render :contest, layout: false + render :contest return 0 end end diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index be1e31776..c83c123fc 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -190,6 +190,10 @@ class WordsController < ApplicationController obj = User.find_by_id(obj_id) elsif ( referer.match(/bids/) || referer.match(/calls/) ) obj = Bid.find_by_id(obj_id) + elsif ( referer.match(/contests/) || referer.match(/contests/) ) #new added + obj = Contest.find_by_id(obj_id) + elsif ( referer.match(/softapplications/) || referer.match(/softapplications/) ) #new added + obj = Softapplication.find_by_id(obj_id) else raise 'create reply obj unknow type.' end @@ -204,6 +208,10 @@ class WordsController < ApplicationController Project.add_new_jour(nil, nil, obj.id, options) elsif obj.kind_of? Bid obj.add_jour(nil, nil, nil, options) + elsif obj.kind_of? Contest + obj.add_jour(nil, nil, obj.id, options) #new added + elsif obj.kind_of? Softapplication + obj.add_jour(nil, nil, obj.id, options) #new added else raise 'create reply obj unknow type.' end diff --git a/app/controllers/zipdown_controller.rb b/app/controllers/zipdown_controller.rb new file mode 100644 index 000000000..57078a436 --- /dev/null +++ b/app/controllers/zipdown_controller.rb @@ -0,0 +1,115 @@ +class ZipdownController < ApplicationController + SAVE_FOLDER = "#{Rails.root}/files" + OUTPUT_FOLDER = "#{Rails.root}/tmp/archiveZip" + + def assort + obj_class = params[:obj_class] + obj_id = params[:obj_id] + obj = obj_class.constantize.find(obj_id) + zipfile = nil + case obj.class.to_s.to_sym + when :Bid + zipfile = zip_bid obj + else + logger.error "[ZipDown#assort] ===> #{obj.class.to_s.to_sym} unKown !!" + end + send_file zipfile, :filename => obj.name, :type => detect_content_type(zipfile) if zipfile + + #rescue NameError, ActiveRecord::RecordNotFound => e + #logger.error "[ZipDown] ===> #{e}" + #@error = e + end + + private + + def zip_bid(bid) + # Todo: User Access Controll + + homeattaches = bid.homeworks + # 得到每一个人所有文件打包的zip文件 + # 并将每一个人的zip打包为一个并返回路径 + user_zip_paths = homeattaches.map do |homeattach| + zip_homework_by_user homeattach + end + zipping "#{Time.now.to_i}_#{bid.name}.zip", user_zip_paths, OUTPUT_FOLDER + + #@paths = homeworks_attach_path + #zipfile = ziping homeworks_attach_path + #send_file zipfile, :filename => bid.name, + # :type => detect_content_type(zipfile) + #rescue Errno::ENOENT => e + # logger.error "[Errno::ENOENT] ===> #{e}" + # @error = e + end + + def zip_homework_by_user(homeattach) + homeworks_attach_path = [] + # 需要将所有homework.attachments遍历加入zip + # 并且返回zip路径 + user_attaches_paths = homeattach.attachments.each do |attach| + #length = attach.storage_path.length + homeworks_attach_path << attach.diskfile#.to_s.slice((length+1)..-1) + end + zipping "#{Time.now.to_i}_#{homeattach.user.name.to_s}.zip", homeworks_attach_path, OUTPUT_FOLDER, true + end + + + def zipping(zip_name_refer, files_paths, output_path, is_attachment=false) + # 输入待打包的文件列表,已经打包文件定位到ouput_path + ic = Iconv.new('GBK//IGNORE', 'UTF-8//IGNORE') + input_filename = files_paths + + rename_zipfile = zip_name_refer ||= "archive_#{Time.now.to_i}.zip" + zipfile_name = "#{output_path}/#{rename_zipfile}" + + Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name)) + + Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile| + input_filename.each do |filename| + rename_file = Time.now.to_i.to_s+ ic.iconv( (File.basename(filename)) ).to_s + rename_file = ic.iconv( filename_to_real( File.basename(filename))).to_s if is_attachment + + zipfile.add(rename_file, filename) + end + zipfile.get_output_stream('ReadMe') do |os| + os.write 'Homeworks' + end + end + zipfile_name + rescue Errno => e + logger.error "[zipdown#zipping] ===> #{e}" + @error = e + end + + #def ziping files_path + # ic = Iconv.new('GBK//IGNORE', 'UTF-8//IGNORE') + # folder = SaveFolder + # input_filename = files_path + # zipfile_name = "#{OutputFolder}/archive_#{Time.now.to_i}.zip" + # + # Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name)) + # Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile| + # input_filename.each do |filename| + # zipfile.add(ic.iconv(filename_to_real(File.basename(filename))), folder + '/' + filename) + # end + # zipfile.get_output_stream("ReadMe") { |os| + # os.write "Homeworks" + # } + # end + # zipfile_name + #rescue Errno => e + # logger.error "[zipdown#zipping] ===> #{e}" + # @error = e + #end + + def detect_content_type(name) + content_type = Redmine::MimeType.of(name) + content_type.to_s + end + + def filename_to_real(name) + attach = Attachment.find_by_disk_filename(name) + attach.filename + end + +end diff --git a/app/helpers/activities_helper.rb b/app/helpers/activities_helper.rb index a5aa247d5..c15d89e0c 100644 --- a/app/helpers/activities_helper.rb +++ b/app/helpers/activities_helper.rb @@ -24,10 +24,10 @@ module ActivitiesHelper events.sort {|x, y| y.event_datetime <=> x.event_datetime}.each do |event| if group_events = events_by_group.delete(event.event_group) group_events.sort {|x, y| y.event_datetime <=> x.event_datetime}.each_with_index do |e, i| - sorted_events << [e, i > 0] + sorted_events << [e, i > 0] unless e.event_description.nil? end end end - sorted_events + sorted_events end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 0ad4404d9..1d639726f 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -111,6 +111,14 @@ module ApplicationHelper link_to text, url, html_options end + def link_to_attachment_img(attachment, options={}) + text = options.delete(:text) || attachment.filename + route_method = options.delete(:download) ? :download_named_attachment_path : :named_attachment_path + html_options = options.slice!(:only_path) + url = send(route_method, attachment, attachment.filename, options) + image_tag url, html_options + end + # Generates a link to a SCM revision # Options: # * :text - Link text (default to the formatted revision) @@ -1402,6 +1410,71 @@ module ApplicationHelper end html.html_safe end + +#display contest project + def show_more_contest_project?(contest) + if contest.projects.where('is_public = 1').count > 12 + return true + else + return false + end + end + + def show_more_contest_softapplication?(contest) + if contest.softapplications.where('is_public = 1').count > 12 + return true + else + return false + end + end + + def show_contest_project(bid) + html = '' + if contest.projects.where('is_public = 1').count == 0 + html << (content_tag "p", l(:label_no_bid_project), :class => "font_lighter") + else + contest.projects.where('is_public = 1').take(12).each do |project| + html << (link_to image_tag(url_to_avatar(project), :class => "avatar", :title => project.name), project_path(project), :class => "avatar") + end + end + html.html_safe + end + + def show_contest_project(contest) + html = '' + if contest.projects.where('is_public = 1').count == 0 + html << (content_tag "p", l(:label_no_bid_project), :class => "font_lighter") + else + contest.projects.where('is_public = 1').take(12).each do |project| + html << (link_to image_tag(url_to_avatar(project), :class => "avatar", :title => project.name), project_path(project), :class => "avatar") + end + end + html.html_safe + end + + def show_contest_softapplication(contest) + html = '' + if contest.softapplications.where('is_public = 1').count == 0 + html << (content_tag "p", l(:label_no_contest_softapplication), :class => "font_lighter") + else + contest.softapplications.where('is_public = 1').take(12).each do |softapplication| + html << (link_to image_tag(url_to_avatar(project), :class => "avatar", :title => project.name), project_path(project), :class => "avatar") + end + end + html.html_safe + end + + def show_contest_fans_picture(obj) + html = '' + if obj.watcher_users.count == 0 + html << (content_tag "span", l(:label_project_no_follow)) + else + obj.watcher_users.take(12).each do |user| + html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => user.name) + end + end + html.html_safe + end #display fans picture def show_more_fans?(obj) @@ -1494,13 +1567,14 @@ module ApplicationHelper home_link = link_to l(:field_homepage), {:controller => 'welcome', :action => 'index'} main_course_link = link_to l(:label_course_practice), {:controller => 'welcome', :action => 'index', :host => Setting.course_domain} main_project_link = link_to l(:label_project_deposit), {:controller => 'welcome', :action => 'index', :host => Setting.project_domain} - + main_contest_link = link_to l(:label_contest_innovate), {:controller => 'welcome', :action => 'index', :host => Setting.contest_domain} + course_all_course_link = link_to l(:label_course_all), {:controller => 'projects', :action => 'course', :project_type => 1, :host => Setting.course_domain} course_teacher_all_link = link_to l(:label_teacher_all), {:controller => 'users', :action => 'index', :role => 'teacher', :host => Setting.course_domain} courses_link = link_to l(:label_course_practice), {:controller => 'projects', :action => 'course', :project_type => 1, :host => Setting.course_domain} projects_link = link_to l(:label_project_deposit), {:controller => 'projects', :action => 'index', :project_type => 0, :host => Setting.project_domain} users_link = link_to l(:label_software_user), {:controller => 'users', :action => 'index', :host => Setting.user_domain} - contest_link = link_to l(:label_contest_innovate), {:controller => 'bids', :action => 'contest', :project_type => 1 , :host => Setting.contest_domain} + contest_link = link_to l(:label_contest_innovate), {:controller => 'contests', :action => 'index'} bids_link = link_to l(:label_requirement_enterprise), {:controller => 'bids', :action => 'index'} forum_link = link_to l(:label_project_module_forums), {:controller => "forums", :action => "index"} stores_link = link_to l(:label_stores_index), {:controller => 'stores', :action=> 'index'} @@ -1513,6 +1587,7 @@ module ApplicationHelper nav_list.push(main_project_link) if @nav_dispaly_main_project_label nav_list.push(main_course_link) if @nav_dispaly_main_course_label + nav_list.push(main_contest_link) if @nav_dispaly_main_contest_label nav_list.push(courses_link) if @nav_dispaly_course_label nav_list.push(projects_link) if @nav_dispaly_project_label @@ -1528,5 +1603,9 @@ module ApplicationHelper end content_tag :ul, content_li.html_safe end + + def current_user + User.current + end end diff --git a/app/helpers/attachments_helper.rb b/app/helpers/attachments_helper.rb index 495c05085..7259e9d10 100644 --- a/app/helpers/attachments_helper.rb +++ b/app/helpers/attachments_helper.rb @@ -76,6 +76,22 @@ module AttachmentsHelper Attachment.tagged_with(tag_name).order('created_on desc') end + # this method is used to get all attachments that from one project and tagged one tag + # added by Long Jun + def get_attachments_by_project_tag(tag_name, obj) + @project_id =nil + if obj.container_type == 'Version' + @project_id = Version.find(obj.container_id).project_id + + elsif obj.container_type == 'Project' + @project_id = obj.container_id + + end + Attachment.tagged_with(tag_name).order('created_on desc').where("(container_id = :project_id and container_type = 'Project') or + (container_id in (select id from versions where project_id =:project_id) and container_type = 'Version')", {:project_id => @project_id}) + end + + def render_attachments_for_new_project(project, limit=nil) # 查询条件 params[:q] ||= "" diff --git a/app/helpers/contests_helper.rb b/app/helpers/contests_helper.rb new file mode 100644 index 000000000..cb4d6a0f7 --- /dev/null +++ b/app/helpers/contests_helper.rb @@ -0,0 +1,172 @@ +#enconding:utf-8 +# fq +module ContestsHelper + + def render_notes(contest, journal, options={}) + content = '' + removable = User.current == journal.user || User.current == contest.author + links = [] + if !journal.notes.blank? + links << link_to(image_tag('comment.png'), + {:controller => 'contests', :action => 'new', :id => contest, :journal_id => journal}, + :remote => true, + :method => 'post', + :title => l(:button_quote)) if options[:reply_links] + if removable + url = {:controller => 'contests', + :action => 'destroy', + :object_id => journal, + :id => contest} + links << ' ' + links << link_to(image_tag('delete.png'), url, + :remote => true, :method => 'delete', :class => "delete", :title => l(:button_delete)) + end + end + content << content_tag('div', links.join(' ').html_safe, :class => 'contextual') unless links.empty? + content << textilizable(journal.notes) + css_classes = "wiki" + content_tag('div', content.html_safe, :id => "journal-#{journal.id}-notes", :class => css_classes) + end + + def link_to_in_place_notes_editor(text, field_id, url, options={}) + onclick = "$.ajax({url: '#{url_for(url)}', type: 'get'}); return false;" + link_to text, '#', options.merge(:onclick => onclick) + end + + # this method is used to get all projects that tagged one tag + # added by william + def get_contests_by_tag(tag_name) + Contest.tagged_with(tag_name).order('updated_on desc') + end + + #added by huang + def sort_contest_enterprise(state, project_type) + content = ''.html_safe + case state + when 0 + content << content_tag('li', link_to(l(:label_sort_by_active), calls_path(:contest_sort_type => '1', :project_type => project_type))) + content << content_tag('li', link_to(l(:label_sort_by_time), calls_path(:contest_sort_type => '0', :project_type => project_type), :class=>"selected"), :class=>"selected") + + when 1 + content << content_tag('li', link_to(l(:label_sort_by_active), calls_path(:contest_sort_type => '1', :project_type => project_type), :class=>"selected"), :class=>"selected") + content << content_tag('li', link_to(l(:label_sort_by_time), calls_path(:contest_sort_type => '0', :project_type => project_type))) + end + content = content_tag('ul', content) + content_tag('div', content, :class => "tabs_enterprise") + end + #end + + + #huang + def sort_contest(state) + content = ''.html_safe + case state + when 0 + content << content_tag('li', link_to(l(:label_sort_by_active), {controller: 'contests', action: 'index' ,:contest_sort_type => '1'})) + content << content_tag('li', link_to(l(:label_sort_by_time), {controller: 'contests', action: 'index' ,:contest_sort_type => '0'}, :class=>"selected"), :class=>"selected") + + when 1 + content << content_tag('li', link_to(l(:label_sort_by_active), {controller: 'contests', action: 'index' ,:contest_sort_type => '1'}, :class=>"selected"), :class=>"selected") + content << content_tag('li', link_to(l(:label_sort_by_time), {controller: 'contests', action: 'index' ,:contest_sort_type => '0'})) + end + content = content_tag('ul', content) + content_tag('div', content, :class => "tabs") + end + #end + + # def course_options_for_select(courses) + # # + # html = '' + # courses.each do |course| + # html << "" + # end + # html.html_safe + # end + + + # used to get the reward and handle the value which can be used to display in views + # added by william + def get_prize(c_project) + c_project.get_reward + end + + def count_contest_project + contests = Contest.find(:id) + @projects = [] + for contest in contests + @projects += contest.contesting_projects + end + @projects.count + end + + def count_contest_softapplication + contests = Contest.find(:id) + @softapplications = [] + for contest in contests + @softapplications += contest.contesting_softapplications + end + @projects.count + end + + + def count_contest_user + contests = Contest.find(:id) + @users = [] + for contest in contests + for project in contest.projects + @users += project.users + end + end + @users.count + end + + def count_contest_softapplication_user + contests = Contest.find(:id) + @users = [] + for contest in contests + for project in contest.softapplications + @users += softapplication.users + end + end + @users.count + end + def im_watching_student_id? contest + people = [] + people << contest.author + # case bid.reward_type # 天煞的bid分了三用途,里面各种hasmany还不定能用! + # when 1 + # when 2 + # bid.join_in_contests.each do |jic| + # people << jic.user + # end + # when 3 + # people += bid.courses.first.users.to_a + # else + # raise 'bids_helper: unknow bid type' # 出了错看这里!不知道的抛异常,省的找不到出错的地方! + # end + + contest.join_in_contests.each do |jic| + people << jic.user + end + people.include?(User.current) + end + + def select_option_helper option + tmp = Hash.new + option.each do |project| + tmp[project.name] = project.identifier + end + tmp + end + def select_option_app_helper options + tmp = Hash.new + options.each do |option| + tmp[option.name] = option.id + end + tmp + end + + +end \ No newline at end of file diff --git a/app/helpers/softapplications_helper.rb b/app/helpers/softapplications_helper.rb new file mode 100644 index 000000000..e3cb6410d --- /dev/null +++ b/app/helpers/softapplications_helper.rb @@ -0,0 +1,2 @@ +module SoftapplicationsHelper +end diff --git a/app/helpers/tags_helper.rb b/app/helpers/tags_helper.rb index c4ee5273d..ba2470fe9 100644 --- a/app/helpers/tags_helper.rb +++ b/app/helpers/tags_helper.rb @@ -5,15 +5,17 @@ module TagsHelper @obj = nil case obj_type when '1' - @obj = User.find_by_id(obj_id) + @obj = User.find_by_id(obj_id) when '2' @obj = Project.find_by_id(obj_id) when '3' @obj = Issue.find_by_id(obj_id) when '4' - @obj = Bid.find_by_id(obj_id) + @obj = Bid.find_by_id(obj_id) when '6' @obj = Attachment.find_by_id(obj_id) + when '7' + @obj= Contest.find_by_id(obj_id) else raise Exception, '[TagsHelper] ===> tag type unknow.' end @@ -40,6 +42,10 @@ module TagsHelper if user.id == obj_id @result = true end + when '7' + if user.id == obj_id + @result = true + end end return @result end diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index e05ef6ebd..fcaf63604 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -30,7 +30,7 @@ module WatchersHelper objects = Array.wrap(objects) watched = objects.any? {|object| object.watched_by?(user)} - @watch_flag = (objects.first.instance_of?(User) or objects.first.instance_of?(Project) or (objects.first.instance_of?(Bid))) + @watch_flag = (objects.first.instance_of?(User) or objects.first.instance_of?(Project) or objects.first.instance_of?(Contest) or (objects.first.instance_of?(Bid))) css = @watch_flag ? ([watcher_css(objects), watched ? 'icon ' : 'icon '].join(' ') << options[0].to_s) : ([watcher_css(objects), watched ? 'icon icon-fav ' : 'icon icon-fav-off '].join(' ') << options[0].to_s) @@ -46,6 +46,27 @@ module WatchersHelper link_to text, url, :remote => true, :method => method, :class => css end + ############## added by linchun + def new_watcher_link(objects, user, options=[]) + return '' unless user && user.logged? + objects = Array.wrap(objects) + + watched = objects.any? {|object| object.watched_by?(user)} + @watch_flag = (objects.first.instance_of?(User) or objects.first.instance_of?(Project) or (objects.first.instance_of?(Contest))) + css = @watch_flag ? ([watcher_css(objects), watched ? 'icon ' : 'icon '].join(' ') << options[0].to_s) : + ([watcher_css(objects), watched ? 'icon icon-fav ' : 'icon icon-fav-off '].join(' ') << options[0].to_s) + + text = @watch_flag ? + (watched ? l(:button_unfollow) : l(:button_follow)) : (watched ? l(:button_unwatch) : l(:button_watch)) + + url = watch_path( + :object_type => objects.first.class.to_s.underscore, + :object_id => (objects.size == 1 ? objects.first.id : objects.map(&:id).sort) + ) + method = watched ? 'delete' : 'post' + + link_to text, url, :remote => true, :method => method, :class => css + end # added by fq, modify nyan # Somebody may use option params def join_in_course(course, user, options=[]) @@ -93,8 +114,40 @@ module WatchersHelper end end end - - + ##new add by linchun + def join_in_contest(contest, user, options=[]) + return '' unless user && user.logged? + joined = user.join_in_contest?(contest) + text = joined ? l(:label_exit_contest) : l(:label_join_contest) + url_t = join_in_contest_path(:id => contest.id) + url_f = try_join_in_contest_path(:id => contest.id) + # url = join_in_contest_path(:id => contest.id) + method = joined ? 'delete' : 'post' + if joined + link_to text, url_t, :remote => true, :method => method, :id => "#{contest.id}", :confirm => l(:text_are_you_sure_out), :class => []+options + else + link_to text, url_f, :remote => true, :method => method, :id => "#{contest.id}", :class => []+options + end + end + + # liuwanwei 的需求, 新竞赛 + # 新路由命名为 competition + def join_in_competition(competition, user) + return '' unless user && user.logged? + joined = JoinInCompetition.where('competition_id = ? AND user_id = ?', competition.id, user.id).count>0 + text = joined ? l(:label_exit_contest) : l(:label_join_contest) + url_f = new_join_contests_path(:id => competition.id) + url_t = unjoin_in_contest_contests_path(:id => competition.id) + method = joined ? 'delete' : 'post' + if joined + # 退出竞赛用 + link_to text, url_t, :remote => true, :method => method, :id => "#{competition.id}", :confirm => l(:text_are_you_sure_out) + else + # 加入竞赛用 + link_to text, url_f, :remote => true, :method => method, :id => "#{competition.id}" + end + end + # Returns the css class used to identify watch links for a given +object+ def watcher_css(objects) objects = Array.wrap(objects) diff --git a/app/helpers/welcome_helper.rb b/app/helpers/welcome_helper.rb index 9d36f2bdf..9970ee9c6 100644 --- a/app/helpers/welcome_helper.rb +++ b/app/helpers/welcome_helper.rb @@ -97,10 +97,21 @@ module WelcomeHelper sort_bid_by_hot end - def find_all_hot_contest - sort_contest_by_hot + def find_all_hot_contest limit=10 + # Contest.reorder("created_on DESC").all.take limit + mix_bid = [] + mix_bid += Contest.reorder("created_on DESC").take(limit).to_a + mix_bid += Bid.visible.where('reward_type = ?', 2).reorder('bids.created_on desc').take(limit).to_a + mix_bid.sort do |older, newer| + newer.created_on - older.created_on + end + mix_bid.take limit end + def find_all_hot_softapplication limit=10 + Softapplication.reorder("created_at DESC").all.take limit + end + def cal_memos_count event return nil if event.parent_id event.replies_count @@ -220,6 +231,10 @@ module WelcomeHelper def sort_contest_by_hot sort_bid_by_hot_rails 2 end +#new added by linchun + def sort_contest_by_time + sort_bid_by_time 2 + end #取得所有活动 def find_all_activities limit=6 @@ -274,6 +289,10 @@ module WelcomeHelper Bid.visible.where('reward_type = ?', reward_type).reorder('bids.commit desc').limit(limit) end + def sort_bid_by_time reward_type, limit = 10 + Bid.visible.where('reward_type = ?', reward_type).reorder('bids.created_on desc').limit(limit) + end + def find_all_event_type event case event.event_type when 'news' diff --git a/app/helpers/zipdown_helper.rb b/app/helpers/zipdown_helper.rb new file mode 100644 index 000000000..d0b9a4880 --- /dev/null +++ b/app/helpers/zipdown_helper.rb @@ -0,0 +1,2 @@ +module ZipdownHelper +end diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 768be578f..919760ee3 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -21,6 +21,7 @@ require "fileutils" class Attachment < ActiveRecord::Base belongs_to :container, :polymorphic => true belongs_to :project, foreign_key: 'container_id', conditions: "attachments.container_type = 'Project'" + belongs_to :softapplication, foreign_key: 'container_id', conditions: "attachments.container_type = 'Softapplication'" belongs_to :author, :class_name => "User", :foreign_key => "author_id" validates_presence_of :filename, :author @@ -33,7 +34,7 @@ class Attachment < ActiveRecord::Base acts_as_event :title => :filename, :url => Proc.new {|o| {:controller => 'attachments', :action => 'download', :id => o.id, :filename => o.filename}} - acts_as_activity_provider :type => 'files', + acts_as_activity_provider :type => 'files', :permission => :view_files, :author_key => :author_id, :find_options => {:select => "#{Attachment.table_name}.*", @@ -179,6 +180,10 @@ class Attachment < ActiveRecord::Base !!(self.filename =~ /\.(bmp|gif|jpg|jpe|jpeg|png)$/i) end + def pack? + !!(self.filename =~ /\.(zip|rar|tar|gz)$/i) + end + def thumbnailable? image? end diff --git a/app/models/contest.rb b/app/models/contest.rb new file mode 100644 index 000000000..edc252574 --- /dev/null +++ b/app/models/contest.rb @@ -0,0 +1,119 @@ +class Contest < ActiveRecord::Base + attr_accessible :author_id, :budget, :commit, :deadline, :description, :name, :password + include Redmine::SafeAttributes + + belongs_to :author, :class_name => 'User', :foreign_key => :author_id + has_many :contesting_projects, :dependent => :destroy + has_many :projects, :through => :contesting_projects + has_many :contesting_softapplications, :dependent => :destroy + has_many :softapplications, :through => :contesting_softapplications + has_many :projects_member, :class_name => 'User', :through => :projects + has_many :journals_for_messages, :as => :jour, :dependent => :destroy + has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy + has_many :join_in_competitions, foreign_key: 'competition_id', :dependent => :destroy + has_many :join_in_contests, class_name: 'JoinInCompetition', foreign_key: 'competition_id', :dependent => :destroy + + + + acts_as_attachable + + NAME_LENGTH_LIMIT = 60 + DESCRIPTION_LENGTH_LIMIT = 250 + + validates_length_of :name, :maximum => NAME_LENGTH_LIMIT + validates_length_of :description, :maximum => DESCRIPTION_LENGTH_LIMIT + validates_presence_of :author_id, :name, :deadline + validates_format_of :deadline, :with => /^[\d]{4}[-][\d]{1,2}[-][\d]{1,2}$/ + validates_format_of :budget, :with => /^(\d+)$|^(\d+).([0-9]{2})|^(\d+).([0-9]{1})$/ + validate :validate_user + after_create :act_as_activity + + scope :visible, lambda {|*args| + nil + } + + scope :like, lambda {|arg| + if arg.blank? + where(nil) + else + pattern = "%#{arg.to_s.strip.downcase}%" + where("LOWER(id) LIKE :p OR LOWER(name) LIKE :p OR LOWER(description) LIKE :p", :p => pattern) + end + } + + acts_as_watchable + acts_as_taggable + + acts_as_event :title => Proc.new {|o| "#{l(:label_requirement)} ##{o.id}: #{o.name}" }, + :description => :description, + :author => :author, + :url => Proc.new {|o| {:controller => 'contests', :action => 'show_contest', :id => o.id}} + + acts_as_activity_provider :find_options => {:include => [:projects, :author]}, + :author_key => :author_id + + safe_attributes 'name', + 'description', + 'budget', + 'deadline', + 'password' + + + def add_jour(user, notes, reference_user_id = 0, options = {}) + if options.count == 0 + self.journals_for_messages << JournalsForMessage.new(:user_id => user.id, :notes => notes, :reply_id => reference_user_id) + else + jfm = self.journals_for_messages.build(options) + jfm.save + jfm + end + end + + def self.creat_contests(budget, deadline, name, description=nil) + self.create(:author_id => User.current.id, :budget => budget, + :deadline => deadline, :name => name, :description => description, :commit => 0) + end + + def update_contests(budget, deadline, name, description=nil) + if(User.current.id == self.author_id) + self.name = name + self.budget = budget + self.deadline = deadline + self.description = description + self.save + end + end + + def delete_contests + unless self.nil? + if User.current.id == self.author_id + self.destroy + end + end + end + + def set_commit(commit) + self.update_attribute(:commit, commit) + end + + private + + def validate_user + errors.add :author_id, :invalid if author.nil? || !author.active? + end + + + def act_as_activity + self.acts << Activity.new(:user_id => self.author_id) + end + + def validate_contest_manager(user_id) + unless user_id.nil? + if self.author_id == user_id + return true + else + return false + end + end + end +end diff --git a/app/models/contesting_project.rb b/app/models/contesting_project.rb new file mode 100644 index 000000000..cb2a7fe39 --- /dev/null +++ b/app/models/contesting_project.rb @@ -0,0 +1,52 @@ +class ContestingProject < ActiveRecord::Base + attr_accessible :contest_id, :description, :project_id, :user_id, :reward + + belongs_to :contest + belongs_to :project + belongs_to :user + + DESCRIPTION_LENGTH_LIMIT = 500 + + validates_length_of :description, :maximum => DESCRIPTION_LENGTH_LIMIT + validates_presence_of :user_id, :contest_id, :project_id + validate :validate_user + validate :validate_contest + validate :validate_project + validates_uniqueness_of :contest_id, :scope => :project_id + + def self.cerate_contesting(contest_id, project_id, description = nil) + self.create(:user_id => User.current.id, :contest_id => contest_id, + :project_id => project_id, :description => description) + end + + + def update_reward(which) + self.update_attribute(:reward,which) + end + + def get_reward + self.reward + end + + def cancel_contesting + unless self.nil? + if User.current.id == self.user_id + self.destroy + end + end + end + + private + + def validate_user + errors.add :user_id, :invalid if user.nil? || !user.active? + end + + def validate_contest + errors.add :contest_id, :invalid if contest.nil? + end + + def validate_project + errors.add :project_id, :invalid if project.nil? + end +end diff --git a/app/models/contesting_softapplication.rb b/app/models/contesting_softapplication.rb new file mode 100644 index 000000000..93aea2658 --- /dev/null +++ b/app/models/contesting_softapplication.rb @@ -0,0 +1,15 @@ + +class ContestingSoftapplication < ActiveRecord::Base + attr_accessible :contest_id, :description, :softapplication_id, :user_id + + belongs_to :contest + belongs_to :softapplication + belongs_to :user + + + def self.create_softapplication_contesting(contest_id, softapplication_id, description = nil) + self.create(:user_id => User.current.id, :contest_id => contest_id, + :softapplication_id => softapplication_id, :description => description) + end + +end diff --git a/app/models/homework_attach.rb b/app/models/homework_attach.rb index 5ce08a0a8..fb743ab5c 100644 --- a/app/models/homework_attach.rb +++ b/app/models/homework_attach.rb @@ -1,5 +1,5 @@ class HomeworkAttach < ActiveRecord::Base - include Redmine::SafeAttributes + include Redmine::SafeAttributes belongs_to :user belongs_to :bid diff --git a/app/models/join_in_competition.rb b/app/models/join_in_competition.rb new file mode 100644 index 000000000..707dccf07 --- /dev/null +++ b/app/models/join_in_competition.rb @@ -0,0 +1,10 @@ +# 新竞赛参加关系表 +class JoinInCompetition < ActiveRecord::Base + attr_accessible :competition_id, :user_id + belongs_to :user, :class_name => "User", :foreign_key => :user_id + belongs_to :competition, :class_name => "Contest", :foreign_key => :competition_id + + validates :user_id, presence: true + validates :competition_id, presence: true + +end diff --git a/app/models/memo.rb b/app/models/memo.rb index 2e4ddb810..a0581d945 100644 --- a/app/models/memo.rb +++ b/app/models/memo.rb @@ -4,9 +4,10 @@ class Memo < ActiveRecord::Base belongs_to :author, :class_name => "User", :foreign_key => 'author_id' validates_presence_of :author_id, :forum_id, :subject - #validates :content, presence: true + # 若是主题帖,则内容可以是空 + validates :content, presence: true, if: Proc.new{|o| !o.parent_id.nil? } validates_length_of :subject, maximum: 50 - #validates_length_of :content, maximum: 3072 + validates_length_of :content, maximum: 3072 validate :cannot_reply_to_locked_topic, :on => :create acts_as_tree :counter_cache => :replies_count, :order => "#{Memo.table_name}.created_at ASC" diff --git a/app/models/project.rb b/app/models/project.rb index 3fe868792..e0cc27b3b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -55,6 +55,7 @@ class Project < ActiveRecord::Base has_many :changesets, :through => :repository #added by xianbo for delete biding_project has_many :biding_projects, :dependent => :destroy + has_many :contesting_projects, :dependent => :destroy #ended by xianbo # added by fq has_many :journals_for_messages, :as => :jour, :dependent => :destroy diff --git a/app/models/softapplication.rb b/app/models/softapplication.rb new file mode 100644 index 000000000..71caf059c --- /dev/null +++ b/app/models/softapplication.rb @@ -0,0 +1,24 @@ +class Softapplication < ActiveRecord::Base + attr_accessible :android_min_version_available, :app_type_id, :app_type_name, :description, :name, :user_id, :contest_id, :application_developers + acts_as_attachable + + has_many :journals_for_messages, :as => :jour, :dependent => :destroy + has_many :contesting_softapplications, :dependent => :destroy + belongs_to :user + belongs_to :contest + + def add_jour(user, notes, reference_user_id = 0, options = {}) + if options.count == 0 + self.journals_for_messages << JournalsForMessage.new(:user_id => user.id, :notes => notes, :reply_id => reference_user_id) + else + jfm = self.journals_for_messages.build(options) + jfm.save + jfm + end + end + def set_commit(commit) + self.update_attribute(:commit, commit) + end + + +end diff --git a/app/models/user.rb b/app/models/user.rb index 5d8413009..b1991b061 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -78,11 +78,17 @@ class User < Principal belongs_to :ucourse, :class_name => 'Course', :foreign_key => :id #huang ## added by xianbo for delete has_many :biding_projects, :dependent => :destroy + has_many :contesting_projects, :dependent => :destroy + has_many :contesting_softapplications, :dependent => :destroy + belongs_to :softapplication, :foreign_key => 'id', :dependent => :destroy ##ended by xianbo #####fq has_many :jours, :class_name => 'JournalsForMessage', :dependent => :destroy + has_many :journals_messages, :class_name => 'JournalsForMessage', :foreign_key => "user_id", :dependent => :destroy has_many :bids, :foreign_key => 'author_id', :dependent => :destroy + has_many :contests, :foreign_key => 'author_id', :dependent => :destroy + has_many :softapplications, :foreign_key => 'user_id', :dependent => :destroy has_many :journals_for_messages, :as => :jour, :dependent => :destroy has_many :new_jours, :as => :jour, :class_name => 'JournalsForMessage', :conditions => "status=1" has_many :journal_replies, :dependent => :destroy diff --git a/app/models/user_extensions.rb b/app/models/user_extensions.rb index ea1548be9..7b35b16b4 100644 --- a/app/models/user_extensions.rb +++ b/app/models/user_extensions.rb @@ -8,6 +8,7 @@ =end class UserExtensions < ActiveRecord::Base belongs_to :user + belongs_to :school, :class_name => 'School', :foreign_key => :school_id attr_accessible :user_id,:birthday,:brief_introduction,:gender,:location,:occupation,:work_experience,:zip_code,:identity, :technical_title,:student_id TEACHER = 0 STUDENT = 1 diff --git a/app/views/attachments/_app_link.html.erb b/app/views/attachments/_app_link.html.erb new file mode 100644 index 000000000..ecef4dda3 --- /dev/null +++ b/app/views/attachments/_app_link.html.erb @@ -0,0 +1,10 @@ + +<% for attachment in attachments %><%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true -%> + <% if attachment.is_text? %> + <%= link_to image_tag('magnifier.png'), + :controller => 'attachments', :action => 'show', + :id => attachment, :filename => attachment.filename %> + <% end %> + <%= h(" - #{attachment.description}") unless attachment.description.blank? %> + (<%= number_to_human_size attachment.filesize %>) + <% end -%> diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb index 546792d50..f34a0e4e7 100644 --- a/app/views/attachments/_form.html.erb +++ b/app/views/attachments/_form.html.erb @@ -12,11 +12,14 @@ <% end %> +<%= button_tag "浏览", :type=>"button", :onclick=>"_file.click()" %> + <%= file_field_tag 'attachments[dummy][file]', - :id => nil, + :id => '_file', :class => 'file_selector', :multiple => true, :onchange => 'addInputFiles(this);', + :style => 'display:none', :data => { :max_file_size => Setting.attachment_max_size.to_i.kilobytes, :max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)), @@ -24,6 +27,7 @@ :upload_path => uploads_path(:format => 'js'), :description_placeholder => l(:label_optional_description) } %> +<%= l(:label_no_file_uploaded)%> (<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>) diff --git a/app/views/attachments/destroy.js.erb b/app/views/attachments/destroy.js.erb index 3cfb5845f..04cd4e02d 100644 --- a/app/views/attachments/destroy.js.erb +++ b/app/views/attachments/destroy.js.erb @@ -1 +1,8 @@ $('#attachments_<%= j params[:attachment_id] %>').remove(); +var count=$('#attachments_fields>span').length; +if(count<=0){ + $("#upload_file_count").text("未上传文件"); + $(".remove_all").remove(); +}else{ + $("#upload_file_count").html("已上传"+""+count+""+"个文件"); +} \ No newline at end of file diff --git a/app/views/attachments/upload.js.erb b/app/views/attachments/upload.js.erb index 4761f4635..82b79bb63 100644 --- a/app/views/attachments/upload.js.erb +++ b/app/views/attachments/upload.js.erb @@ -8,7 +8,7 @@ fileSpan.find('a.remove-upload') .attr({ "data-remote": true, "data-method": 'delete', - href: '<%= j attachment_path(@attachment, :attachment_id => params[:attachment_id], :format => 'js') %>' + "href": '<%= j attachment_path(@attachment, :attachment_id => params[:attachment_id], :format => 'js') %>' }) .off('click'); <% end %> diff --git a/app/views/bids/_bid_homework_show.html.erb b/app/views/bids/_bid_homework_show.html.erb index b44d72b5f..7c8e1468c 100644 --- a/app/views/bids/_bid_homework_show.html.erb +++ b/app/views/bids/_bid_homework_show.html.erb @@ -60,7 +60,10 @@ <% end %> - <%= bid.description %> + + <%#= bid.description %> + <%= textilizable bid, :description %> + <%= l(:label_create_time) %> :  <%=format_time bid.created_on %> <%= l(:field_deadline) %> :  <%=bid.deadline %> diff --git a/app/views/bids/_homework_list.html.erb b/app/views/bids/_homework_list.html.erb index bae83f14a..8f87a6b37 100644 --- a/app/views/bids/_homework_list.html.erb +++ b/app/views/bids/_homework_list.html.erb @@ -14,6 +14,10 @@ <% end %> <% display_id = im_watching_student_id? @bid%> +<%= link_to "作业打包下载", zipdown_assort_path(obj_class: @bid.class, obj_id: @bid), remote: false, class: "button_submit button_submit_font_white", style: "margin: 5px 10px;display: inline-block;" if( + User.current.admin? || + !(User.current.roles_for_project(@bid.courses.first).map(&:id) & ([7,9])).empty? ) || + (Rails.env.development?) %> <% @homework_list.each do |homework|%> <% if homework.attachments.any?%> @@ -22,7 +26,12 @@ --> <% end %> - <% else %>

<%= l(:label_no_data) %>

<% end %> + <% other_formats_links do |f| %> <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> diff --git a/app/views/contests/_contest_list.html.erb b/app/views/contests/_contest_list.html.erb new file mode 100644 index 000000000..fb3ddd115 --- /dev/null +++ b/app/views/contests/_contest_list.html.erb @@ -0,0 +1,50 @@ + +<% contests.each do |contest|%> +
- + + + + +
<%= link_to homework.user, user_path(homework.user)%> 提交了作业 <%= link_to homework.user, user_path(homework.user)%> 已提交 + <% if Time.parse(@bid.deadline.to_s) < Time.parse(homework.attachments[0].created_on.to_s) %> + 迟交 + <% end %> +
  diff --git a/app/views/bids/_list_projects.html.erb b/app/views/bids/_list_projects.html.erb index 304bab413..41c5ab9d1 100644 --- a/app/views/bids/_list_projects.html.erb +++ b/app/views/bids/_list_projects.html.erb @@ -147,6 +147,13 @@ <%= format_time b_project.created_at%>
+ <% if Time.parse(@bid.deadline.to_s) < Time.parse(b_project.created_at.to_s) %> + 迟交 + <% end %> +
diff --git a/app/views/bids/new_submit_homework.html.erb b/app/views/bids/new_submit_homework.html.erb index dd06af643..eb89740a8 100644 --- a/app/views/bids/new_submit_homework.html.erb +++ b/app/views/bids/new_submit_homework.html.erb @@ -8,8 +8,9 @@

<%= render :partial => 'attachments/form' %>

+ <%= submit_tag l(:button_create) %> + <%= link_to (t :button_back), project_for_bid_homework_path %> - <%= submit_tag l(:button_create) %> - <%= link_to (t :button_back), project_for_bid_homework_path %> + <% end %> \ No newline at end of file diff --git a/app/views/bids/show.html.erb b/app/views/bids/show.html.erb index 46b05c292..aaa45c37a 100644 --- a/app/views/bids/show.html.erb +++ b/app/views/bids/show.html.erb @@ -14,7 +14,7 @@ <% else %> <% end %>
- <%= @bid.description %> + <%= textilizable(@bid, :description) %> <% if @bid.attachments.any?%> <% options = {:author => true} %> <%= render :partial => 'attachments/links', :locals => {:attachments => @bid.attachments, :options => options} %> diff --git a/app/views/bids/show_project.html.erb b/app/views/bids/show_project.html.erb index 4b4d7040b..d22ddded6 100644 --- a/app/views/bids/show_project.html.erb +++ b/app/views/bids/show_project.html.erb @@ -1,6 +1,6 @@ -<% if @bid.homework_type == 1%> +<% if @bid.homework_type == Bid::HomeworkFile %> <%= render :partial => 'homework' %> <% else %> diff --git a/app/views/boards/show.html.erb b/app/views/boards/show.html.erb index f518120ef..849519d0d 100644 --- a/app/views/boards/show.html.erb +++ b/app/views/boards/show.html.erb @@ -91,13 +91,13 @@
+ + + + +
<%= link_to(image_tag(url_to_avatar(contest.author), :class => 'avatar'), user_path(contest.author), :class => "avatar") %> + + + + + + + + + + + +
<%= link_to(contest.author, user_path(contest.author), :class => 'bid_user') %>:  <%= link_to(contest.name, show_contest_contest_path(contest), :class => 'bid_path', :target => "_blank") %>
+ + + + + + + + + +
+ <%= l(:label_contests_reward_method) %><%= contest.budget%> +
<%= l(:label_contest_project, :count => contest.contesting_projects.count) %>(<%= link_to(contest.contesting_projects.count, show_project_contest_path(contest), :target => "_blank") %>) + <%= l(:label_contest_softapplication, :count => contest.contesting_softapplications.count) %>(<%= link_to(contest.contesting_softapplications.count, show_softapplication_contest_path(contest), :target => "_blank") %>) + +
<%= l :label_create_time %>: <%= format_time contest.created_on %>
+
+ + + + +
+
+
+<% end %> + + diff --git a/app/views/contests/_form_contest.html.erb b/app/views/contests/_form_contest.html.erb new file mode 100644 index 000000000..5dc824d28 --- /dev/null +++ b/app/views/contests/_form_contest.html.erb @@ -0,0 +1,36 @@ + + +<%= error_messages_for 'contest' %> + +

<%= l(:label_bids_form_contest_new_description) %>

+

<%= f.text_field :name, :required => true, :size => 60, :style => "width:490px;", :maxlength => Contest::NAME_LENGTH_LIMIT, :placeholder => "#{l(:label_contest_name)}" %>

+ +

<%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;", :maxlength => Contest::DESCRIPTION_LENGTH_LIMIT, :placeholder => "#{l(:label_contest_description)}" %>

+ +

<%= f.text_field :password, :size => 60, :style => "width:488px;margin-left: 10px;" %>

+ +

+ <%= f.text_field :budget, :required => true, :size => 60, :style => "width:350px;", :placeholder => l(:label_bids_reward_what) %> + + +

+ +

<%= f.text_field :deadline, :required => true, :size => 60, :style => "width:150px;", :placeholder => "#{l(:label_deadline)}" %><%= calendar_for('contest_deadline')%>

diff --git a/app/views/contests/_history.html.erb b/app/views/contests/_history.html.erb new file mode 100644 index 000000000..6be572c65 --- /dev/null +++ b/app/views/contests/_history.html.erb @@ -0,0 +1,53 @@ +<% reply_allow = JournalsForMessage.create_by_user? User.current %> +<% tip1 = l(:label_user_response) %> +

<%=tip1%>

+ +
+ <%= render :partial => 'new', :locals => {:contest => @contest, :sta => @state} %> +
+ + +<% if journals.size >0 %> + +<% end %> diff --git a/app/views/contests/_list_projects.html.erb b/app/views/contests/_list_projects.html.erb new file mode 100644 index 000000000..48a5ed328 --- /dev/null +++ b/app/views/contests/_list_projects.html.erb @@ -0,0 +1,103 @@ + +<% contesting_project.each do |c_project|%> + <% if c_project.project %> + + + + +
+ + + + + + + +
+
+ <%= image_tag(url_to_avatar(c_project.project), :class => 'avatar3') %> + +
+ + + + + + + + + + + + + + + + + +
+ + <%= link_to(c_project.project.name, project_path(c_project.project)) %> + + <%= l(:label_joined_contest)%> + + + + <%= l(:label_system_grade) %>:<%= (c_project.project.project_status.nil? ? 0.0 : c_project.project.project_status.grade) unless (c_project.project.project_status.nil? && c_project.project.nil?) %> + <% if get_prize(c_project).nil? or get_prize(c_project) == "" %> + <% if @contest.deadline < Date.today %> + <%= l(:label_noawards)%> + <% end %> + <% else %> + + <% case get_prize(c_project) %> + <% when '-1' %> + <%= image_tag("/images/bid/special_reward.png")%> + <% when '0' %> + <%= image_tag("/images/bid/first_reward.png")%> + <% when '1' %> + <%= image_tag("/images/bid/second_reward.png")%> + <% when '2' %> + <%= image_tag("/images/bid/third_reward.png")%> + <% when '3' %> + <%= image_tag("/images/bid/forth_reward.png")%> + <% when '4' %> + <%= image_tag("/images/bid/fifth_reward.png")%> + <% when '5' %> + <%= image_tag("/images/bid/qualified.png")%> + <% end %> + <% end %> + + +
<%= c_project.project.description %>
+ <%= format_time c_project.created_at%> +
+
+
+ + + + + + + + +
+ + <%= l(:label_contest_user) %> + <% unless c_project.user.nil? %> + <%= c_project.user.lastname %><%= c_project.user.firstname %> + <% end %> + + +
+ <%= l(:label_contest_reason) %> + <%= c_project.description %> +
+
+
+
+ <% end %> +<% end %> + + diff --git a/app/views/contests/_list_softapplications.html.erb b/app/views/contests/_list_softapplications.html.erb new file mode 100644 index 000000000..29c985b7e --- /dev/null +++ b/app/views/contests/_list_softapplications.html.erb @@ -0,0 +1,35 @@ + +<% contesting_softapplication.each do |c_softapplication|%> + <% if c_softapplication.softapplication %> +
+
+ + 应用软件: + + <%= link_to(c_softapplication.softapplication.name, softapplication_path(c_softapplication.softapplication)) %> + +
+
+
+ + 简介: + + <%= c_softapplication.softapplication.description %> + +
+
+
+ + 发布时间: + + <%=format_time c_softapplication.created_at %> + + + +
+
+ <% end %> +
+<% end %> + + diff --git a/app/views/contests/_new.html.erb b/app/views/contests/_new.html.erb new file mode 100644 index 000000000..2462d3fb1 --- /dev/null +++ b/app/views/contests/_new.html.erb @@ -0,0 +1,53 @@ + + + +<%= form_for('contest_message', + :remote => true, :method => :post, + :url => {:controller => 'contests', + :action => 'create', + :id => contest, + :sta => sta} + ) do |f|%> + +
+ <%= render :partial => 'pre_show', :locals => {:content => @content} %> +
+ + <% if User.current.logged? %> + + + + +
<%= f.text_area 'message', :rows => 3, :cols => 65, :placeholder => l(:label_my_respond), :style => "resize: none;", :class => 'noline'%>
+ + <%= f.text_field :reference_user_id, :style=>"display:none"%> + + + + + + +
<%= submit_tag l(:button_leave_meassge), :name => nil , :class => "contest_btn", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'"%> + <%= submit_tag l(:button_clear), :name => nil, :onclick => "clearMessage('contest_message_message');", :type => 'button', :class => "bid_btn", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'" %>
+ + <% else %> +
+ <%= l(:label_user_login_tips) %> + <%= link_to l(:label_user_login_new), signin_path %> +
+ <% end %> +<% end %> diff --git a/app/views/contests/_new_join.html.erb b/app/views/contests/_new_join.html.erb new file mode 100644 index 000000000..c764690de --- /dev/null +++ b/app/views/contests/_new_join.html.erb @@ -0,0 +1,57 @@ + + + +

请输入竞赛密码

+ +<%= form_tag( join_in_contest_contests_path(id: contest.id), + :remote => true, + :method => :post, + :id => 'new-watcher-form') do %> + + + + + <%= text_field_tag 'contest_password', nil, :size => 45 %> + +

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

+
+<% end %> diff --git a/app/views/contests/_pre_show.html.erb b/app/views/contests/_pre_show.html.erb new file mode 100644 index 000000000..fef1f16e4 --- /dev/null +++ b/app/views/contests/_pre_show.html.erb @@ -0,0 +1,13 @@ + +<% unless content.nil?%> + + + + + + + +
<%= textilizable content %>
<%= hidden_field_tag 'reference_content', params[:reference_content], :value => content%>
+<% end %> + + diff --git a/app/views/contests/_project_list.html.erb b/app/views/contests/_project_list.html.erb new file mode 100644 index 000000000..325e87105 --- /dev/null +++ b/app/views/contests/_project_list.html.erb @@ -0,0 +1,15 @@ + +<%= render_flash_messages %> + + + + <% if User.current.logged? %> + + <% end %> +
<%= l(:label_bidding_project) %>(<%= contesting_project.count%>) +
+ <%= toggle_link l(:button_contesting_as_project), 'put-bid-form' %> +
+
+ +<%= render :partial=> "list_projects",:locals => {:contesting_project => contesting_project,:contest => @contest }%> diff --git a/app/views/contests/_set_join.js.erb b/app/views/contests/_set_join.js.erb new file mode 100644 index 000000000..346e1d846 --- /dev/null +++ b/app/views/contests/_set_join.js.erb @@ -0,0 +1,8 @@ +$("#<%=object_id%>").replaceWith('<%= escape_javascript join_in_competition(@contest, user) %>'); +<% if @state %> + <% if @state == 0 %> + alert("加入成功") + <% else %> + alert("密码错误") + <% end %> +<% end %> \ No newline at end of file diff --git a/app/views/contests/_softapplication_list.html.erb b/app/views/contests/_softapplication_list.html.erb new file mode 100644 index 000000000..e5d030123 --- /dev/null +++ b/app/views/contests/_softapplication_list.html.erb @@ -0,0 +1,15 @@ + +<%= render_flash_messages %> + + + + <% if User.current.logged? %> + + <% end %> +
<%= l(:label_contest_softapplication) %>(<%= @contest.contesting_softapplications.count%>) +
+ + <%= link_to l(:button_contesting_as_application), "javascript:void(0);", onclick: "$('#put-bid-form').toggle();" %> +
+
+<%= render :partial=> "list_softapplications",:locals => {:contesting_softapplication => contesting_softapplication,:contest => @contest }%> diff --git a/app/views/contests/add.js.erb b/app/views/contests/add.js.erb new file mode 100644 index 000000000..9c696d8aa --- /dev/null +++ b/app/views/contests/add.js.erb @@ -0,0 +1,4 @@ +$('#contesting_project_list').html('<%= escape_javascript(render(:partial => 'project_list', :locals => {:contesting_project => @contesting_project})) %>'); +$("#project_id").val("请选择项目"); +$("#contest_message").val( "<%= l(:label_bid_reason) %>" ); +$("#put-bid-form").hide(); \ No newline at end of file diff --git a/app/views/contests/add_softapplication.js.erb b/app/views/contests/add_softapplication.js.erb new file mode 100644 index 000000000..6071c7070 --- /dev/null +++ b/app/views/contests/add_softapplication.js.erb @@ -0,0 +1,4 @@ +$('#contesting_softapplication_list').html('<%= escape_javascript(render(:partial => 'softapplication_list', :locals => {:contesting_softapplication => @contesting_softapplication})) %>'); +$("#softapplication_id").val("请选择参赛应用"); +$("#contest_message").val( "<%= l(:label_bid_reason) %>" ); +$("#put-bid-form").hide(); \ No newline at end of file diff --git a/app/views/contests/back.js.erb b/app/views/contests/back.js.erb new file mode 100644 index 000000000..d806c1481 --- /dev/null +++ b/app/views/contests/back.js.erb @@ -0,0 +1,2 @@ +$('#history').html('<%= escape_javascript(render(:partial => 'history', :locals => {:contest => @contest, :journals => @jour, :state => @state})) %>'); +$('#contest_message_reference_user_id').val(""); \ No newline at end of file diff --git a/app/views/contests/create.js.erb b/app/views/contests/create.js.erb new file mode 100644 index 000000000..9246d939c --- /dev/null +++ b/app/views/contests/create.js.erb @@ -0,0 +1,4 @@ +$('#history').html('<%= escape_javascript(render(:partial => 'contests/history', :locals => {:contest => @contest, :journals => @jour, :state => true})) %>'); +$('#pre_show').html('<%= escape_javascript(render(:partial => 'pre_show', :locals => {:content => nil})) %>'); +$('#contest_message_message').val(""); +$('#contest_message_reference_user_id').val(""); diff --git a/app/views/contests/destroy.js.erb b/app/views/contests/destroy.js.erb new file mode 100644 index 000000000..a2f0fb2da --- /dev/null +++ b/app/views/contests/destroy.js.erb @@ -0,0 +1,2 @@ +$('#history').html('<%= escape_javascript(render(:partial => 'history', :locals => {:contest => @contest, :journals => @jour, :state => false})) %>'); +$('#contest_message_reference_user_id').val(""); \ No newline at end of file diff --git a/app/views/contests/index.html.erb b/app/views/contests/index.html.erb new file mode 100644 index 000000000..670ba27cf --- /dev/null +++ b/app/views/contests/index.html.erb @@ -0,0 +1,38 @@ +
+ <%= form_tag({:controller => 'contests', :action => 'index'}, :method => :get) do %> + + + + + + + + + + + +
<%= l(:label_contest_innovate) %><%= l(:label_user_location) %> : + <% if User.current.logged? %> + <% unless User.current.user_extensions.identity == 1 %> + <%= link_to(l(:label_newtype_contest), {:controller => 'contests', :action => 'new_contest'}, :class => 'icon icon-add', :target => "_blank") %> + <% end %> + <% end %> + + +
<%= link_to request.host()+"/contests", :controller => 'contests', :action => 'index' %> <%=link_to l(:field_homepage), home_path %> > <%=link_to l(:label_contest_innovate), :controller => 'contests', :action => 'index' %>
+ <% end %> +
+<% if @contests.size > 0%> +<%= sort_contest(@s_state)%> +
+ <%= render :partial => 'contest_list', :locals => {:contests => @contests, :contest_pages => @contest_pages} %> +
+<% else %> + <%= render :partial => "layouts/no_content"%> +<% end %> + +<% html_title l(:label_contest_list)%> diff --git a/app/views/contests/more.js.erb b/app/views/contests/more.js.erb new file mode 100644 index 000000000..d806c1481 --- /dev/null +++ b/app/views/contests/more.js.erb @@ -0,0 +1,2 @@ +$('#history').html('<%= escape_javascript(render(:partial => 'history', :locals => {:contest => @contest, :journals => @jour, :state => @state})) %>'); +$('#contest_message_reference_user_id').val(""); \ No newline at end of file diff --git a/app/views/contests/new.js.erb b/app/views/contests/new.js.erb new file mode 100644 index 000000000..a251b3d69 --- /dev/null +++ b/app/views/contests/new.js.erb @@ -0,0 +1,5 @@ +$('#pre_show').html('<%= escape_javascript(render(:partial => 'pre_show', :locals => {:content => @content})) %>'); +$('#contest_message_reference_user_id').val("<%= @id%>"); +showAndScrollTo("pre_show", "contest_message_reference_user_id"); + + diff --git a/app/views/contests/new_contest.html.erb b/app/views/contests/new_contest.html.erb new file mode 100644 index 000000000..7366b4203 --- /dev/null +++ b/app/views/contests/new_contest.html.erb @@ -0,0 +1,10 @@ + +

<%=l(:label_newtype_contest)%>

+ +<%= labelled_form_for @contest, :url => {:controller => 'contests', :action => 'create_contest'}, method: :post do |f| %> +
+ <%= render :partial => 'form_contest', :locals => { :f => f } %> + <%= submit_tag l(:button_create) %> + <%= javascript_tag "$('#bid_name').focus();" %> + <% end %> +
\ No newline at end of file diff --git a/app/views/contests/new_join.js.erb b/app/views/contests/new_join.js.erb new file mode 100644 index 000000000..5ec9356d7 --- /dev/null +++ b/app/views/contests/new_join.js.erb @@ -0,0 +1,3 @@ +$('#ajax-modal').html('<%= escape_javascript(render :partial => 'contests/new_join', :locals => {:contest => @contest}) %>'); +showModal('ajax-modal', '400px'); +$('#ajax-modal').addClass('new-watcher'); diff --git a/app/views/contests/set_reward.js.erb b/app/views/contests/set_reward.js.erb new file mode 100644 index 000000000..d6d8c4f9f --- /dev/null +++ b/app/views/contests/set_reward.js.erb @@ -0,0 +1,31 @@ +$('#reward_result_<%= @contesting_project_id %>').html('<%= j( + +if get_prize(@b_p).nil? or get_prize(@b_p) == "" + if @contest.deadline < Date.today + puts '未评奖' + end +else + + case get_prize(@b_p) + when '-1' + image_tag("/images/bid/special_reward.png") + when '1' + when '0' + image_tag("/images/bid/first_reward.png") + when '1' + image_tag("/images/bid/second_reward.png") + when '2' + image_tag("/images/bid/third_reward.png") + when '3' + image_tag("/images/bid/forth_reward.png") + when '4' + image_tag("/images/bid/fifth_reward.png") + when '5' + image_tag("/images/bid/qualified.png") + end + +end +) +%>') + +$('#<%= @contesting_project_id %>').hide() diff --git a/app/views/contests/settings.html.erb b/app/views/contests/settings.html.erb new file mode 100644 index 000000000..def1c7f5d --- /dev/null +++ b/app/views/contests/settings.html.erb @@ -0,0 +1,30 @@ + +

<%=l(:label_settings)%>

+ +<%= error_messages_for 'contest' %> + +<%= labelled_form_for @contest, :url => update_contest_contest_path(@contest) do |f| %> +
+ <%= render :partial => 'form_contest', :locals => { :f => f } %> +
+ <%= submit_tag l(:button_create) %> + <%= javascript_tag "$('#bid_name').focus();" %> +<% end %> \ No newline at end of file diff --git a/app/views/contests/show_contest.html.erb b/app/views/contests/show_contest.html.erb new file mode 100644 index 000000000..9ce40bfcb --- /dev/null +++ b/app/views/contests/show_contest.html.erb @@ -0,0 +1,34 @@ +<% reply_allow = JournalsForMessage.create_by_user? User.current %> +
+ <%= image_tag(url_to_avatar(@contest.author), :class => "avatar")%> + +

<%= link_to(@contest.author.lastname+@contest.author.firstname, user_path(@contest.author))%>:<%= @contest.name %>

+

+ <%= l(:label_bids_reward_method) %><%= @contest.budget%> +

+
+ <%= @contest.description %> + +
+ + <%= render :partial => "/praise_tread/praise_tread", + :locals => {:obj => @contest,:show_flag => true,:user_id =>User.current.id}%> + +
+
+ +
+ +
+ <%= render :partial => 'history', :locals => { :contest => @contest, :journals => @jour, :state => false} %> +
+ + + diff --git a/app/views/contests/show_contest_user.html.erb b/app/views/contests/show_contest_user.html.erb new file mode 100644 index 000000000..43eb896ad --- /dev/null +++ b/app/views/contests/show_contest_user.html.erb @@ -0,0 +1,30 @@ +
+ <% for user in @contest.watcher_users %> + +<% end %> +
\ No newline at end of file diff --git a/app/views/contests/show_participator.html.erb b/app/views/contests/show_participator.html.erb new file mode 100644 index 000000000..da51aef3a --- /dev/null +++ b/app/views/contests/show_participator.html.erb @@ -0,0 +1,71 @@ + +

<%=link_to l(:label_x_join_in_contest, :count => @contest.join_in_contests.count)+"("+@contest.join_in_contests(@user.id).count.to_s+")", :controller=>"contests", :action=>"show_participator"%>

+
+ <% for temp in @contest.join_in_contests %> + <% user = temp.user %> + + <% end %> +
\ No newline at end of file diff --git a/app/views/contests/show_project.html.erb b/app/views/contests/show_project.html.erb new file mode 100644 index 000000000..202d3b632 --- /dev/null +++ b/app/views/contests/show_project.html.erb @@ -0,0 +1,100 @@ + + + + + + <% if User.current.logged? %> + + + + <% end %> +
+ <%= render :partial => 'project_list', :locals => {:contesting_project => @contesting_project,:contest => @contest} %> +
+ + diff --git a/app/views/contests/show_softapplication.html.erb b/app/views/contests/show_softapplication.html.erb new file mode 100644 index 000000000..14c907d82 --- /dev/null +++ b/app/views/contests/show_softapplication.html.erb @@ -0,0 +1,102 @@ + + + + + + <% if User.current.logged? %> + +
+ + <% end %> + + + +
+ <%= render :partial => 'softapplication_list', :locals => {:contesting_softapplication => @contesting_softapplication,:contest => @contest} %> +
+ diff --git a/app/views/courses/_set_course_time.html.erb b/app/views/courses/_set_course_time.html.erb index ab9fa6f28..d13d256c1 100644 --- a/app/views/courses/_set_course_time.html.erb +++ b/app/views/courses/_set_course_time.html.erb @@ -1,8 +1,9 @@ <% - id = "finish_course_tag" + id = "finish_course_#{project.id}" + display = (project.course_extra.teacher.id == User.current.id ) %> -<% if course_endTime_timeout?(project) #如果课程已结束%> +<% if display && course_endTime_timeout?(project) #如果课程已结束%> <%= link_to '重启课程', restartcourse_project_path(project), :remote => true, :method => :post, :id => id, :confirm => ('确定要重启课程?') %> <% else %> <%= link_to '关闭课程', finishcourse_project_path(project), :remote => true, :method => :post, :id => id, :confirm => ('确定要关闭课程?') %> diff --git a/app/views/forums/show.html.erb b/app/views/forums/show.html.erb index f3f0524ae..677416a6d 100644 --- a/app/views/forums/show.html.erb +++ b/app/views/forums/show.html.erb @@ -2,7 +2,7 @@ @@ -233,21 +233,22 @@ <% if User.current.logged? && (User.current.admin? || (!Member.where('user_id = ? and project_id = ?', User.current.id, @project.id).first.nil? && (Member.where('user_id = ? and project_id = ?', User.current.id, @project.id).first.roles&Role.where('id = ? or id = ?', 7, 9)).size >0))%> - <% end %> + <%= render_flash_messages %> <%= yield %> <%= call_hook :view_layouts_base_content %>
- + + + <%= render :partial => 'layouts/base_footer'%> - + diff --git a/app/views/layouts/base_newcontest.html.erb b/app/views/layouts/base_newcontest.html.erb new file mode 100644 index 000000000..9813905ca --- /dev/null +++ b/app/views/layouts/base_newcontest.html.erb @@ -0,0 +1,238 @@ +<% @nav_dispaly_contest_label = 1 %> + + + + + <%= h html_title %> + + + <%= csrf_meta_tag %> + <%= favicon %> + <%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'application', :media => 'all' %> + <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> + + <%= javascript_heads %> + <%= heads_for_theme %> + <%= call_hook :view_layouts_base_html_head %> + + <%= yield :header_tags -%> + + +
+
+
+ <%=render :partial => 'layouts/base_header'%> +
+ +
+ + + + + + + + + + +
创新竞赛社区<%= l(:label_user_location) %> : + +
<%=link_to request.host()+"/contests", :controller=>'contests', :action=>'index' %><%=link_to l(:field_homepage), home_path %> > + <%=link_to l(:label_contest_innovate), :controller=>'contests', :action=>'index' %> > + <%= link_to @contest.name, show_contest_contest_path %> +
+
+ + + + +
+ <% if display_main_menu?(@contest) %> +
+ <%= render_menu :contest_menu %> +
+ <% end %> + + <%= yield %> + <%= call_hook :view_layouts_base_content %> +
+
+ <%=render :partial => 'layouts/base_footer'%> +
+
+
+ + + + +
+ <%= call_hook :view_layouts_base_body_bottom %> + + diff --git a/app/views/layouts/base_users.html.erb b/app/views/layouts/base_users.html.erb index 232103273..5c6f24524 100644 --- a/app/views/layouts/base_users.html.erb +++ b/app/views/layouts/base_users.html.erb @@ -1,275 +1,279 @@ -<% @nav_dispaly_user_label = show_item_on_navbar(params) %> - - - - - <%= h html_title %> - - - <%= csrf_meta_tag %> - <%= favicon %> - <%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'application', 'nyan', :media => 'all' %> - <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> - <%= javascript_heads %> - - <%= heads_for_theme %> - <%= call_hook :view_layouts_base_html_head %> - - <%= yield :header_tags -%> - - -
-
-
- <%= render :partial => 'layouts/base_header'%> -
- -
- - - - - - - - - - -
<%= l(:label_user_home) %><%= l(:label_user_location) %> : - -
<%=link_to request.host()+"/users" ,:controller => 'users', :action => 'index' %> <%=link_to "主页", home_path %> > <%=link_to "软件创客", :controller => 'users', :action => 'index' %> > <%=link_to @user.name, user_path %>
-
- - - - -
-
- <% if @user.user_extensions.identity == 2 %> - <%= render_menu :user_enterprise_menu %> - <% else %> - <%= render_menu :user_menu %> - <% end %> -
- - <%= yield %> - <%= call_hook :view_layouts_base_content %> -
- <%= render_flash_messages %> - -
- - <%= render :partial => 'layouts/base_footer'%> -
- - -
-
-
- <%= call_hook :view_layouts_base_body_bottom %> - - +<% @nav_dispaly_user_label = show_item_on_navbar(params) %> + + + + + <%= h html_title %> + + + <%= csrf_meta_tag %> + <%= favicon %> + <%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'application', 'nyan', :media => 'all' %> + <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> + <%= javascript_heads %> + + <%= heads_for_theme %> + <%= call_hook :view_layouts_base_html_head %> + + <%= yield :header_tags -%> + + +
+
+
+ <%= render :partial => 'layouts/base_header'%> +
+ +
+ + + + + + + + + + +
<%= l(:label_user_home) %><%= l(:label_user_location) %> : + +
<%=link_to request.host()+"/users" ,:controller => 'users', :action => 'index' %> <%=link_to "主页", home_path %> > <%=link_to "软件创客", :controller => 'users', :action => 'index' %> > <%=link_to @user.name, user_path %>
+
+ + + + +
+
+ <% if @user.user_extensions.identity == 2 %> + <%= render_menu :user_enterprise_menu %> + <% else %> + <%= render_menu :user_menu %> + <% end %> +
+ + <%= yield %> + <%= call_hook :view_layouts_base_content %> +
+ <%= render_flash_messages %> + +
+ + <%= render :partial => 'layouts/base_footer'%> +
+ + +
+
+
+ <%= call_hook :view_layouts_base_body_bottom %> + + diff --git a/app/views/memos/_reply_box.html.erb b/app/views/memos/_reply_box.html.erb index a8991b572..e0c6acf13 100644 --- a/app/views/memos/_reply_box.html.erb +++ b/app/views/memos/_reply_box.html.erb @@ -1,4 +1,4 @@ -<%= form_for(@mome_new, url: forum_memos_path, :html => {:multipart => true}) do |f| %> +<%= form_for(@memo_new, url: forum_memos_path, :html => {:multipart => true}) do |f| %> <%= f.hidden_field :subject, :required => true, value: @memo.subject %> <%= f.hidden_field :forum_id, :required => true, value: @memo.forum_id %> <%= f.hidden_field :parent_id, :required => true, value: @memo.id %> diff --git a/app/views/memos/show.html.erb b/app/views/memos/show.html.erb index d085c01d2..6ea5b17bc 100644 --- a/app/views/memos/show.html.erb +++ b/app/views/memos/show.html.erb @@ -1,7 +1,7 @@
-
<%= link_to image_tag(url_to_avatar(@memo.author), :class => "avatar"), user_path(@memo.author) %>
-

<%=link_to @memo.author.name, user_path(@memo.author) %>

+
<%= link_to image_tag(url_to_avatar(@memo.author), :class => "avatar"), user_path(@memo.author) %>
+

<%=link_to @memo.author.name, user_path(@memo.author) %>

diff --git a/app/views/messages/show.html.erb b/app/views/messages/show.html.erb index 391e6b956..6f7e5d5ef 100644 --- a/app/views/messages/show.html.erb +++ b/app/views/messages/show.html.erb @@ -104,7 +104,7 @@
<%= toggle_link l(:button_reply), "reply", :focus => 'message_content' %>
- <% if !@topic.locked? && authorize_for('messages', 'reply') %> + @@ -172,7 +172,7 @@ - +<% if !@topic.locked? && authorize_for('messages', 'reply') %> diff --git a/app/views/projects/_course_form.html.erb b/app/views/projects/_course_form.html.erb index ff45f2375..944157a9b 100644 --- a/app/views/projects/_course_form.html.erb +++ b/app/views/projects/_course_form.html.erb @@ -1,4 +1,19 @@ - + + <% object = [] %> @@ -269,10 +284,12 @@ + +

+ <%=l(:label_new_course_school)%>*    + <%= select_tag "province", options_from_collection_for_select(School.find_by_sql("select distinct province from schools"), :province, :province), :onclick => "get_options(this.value)" %> -

- - <%= select_tag 'school', options_from_collection_for_select(School.all, :id, :name)%> + <%= select_tag "occupation" %>

diff --git a/app/views/projects/finishcourse.js.erb b/app/views/projects/finishcourse.js.erb index 04f6617db..35ecac370 100644 --- a/app/views/projects/finishcourse.js.erb +++ b/app/views/projects/finishcourse.js.erb @@ -2,7 +2,7 @@ <% if Rails.env.development? %> console.debug('课程修改成功:结束时间改为<%=Course.find_by_extra(@project.identifier).try(:endup_time)%>'); <% end %> - $('#finish_course_tag').replaceWith("<%= j(render partial: 'courses/set_course_time', :locals => {:project => @project} )%>") + $('#finish_course_<%=@project.id%>').replaceWith("<%= j(render partial: 'courses/set_course_time', :locals => {:project => @project} )%>") <% else %> alert('设置失败,请在论坛提交问题,等待管理员处理。'); <% end %> diff --git a/app/views/projects/homework.html.erb b/app/views/projects/homework.html.erb index b612bd94f..0f3d22130 100644 --- a/app/views/projects/homework.html.erb +++ b/app/views/projects/homework.html.erb @@ -51,7 +51,7 @@ function showSubH(/* ... */){ } } function deal_error (argument) { - $('#OpenWindow-content').html(' Network Error:
http_status:' + argument.status + '
statusText:' + argument.statusText + ' <\/span>\n'); + $('#OpenWindow-content').html('Network Error
http_status:' + argument.status + '
statusText:' + argument.statusText + ' <\/span>\n'); } $.post(post_url,{}, deal_post).error(deal_error); } diff --git a/app/views/projects/new.html.erb b/app/views/projects/new.html.erb index 7044d69dd..aa03a1cc1 100644 --- a/app/views/projects/new.html.erb +++ b/app/views/projects/new.html.erb @@ -3,7 +3,7 @@ <% if @course_tag == '1' %>

<%=l(:label_course_new)%>

-

<%=raw l(:label_course_news_description)%>

+ <%= render :partial => 'course_form', :locals => { :f => f } %> <%= submit_tag l(:button_create), :class => "enterprise"%> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index c49b08b5d..eb66efc73 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -40,14 +40,37 @@
+ <% end %>
+ + + <% if format_date(day) == format_date(@date_to - @days) %> +
+ + + + + +
<%= image_tag(url_to_avatar(@user), :class => "avatar") %> + + + + + +
<%= link_to (h @user.try(:name)), user_path(@user) if @user %> <%= l(:label_user_create_project) %> <%= link_to @project.name %> !
<%= l :label_update_time %>: <%= format_time(@project.created_on) %> +
+
+ <% end %> <% end -%> + + +
<% else %>
@@ -66,3 +89,5 @@
<% end %> + + diff --git a/app/views/repositories/show.html.erb b/app/views/repositories/show.html.erb index 565a31383..493280647 100644 --- a/app/views/repositories/show.html.erb +++ b/app/views/repositories/show.html.erb @@ -22,6 +22,7 @@ :class => 'repository' + (repo == @repository ? ' selected' : '') }.join(' | ').html_safe %>)

<% else %> +

项目代码请设置好正确的编码方式(utf-8),否则中文会出现乱码

建立版本库文件夹,打开命令行执行如下:

git init

@@ -30,11 +31,22 @@

git remote add origin <%= @repos_url%>

git push -u origin master:master

-

已经有本地库,打开命令行执行如下:

+

已经有本地库,还没有配置远程地址,打开命令行执行如下:

git remote add origin <%= @repos_url%>

+

git add .

+

git commit -m "first commit"

git push -u origin master:matser

+ +

从网上获取别人的开源版本库,转交到trustie网站上,打开命令行执行如下:

+
+

git remote add trustie <%= @repos_url%>

+

git add .

+

git commit -m "first commit"

+

git push -u trustie master:matser

+

<%= link_to "李海提供", user_path(646)%>

+
<% end %> <% if !@entries.nil? && authorize_for('repositories', 'browse') %> diff --git a/app/views/softapplications/_form.html.erb b/app/views/softapplications/_form.html.erb new file mode 100644 index 000000000..5a046801f --- /dev/null +++ b/app/views/softapplications/_form.html.erb @@ -0,0 +1,64 @@ +<%= form_for(@softapplication) do |f| %> + + <% if @softapplication.errors.any? %> +
+

<%= pluralize(@softapplication.errors.count, "error") %> prohibited this softapplication from being saved:

+ + +
+ <% end %> + + + <%= l(:label_softapplication_name) %> + * : + <%= f.text_field :name, :required => true, :size => 60, :style => "width:400px;" %> + <%= l(:label_softapplication_name_condition)%> +

+ + + <%= l(:label_softapplication_version_available) %> + * : + <%= f.text_field :android_min_version_available, :required => true, :size => 60, :style => "width:400px;" %> + +

+ + + <%= l(:label_softapplication_type) %> + * : + <%= f.text_field :app_type_name, :required => true, :size => 60, :style => "width:400px;" %> + +

+ + + + <%= l(:label_softapplication_description) %> + * : + <%= f.text_field :description, :required => true, :size => 60, :style => "width:400px;" %> + +

+ + +
+
+ <%=l(:label_upload_softapplication_packets)%> :
+

+ <%= render :partial => 'attachments/form' %> +

+
+
+ +
+
+ <%=l(:label_upload_softapplication_photo)%> :(<%=l(:label_upload_softapplication_photo_condition)%>)
+

+ <%= render :partial => 'attachments/form' %> +

+
+
+ +<% end %> + diff --git a/app/views/softapplications/_message_history.erb b/app/views/softapplications/_message_history.erb new file mode 100644 index 000000000..4190e899d --- /dev/null +++ b/app/views/softapplications/_message_history.erb @@ -0,0 +1,32 @@ +<% reply_allow = JournalsForMessage.create_by_user? User.current %> + + +
+ <%= render :partial => 'new_message', :locals => {:softapplication => @softapplication, :sta => @state} %> +
+ + +<% if journals.size >0 %> + +<% end %> diff --git a/app/views/softapplications/_new_message.erb b/app/views/softapplications/_new_message.erb new file mode 100644 index 000000000..321c7911f --- /dev/null +++ b/app/views/softapplications/_new_message.erb @@ -0,0 +1,53 @@ + + + +<%= form_for('softapplication_message', + :remote => true, :method => :post, + :url => {:controller => 'softapplications', + :action => 'create_message', + :id => softapplication, + :sta => sta} + ) do |f|%> + +
+ <%= render :partial => 'pre_show', :locals => {:content => @content} %> +
+ + <% if User.current.logged? %> + + + + +
<%= f.text_area 'message', :rows => 3, :cols => 65, :placeholder => l(:label_my_respond), :style => "resize: none;", :class => 'noline'%>
+ + <%= f.text_field :reference_user_id, :style=>"display:none"%> + + + + + + +
<%= submit_tag l(:label_button_ok), :name => nil , :class => "softapplication_btn", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'"%> + <%= submit_tag l(:button_clear_requirement), :name => nil, :onclick => "clearMessage('softapplication_message_message');", :type => 'button', :class => "bid_btn", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'" %>
+ + <% else %> +
+ <%= l(:label_user_login_tips) %> + <%= link_to l(:label_user_login_new), signin_path %> +
+ <% end %> +<% end %> diff --git a/app/views/softapplications/_pre_show.html.erb b/app/views/softapplications/_pre_show.html.erb new file mode 100644 index 000000000..fef1f16e4 --- /dev/null +++ b/app/views/softapplications/_pre_show.html.erb @@ -0,0 +1,13 @@ + +<% unless content.nil?%> + + + + + + + +
<%= textilizable content %>
<%= hidden_field_tag 'reference_content', params[:reference_content], :value => content%>
+<% end %> + + diff --git a/app/views/softapplications/back.js.erb b/app/views/softapplications/back.js.erb new file mode 100644 index 000000000..acd52a63e --- /dev/null +++ b/app/views/softapplications/back.js.erb @@ -0,0 +1,2 @@ +$('#message_history').html('<%= escape_javascript(render(:partial => 'history_message', :locals => {:softapplication => @softapplication, :journals => @jour, :state => @state})) %>'); +$('#softapplication_message_reference_user_id').val(""); \ No newline at end of file diff --git a/app/views/softapplications/create_message.js.erb b/app/views/softapplications/create_message.js.erb new file mode 100644 index 000000000..bd0b13369 --- /dev/null +++ b/app/views/softapplications/create_message.js.erb @@ -0,0 +1,4 @@ +$('#history').html('<%= escape_javascript(render(:partial => 'softapplications/message_history', :locals => {:contest => @softapplication, :journals => @jour, :state => true})) %>'); +$('#pre_show').html('<%= escape_javascript(render(:partial => 'pre_show', :locals => {:content => nil})) %>'); +$('#softapplication_message_message').val(""); +$('#softapplication_message_reference_user_id').val(""); diff --git a/app/views/softapplications/edit.html.erb b/app/views/softapplications/edit.html.erb new file mode 100644 index 000000000..f93e091d2 --- /dev/null +++ b/app/views/softapplications/edit.html.erb @@ -0,0 +1,6 @@ +

Editing softapplication

+ +<%= render 'form' %> + +<%= link_to 'Show', @softapplication %> | +<%= link_to 'Back', softapplications_path %> diff --git a/app/views/softapplications/index.html.erb b/app/views/softapplications/index.html.erb new file mode 100644 index 000000000..be9245876 --- /dev/null +++ b/app/views/softapplications/index.html.erb @@ -0,0 +1,33 @@ +

Listing softapplications

+ + + + + + + + + + + + + + +<% @softapplications.each do |softapplication| %> + + + + + + + + + + + +<% end %> +
NameDescriptionApp typeApp type nameAndroid min version availableUser
<%= softapplication.name %><%= softapplication.description %><%= softapplication.app_type_id %><%= softapplication.app_type_name %><%= softapplication.android_min_version_available %><%= softapplication.user_id %><%= link_to 'Show', softapplication %><%= link_to 'Edit', edit_softapplication_path(softapplication) %><%= link_to 'Destroy', softapplication, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New Softapplication', new_softapplication_path %> diff --git a/app/views/softapplications/more.js.erb b/app/views/softapplications/more.js.erb new file mode 100644 index 000000000..fc67a9fed --- /dev/null +++ b/app/views/softapplications/more.js.erb @@ -0,0 +1,2 @@ +$('#message_history').html('<%= escape_javascript(render(:partial => 'message_history', :locals => {:softapplication => @softapplication, :journals => @jour, :state => @state})) %>'); +$('#softapplication_message_reference_user_id').val(""); \ No newline at end of file diff --git a/app/views/softapplications/new.html.erb b/app/views/softapplications/new.html.erb new file mode 100644 index 000000000..d5ff2c9c2 --- /dev/null +++ b/app/views/softapplications/new.html.erb @@ -0,0 +1,76 @@ +

<%= l(:label_release_softapplication)%>

+ + + +
+ <%= form_for Softapplication.new, :url => {:controller => 'softapplications', :action => 'create'}, :update => "bidding_project_list", :complete => '$("#put-bid-form").hide();', :html => {:multipart => true, :id => 'add_homework_form'} do |f| %> +
+ + + <%= l(:label_softapplication_name) %> + * : <%= f.text_field :name, :required => true, :size => 60, :style => "width:400px;" %> + <%= l(:label_softapplication_name_condition)%> + +
+
+ + + <%= l(:label_softapplication_version_available) %> + * : <%= f.text_field :android_min_version_available, :required => true, :size => 60, :style => "width:400px;" %> + + +
+
+ + + <%= l(:label_softapplication_type) %> + + * : <%= f.text_field :app_type_name, :required => true, :size => 60, :style => "width:400px;" %> + + +
+
+ + + <%= l(:label_softapplication_description) %> + * : <%= f.text_field :description, :required => true, :size => 60, :style => "width:400px;" %> + + +
+
+ + + <%= l(:label_softapplication_developers) %> + * : <%= f.text_field :application_developers, :required => true, :size => 60, :style => "width:400px;" %> + + +
+
+
+ 上传应用软件包和应用截图 + <%= render_flash_messages %> +

+ <%= render :partial => 'attachments/form' %> +

+

(<%=l(:label_upload_softapplication_photo_condition)%>)

+ +
+

+
<%= submit_tag l(:button_create), :onclick => "return true" %>
+ +
+ + <% end %> + \ No newline at end of file diff --git a/app/views/softapplications/new.html.erb.BASE.erb b/app/views/softapplications/new.html.erb.BASE.erb new file mode 100644 index 000000000..40c6a4059 --- /dev/null +++ b/app/views/softapplications/new.html.erb.BASE.erb @@ -0,0 +1,12 @@ +

<%=l(:label_release_softapplication)%>

+ + +<%= labelled_form_for @softapplication, :url => {:controller => 'softapplications', :action => 'create'}, method: :post do |f| %> +
+ <%= render :partial => 'form', :locals => { :f => f } %> + <%= submit_tag l(:button_create) %> + + <% end %> +
\ No newline at end of file diff --git a/app/views/softapplications/new.html.erb.LOCAL.erb b/app/views/softapplications/new.html.erb.LOCAL.erb new file mode 100644 index 000000000..bf4e19f3f --- /dev/null +++ b/app/views/softapplications/new.html.erb.LOCAL.erb @@ -0,0 +1,12 @@ +

<%=l(:label_release_softapplication)%>

+ + +<%= labelled_form_for @softapplication, :url => {:controller => 'softapplications', :action => 'create'}, method: :post do |f| %> +
+ <%= render :partial => 'form', :locals => { :f => f } %> + <%= submit_tag l(:button_create) %> + + <% end %> +
\ No newline at end of file diff --git a/app/views/softapplications/new.html.erb.REMOTE.erb b/app/views/softapplications/new.html.erb.REMOTE.erb new file mode 100644 index 000000000..820165819 --- /dev/null +++ b/app/views/softapplications/new.html.erb.REMOTE.erb @@ -0,0 +1,64 @@ +

<%= l(:label_release_softapplication)%>

+ + +
+ <%= form_for Softapplication.new, :url => {:controller => 'softapplications', :action => 'create'}, :update => "bidding_project_list", :complete => '$("#put-bid-form").hide();', :html => {:multipart => true, :id => 'add_homework_form'} do |f| %> +
+ + <%= l(:label_attachment_plural) %> + + + <%= l(:label_softapplication_name) %> + * : <%= f.text_field :name, :required => true, :size => 60, :style => "width:400px;" %> + <%= l(:label_softapplication_name_condition)%> + +
+
+ + + <%= l(:label_softapplication_version_available) %> + * : <%= f.text_field :android_min_version_available, :required => true, :size => 60, :style => "width:400px;" %> + + +
+
+ + + <%= l(:label_softapplication_type) %> + + * : <%= f.text_field :app_type_name, :required => true, :size => 60, :style => "width:400px;" %> + + +
+
+ + + <%= l(:label_softapplication_description) %> + * : <%= f.text_field :description, :required => true, :size => 60, :style => "width:400px;" %> + + +
+
+ <%= render_flash_messages %> +

+ <%= render :partial => 'attachments/form' %> +

+
+ <%= submit_tag l(:button_create), :onclick => "return true" %> + +
+ + <% end %> + \ No newline at end of file diff --git a/app/views/softapplications/new_message.js.erb b/app/views/softapplications/new_message.js.erb new file mode 100644 index 000000000..ea1d02a33 --- /dev/null +++ b/app/views/softapplications/new_message.js.erb @@ -0,0 +1,5 @@ +$('#pre_show').html('<%= escape_javascript(render(:partial => 'pre_show', :locals => {:content => @content})) %>'); +$('#softapplication_message_reference_user_id').val("<%= @id%>"); +showAndScrollTo("pre_show", "softapplication_message_reference_user_id"); + + diff --git a/app/views/softapplications/show.html.erb b/app/views/softapplications/show.html.erb new file mode 100644 index 000000000..047ecf8dc --- /dev/null +++ b/app/views/softapplications/show.html.erb @@ -0,0 +1,85 @@ + + + +

<%= notice %>

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
<%= @softapplication.name %>
所属类别:<%= @softapplication.app_type_name %>发布时间:<%=format_time @softapplication.created_at %>
发布人员:<%= @softapplication.user.name %>系统支持:<%= @softapplication.android_min_version_available %>
+ 应用下载: + <% options = {:author => true, :deletable => @softapplication.user.eql?(User.current) } %> + <%= render :partial => 'attachments/app_link', :locals => {:attachments => @app_items, :options => options} %> + 开发人员:<%= @softapplication.application_developers %>
+ + +
+
+ +
+
应用简介:
+
<%= @softapplication.description %>
+
+
+ +
+
软件截图:
+
+ <% @image_results.take(4).each do |attachment| %> + <%= link_to_attachment_img attachment, :class => "soft-application", :download => "true" %> + <% end %> +
+
+
+ +
+ +
+
软件评论:
+
+
+ + +
+ <%= render :partial => 'message_history', :locals => { :contest => @softapplication, :journals => @jour, :state => false} %> +
+ + + + + +
+<%#= link_to '返回竞赛页面', show_softapplication_contest_path(@softapplication.contest) %> +
diff --git a/app/views/tags/_show_contests.html.erb b/app/views/tags/_show_contests.html.erb new file mode 100644 index 000000000..79c756522 --- /dev/null +++ b/app/views/tags/_show_contests.html.erb @@ -0,0 +1,15 @@ +
+ <% if contests_results.size > 0 %> +
+ <% contests_results.each do |contest| %> +

+ <%= l(:label_tags_contest) %>:<%= link_to "#{contest.name}", + :controller => "contests",:action => "show",:id => contest.id %> +
+ <%= l(:label_tags_contest_description) %>:<%= contest.description %> + <%= contest.updated_on %> +

+
+ <% end %> + <% end %> +
diff --git a/app/views/tags/_sidebar_tags.html.erb b/app/views/tags/_sidebar_tags.html.erb index a9570f609..8db485d1f 100644 --- a/app/views/tags/_sidebar_tags.html.erb +++ b/app/views/tags/_sidebar_tags.html.erb @@ -9,4 +9,6 @@ (<%= Bid.tagged_with("#{sg}").size %>) <% when '5' then %> (<%= Forum.tagged_with("#{sg}").size %>) +<% when '6' then %> +(<%= Attachment.tagged_with("#{sg}").size %>) <% end %> diff --git a/app/views/tags/_tag.html.erb b/app/views/tags/_tag.html.erb index 0d9467025..896b6a2c8 100644 --- a/app/views/tags/_tag.html.erb +++ b/app/views/tags/_tag.html.erb @@ -6,6 +6,7 @@ 4 代表是bid类型 5 代表是forum类型 6 代表是Attachment类型 + 7 代表是contest类型 #end%> <% if object_flag == '3' %> diff --git a/app/views/tags/_tag_name.html.erb b/app/views/tags/_tag_name.html.erb index d1291ee78..297f813df 100644 --- a/app/views/tags/_tag_name.html.erb +++ b/app/views/tags/_tag_name.html.erb @@ -79,6 +79,13 @@ <%= link_to 'x',:controller => "tags",:action => "remove_tag",:remote => true,:tag_name => tag, :taggable_id => obj.id,:taggable_type => object_flag %> <% end %> + <% when '7'%> + <% if obj.author_id == User.current.id %> + + <%= link_to 'x',:controller => "tags",:action => "remove_tag",:remote => true,:tag_name => tag, + :taggable_id => obj.id,:taggable_type => object_flag %> + + <% end %> <% end %>
diff --git a/app/views/tags/_tag_search_results.html.erb b/app/views/tags/_tag_search_results.html.erb index c67ece520..49a5bcd82 100644 --- a/app/views/tags/_tag_search_results.html.erb +++ b/app/views/tags/_tag_search_results.html.erb @@ -19,6 +19,9 @@ <% when show_flag == '6'%> <%= l(:label_attachment)%>(<%= @results_count %>) <%= render :partial => "show_attachments",:locals => {:attachments_results => attachments_results}%> + <% when show_flag == '7'%> + <%= l(:label_contest_innovate)%>(<%= @results_count %>) + <%= render :partial => "show_contests",:locals => {:contests_results => contests_results}%> <% else %> <%= l(:label_tags_all_objects)%> @@ -26,6 +29,7 @@ <%= render :partial => "show_users",:locals => {:users_results => users_results }%> <%= render :partial => "show_projects",:locals => {:projects_results => projects_results }%> <%= render :partial => "show_bids",:locals => {:bids_results => bids_results}%> + <%= render :partial => "show_contests",:locals => {:contests_results => contests_results}%> <% end %> <% else %> diff --git a/app/views/tags/add_tag.js.erb b/app/views/tags/add_tag.js.erb index fb4dd5af9..662e3f77c 100644 --- a/app/views/tags/add_tag.js.erb +++ b/app/views/tags/add_tag.js.erb @@ -5,6 +5,6 @@ $('#related_tags').html('<%= j(render :partial => "related_tags", $('#show_results').html('<%= j(render :partial => "tag_search_results",:locals => {:issues_results => @issues_results, :projects_results => @projects_results,:users_results => @users_results, - :bids_results => @bids_results ,:show_flag => @show_flag,:obj_pages => @obj_pages })%>') + :bids_results => @bids_results,:contests_results => @contests_results,:show_flag => @show_flag,:obj_pages => @obj_pages })%>') diff --git a/app/views/tags/delete_tag.js.erb b/app/views/tags/delete_tag.js.erb index 37f0de92f..19cd2f5e9 100644 --- a/app/views/tags/delete_tag.js.erb +++ b/app/views/tags/delete_tag.js.erb @@ -5,6 +5,6 @@ $('#related_tags').html('<%= j(render :partial => "related_tags", $('#show_results').html('<%= j(render :partial => "tag_search_results",:locals => {:issues_results => @issues_results, :projects_results => @projects_results,:users_results => @users_results, - :bids_results => @bids_results ,:show_flag => @show_flag ,:obj_pages => @obj_pages })%>') + :bids_results => @bids_results ,:contests_results => @contests_results ,:show_flag => @show_flag ,:obj_pages => @obj_pages })%>') diff --git a/app/views/tags/index.html.erb b/app/views/tags/index.html.erb index 17ac58184..48ba53d88 100644 --- a/app/views/tags/index.html.erb +++ b/app/views/tags/index.html.erb @@ -23,12 +23,20 @@ <%= l(:label_user_plural) %>(<%= @users_tags_num %>) | <%= l(:label_tags_call)%>(<%= @bids_tags_num %>) | <%= l(:field_filename)%>(<%= @attachments_tags_num %>) + <%= l(:label_tags_contest)%>(<%= @contests_tags_num %>) |
<%# 求工厂模式重构 %> - <%= render :partial => "tag_search_results",:locals => {:issues_results => @issues_results, - :projects_results => @projects_results,:users_results => @users_results , - :bids_results=>@bids_results,:forums_results => @forums_results, :attachments_results => @attachments_results, :show_flag => @obj_flag}%> + <%= render :partial => "tag_search_results", + :locals => {:issues_results => @issues_results, + :projects_results => @projects_results, + :users_results => @users_results, + :bids_results => @bids_results, + :forums_results => @forums_results, + :attachments_results=> @attachments_results, + :contests_results => @contests_results, + :show_flag => @obj_flag} + %>
diff --git a/app/views/test/courselist.html.erb b/app/views/test/courselist.html.erb new file mode 100644 index 000000000..959d6a4be --- /dev/null +++ b/app/views/test/courselist.html.erb @@ -0,0 +1,42 @@ + +<% @courses.each do |course| %> +
+ <%= course.name %> + + <% course.homeworks.each do |homework| %> + <% homeworks_attach_path = [] %> +
+ <%= link_to homework.name, respond_path(homework) %>(<%=homework.homeworks.count %>)<%#Bid%> +
+ <%= link_to "package", zipdown_assort_path(obj_class: homework.class, obj_id: homework.id) %>
+ <% homework.homeworks.each do |homeattach|%><%#homework.class == Bid %> + <% homeattach.attachments.each do |attach|%> + <%= link_to_attachment attach, author: true, :download => true %> (<%=attach.author%>) +
+ <% homeworks_attach_path << attach.storage_path %> + <% end %> + <% end %> +
+ <%# 所有作业的文件列表%> + +
+ <% end %> +
+
+<% end %> diff --git a/app/views/test/zip.html.erb b/app/views/test/zip.html.erb new file mode 100644 index 000000000..8992b9bb2 --- /dev/null +++ b/app/views/test/zip.html.erb @@ -0,0 +1 @@ +<%= debug @paths.to_yaml %> \ No newline at end of file diff --git a/app/views/users/_activity_score_index.html.erb b/app/views/users/_activity_score_index.html.erb index fd1947812..fa9aad180 100644 --- a/app/views/users/_activity_score_index.html.erb +++ b/app/views/users/_activity_score_index.html.erb @@ -1,10 +1,10 @@ -<% journals_for_messages_count = @user.journals_for_messages.count %> +<% journals_for_messages_count = @user.journals_messages.count %> <% journals_for_messages_score = journals_for_messages_count * 0.05 %> <% activities_count = @user.activities.count %> <% activities_score = activities_count * 0.2 %> <% finall_activity_score = journals_for_messages_score + activities_score %> -
<%= l(:label_message_number) %> * 0.05 = <%= @user.journals_for_messages.count %> * 0.05 = <%= format("%.2f" , journals_for_messages_score).to_f %>
+
<%= l(:label_message_number) %> * 0.05 = <%= @user.journals_messages.count %> * 0.05 = <%= format("%.2f" , journals_for_messages_score).to_f %>
<%= l(:label_activity_number) %> * 0.2 = <%= @user.activities.count %> * 0.2 = <%= format("%.2f" , activities_score).to_f %>
<%= l(:label_user_score_of_activity) %> = <%= format("%.2f" , journals_for_messages_score).to_f %> + <%= format("%.2f" , activities_score).to_f %> = <%= format("%.2f" , finall_activity_score).to_f %>
diff --git a/app/views/users/_course_form.html.erb b/app/views/users/_course_form.html.erb index 810787850..a2ef0dd83 100644 --- a/app/views/users/_course_form.html.erb +++ b/app/views/users/_course_form.html.erb @@ -8,9 +8,11 @@ -
<%= link_to_project(membership.project) %> + + <%= link_to_project(membership.project) %> + <%=render :partial => 'courses/set_course_time', :locals => {:project => membership.project} %> <% if User.current == @user %> <% (membership.roles).each do |role| %> <% unless (role == Role.find(9) || role == Role.find(3)) %> diff --git a/app/views/users/_score_index.html.erb b/app/views/users/_score_index.html.erb index 8c2f98541..814e9d9ec 100644 --- a/app/views/users/_score_index.html.erb +++ b/app/views/users/_score_index.html.erb @@ -9,7 +9,7 @@ <% user_changesets_score = user_changesets_count * 0.3 %> <% finall_user_project_score = journals_score + user_changesets_score %> -<% journals_for_messages_count = @user.journals_for_messages.count %> +<% journals_for_messages_count = @user.journals_messages.count %> <% activities_count = @user.activities.count %> <% journals_for_messages_score = journals_for_messages_count * 0.05 %> <% activities_score = activities_count * 0.2 %> diff --git a/app/views/users/_show_score.html.erb b/app/views/users/_show_score.html.erb index 7001f7a94..0297a4e02 100644 --- a/app/views/users/_show_score.html.erb +++ b/app/views/users/_show_score.html.erb @@ -11,7 +11,7 @@ <% user_changesets_score = user_changesets_count * 0.3 %> <% finall_user_project_score = journals_score + user_changesets_score %> -<% journals_for_messages_count = @user.journals_for_messages.count %> +<% journals_for_messages_count = @user.journals_messages.count %> <% activities_count = @user.activities.count %> <% journals_for_messages_score = journals_for_messages_count * 0.05 %> <% activities_score = activities_count * 0.2 %> diff --git a/app/views/users/_user_show.html.erb b/app/views/users/_user_show.html.erb index 71157d070..905265c8b 100644 --- a/app/views/users/_user_show.html.erb +++ b/app/views/users/_user_show.html.erb @@ -13,7 +13,7 @@ <% user_changesets_score = user_changesets_count * 0.3 %> <% finall_user_project_score = journals_score + user_changesets_score %> - <% journals_for_messages_count = user.journals_for_messages.count %> + <% journals_for_messages_count = user.journals_messages.count %> <% activities_count = user.activities.count %> <% journals_for_messages_score = journals_for_messages_count * 0.05 %> <% activities_score = activities_count * 0.2 %> diff --git a/app/views/welcome/contest.html.erb b/app/views/welcome/contest.html.erb index 6a0a8413f..8c0addb8d 100644 --- a/app/views/welcome/contest.html.erb +++ b/app/views/welcome/contest.html.erb @@ -1,9 +1,232 @@ +<%= stylesheet_link_tag 'welcome' %> + + + +
-
- 正在升级中。。。。。。。。。。。。 + +
+ +
+ <%= l(:label_welcome_trustie) %><%= l(:label_welcome_trustie_contest) %> , <%= l(:label_welcome_trustie_contest_description) %> +
+ + + +
+ <%= form_tag({controller: 'contests', action: 'index'}, method: :get) do %> + <%= text_field_tag 'name', params[:name], placeholder:'请输入要搜索的关键字', name: "name", :class => 'blueinputbar', :style => 'width:240px; padding-right:50px;'%> +   + <%= hidden_field_tag 'project_type', params[:project_type] %> + <%= submit_tag l(:label_search), :class => "enterprise" , :name => nil%> + <% end %> + +
+
-
+ +
+ + +
+

最新热门竞赛

+ <%= link_to "更多>>", {:controller => 'contests', :action => 'index', :host => Setting.contest_domain}, :target => "_blank" %> +
+
+ <% find_all_hot_contest.map do |contest| break if(contest == find_all_hot_contest[6]) %> + +
  • +
    + <%= image_tag('/images/039.gif')%> +
    + +
    + <%= link_to(contest.name, contest.event_url, :class => "d-g-blue d-p-project-name", :title => "#{contest.name}", :target => "_blank") %> +
    + +
    + ><%=contest.description.truncate(50, omission: '...')%> +

    + +
    + + 发布时间:<%=format_time contest.created_on %> +
    + +
  • + <% end; reset_cycle %> + +
    +
    +
    + + +
    +

    + 问题和反馈动态 + <%= link_to "我要提问" , newbie_send_path, {:class => 'orangeButton idea_btn', :style => "color: #EEEEEE" }%> + <%= link_to "我要反馈" , suggestion_send_path, {:class => 'orangeButton idea_btn', :style => "color: #EEEEEE" }%> +

    + <%= link_to "更多>>", forums_path %> +
    +
      + <% find_new_forum_topics(11).each do |topic|%> +
    • +
      +       + <%= link_to topic.subject.truncate(30, omission: '...'), topic.event_url, :class => "gray" , :style => "font-size: 10pt !important;" %> + +
      + <%= l(:field_updated_on) %><%=time_tag_welcome(topic_last_time topic)%>前 + + 由 <%= link_to topic.author ? topic.author : 'Anonymous', user_path(topic.author_id), :style => "font-size: 9pt !important; color: rgb(17, 102, 173);" %> 发表 + + 回复(<%= link_to (topic.parent ? topic.parent.replies_count : topic.replies_count), topic.event_url %>) +
      +
    • + <% end %> +
    +
    +
    + +
    +

    最新参赛应用

    + +
    +
    + <% find_all_hot_softapplication.map do |softapplication| break if(softapplication == find_all_hot_softapplication[5]) %> + +
  • +
    + <%= image_tag('/images/009.gif')%> +
    + +
    + <%= link_to(softapplication.name, softapplication_path(softapplication.id), :class => "d-g-blue d-p-project-name", :title => "#{softapplication.name}", :target => "_blank") %> +
    + +
    + ><%=softapplication.description.truncate(50, omission: '...')%> +

    + +
    + 发布时间:<%=format_time softapplication.created_at %> +
    + +
  • + <% end; reset_cycle %> + +
    +
    +
    + +
    + diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb index 6c4cd3e6b..c1b5bba9f 100644 --- a/app/views/welcome/index.html.erb +++ b/app/views/welcome/index.html.erb @@ -245,7 +245,7 @@
    - +
    diff --git a/app/views/welcome/robots.html.erb b/app/views/welcome/robots.html.erb index a55f4da1a..052c639e5 100644 --- a/app/views/welcome/robots.html.erb +++ b/app/views/welcome/robots.html.erb @@ -2,7 +2,10 @@ # by trustie team # User-agent: * +Disallow: /projects/* +Disallow: /users/* +Disallow: /course/* +Disallow: /contests/* <% @projects.each do |p| -%> Disallow: /projects/<%= p.to_param %>/repository <% end -%> -Disallow: /admin/ diff --git a/app/views/words/destroy.js.erb b/app/views/words/destroy.js.erb index c583e0449..c2262a270 100644 --- a/app/views/words/destroy.js.erb +++ b/app/views/words/destroy.js.erb @@ -1,6 +1,6 @@ <% if @journal_destroyed.nil? %> alert('<%=l(:notice_failed_delete)%>'); -<% elsif (['Principal','Project', 'Bid'].include? @journal_destroyed.jour_type)%> +<% elsif (['Principal','Project', 'Bid', 'Contest', 'Softapplication'].include? @journal_destroyed.jour_type)%> var destroyedItem = $('#word_li_<%=@journal_destroyed.id%>') destroyedItem.fadeOut(600,function(){ destroyedItem.remove(); diff --git a/app/views/zipdown/assort.html.erb b/app/views/zipdown/assort.html.erb new file mode 100644 index 000000000..c9056b4fa --- /dev/null +++ b/app/views/zipdown/assort.html.erb @@ -0,0 +1,2 @@ +

    Download Status:

    +<%= @error.class %> \ No newline at end of file diff --git a/config/application.rb b/config/application.rb index 593eed64e..d37a9eae2 100644 --- a/config/application.rb +++ b/config/application.rb @@ -1,6 +1,7 @@ require File.expand_path('../boot', __FILE__) require 'rails/all' +require 'sprockets/railtie' if defined?(Bundler) # If you precompile assets before deploying to production, use this line diff --git a/config/locales/zh.yml b/config/locales/zh.yml index a006ae53c..5cc7b7d8d 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -741,6 +741,7 @@ zh: label_latest_revision_plural: 最近的修订版本 label_view_revisions: 查看修订 label_view_all_revisions: 查看所有修订 + label_no_file_uploaded: 未上传文件 label_max_size: 最大文件大小 label_sort_highest: 置顶 label_sort_higher: 上移 @@ -1549,8 +1550,10 @@ zh: label_welcome_trustie: Trustie label_welcome_trustie_project: 在线项目托管平台 label_welcome_trustie_course: 在线课程实践平台 + label_welcome_trustie_contest: 在线竞赛实战平台 label_welcome_trustie_project_description: 面向中国大学生与软件从业者,提供社交化的项目管理、代码托管、资源共享、合作交流。 label_welcome_trustie_course_description: 面向中国高校教师与大学生,提供社交化的课程管理、资源共享、合作实验、协同研究。 + label_welcome_trustie_contest_description: 面向中国大学生与编程爱好者,提供社交化的竞赛管理、应用管理、代码托管、合作交流。 label_user_project: 项目 label_user_course: 课程 label_user_homework: 作业 @@ -1746,6 +1749,7 @@ zh: label_exit_course: 退出课程 label_new_join: 加入 label_new_course_password: 课程密码 + label_new_course_school: 开课学校 label_new_course_description: 课程描述 label_new_join_order: 请输入课程密码 label_task_submit_form_accessory: 作业最终以附件形式提交 @@ -1811,3 +1815,42 @@ zh: label_contest_reason: 参赛宣言: label_notification: 通知 label_sumbit_empty: 搜索内容不能为空 + + #add by linchun (竞赛相关) + label_upload_files: 上传文件 + label_upload_softwarepackage: 上传软件包 + label_upload_cuttingphoto: 上传截图 + label_contests_reward_method: 奖励方式 + label_system_platform: 系统平台 + label_nextstep: 下一步 + label_participate: 参赛者 + label_contest_project: 参赛项目 + label_contest_softapplication: 参赛应用 + label_contest_response: 用户反馈 + label_contest_watchers: 关注人员 + label_contest_application: 参赛应用 + button_contesting_as_project: 我要参赛(新建项目) + button_contesting_as_application: 我要参赛(发布应用) + label_release_softapplication: 发布应用 + label_upload_softapplication_packets: 上传应用软件包 + label_upload_softapplication_photo: 上传产品截图 + label_upload_softapplication_photo_condition: 截图至少上传2张,至多4张;格式为gif/jpg/png, 尺寸480*800, 每张小于2M + label_softapplication_name: 应用名称 + label_softapplication_description: 应用简介 + label_softapplication_type: 应用分类 + label_softapplication_version_available: 适配版本 + label_softapplication_developer: 上传人员 + label_softapplication_developers: 开发人员 + label_softapplication_name_condition: 25个汉字以内(50个字符) + label_user_login_softapplication_board: 您还没有登录,请登录后参与应用评价。 + label_contest_description_no: 暂无描述。 + label_no_contest_softapplication: 暂无参赛应用 + label_button_ok: 确定 + label_tags_contest: 竞赛标签 + label_tags_contest: 竞赛名称 + label_tags_contest_description: 竞赛描述 + label_release_add_contest_succeed: 该应用发布并添加成功. + label_add_contest_succeed_fail: 添加失败,该应用已参赛. + + + diff --git a/config/routes.rb b/config/routes.rb index ec3440cec..17e09f5a8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,561 +1,611 @@ -# Redmine - project management software -# Copyright (C) 2006-2013 Jean-Philippe Lang -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write tobthe Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -RedmineApp::Application.routes.draw do - resources :stores do - collection do - match 'search', via: [:get, :post] - end - end - - resources :forums do - collection do - match 'search_forum', :via => [:get, :post] - end - member do - match 'search_memo', :via => [:get, :post] - end - resources :memos do - collection do - get "quote" - end - end - end - - - resources :shares - - #added by william - get "tags/index" - - get "tags/show" - - get "praise_tread/praise_plus" - - get "praise_tread/tread_plus" - #end - - root :to => 'welcome#index', :as => 'home' - - #added by baiyu - match 'git_usage/ch_usage', :controller => 'git_usage', :action => 'ch_usage', :via => :get, :as => 'ch_usage' - match 'git_usage/en_usage', :controller => 'git_usage', :action => 'en_usage', :via => :get, :as => 'en_usage' - #added by nie - match '/projects/search', :controller => 'projects', :action => 'search', :via => [:get, :post] - match '/users/search', :controller => 'users', :action => 'search', :via => [:get, :post] - #end - match 'login', :to => 'account#login', :as => 'signin', :via => [:get, :post] - match 'logout', :to => 'account#logout', :as => 'signout', :via => [:get, :post] - match 'account/register', :to => 'account#register', :via => [:get, :post], :as => 'register' - match 'account/lost_password', :to => 'account#lost_password', :via => [:get, :post], :as => 'lost_password' - match 'account/activate', :to => 'account#activate', :via => :get - - match '/news/preview', :controller => 'previews', :action => 'news', :as => 'preview_news', :via => [:get, :post, :put] - match '/issues/preview/new/:project_id', :to => 'previews#issue', :as => 'preview_new_issue', :via => [:get, :post, :put] - match '/issues/preview/edit/:id', :to => 'previews#issue', :as => 'preview_edit_issue', :via => [:get, :post, :put] - match '/issues/preview', :to => 'previews#issue', :as => 'preview_issue', :via => [:get, :post, :put] - - match 'projects/:id/wiki', :to => 'wikis#edit', :via => :post - match 'projects/:id/wiki/destroy', :to => 'wikis#destroy', :via => [:get, :post] - - # boards - match 'boards/:board_id/topics/new', :to => 'messages#new', :via => [:get, :post], :as => 'new_board_message' - get 'boards/:board_id/topics/:id', :to => 'messages#show', :as => 'board_message' - match 'boards/:board_id/topics/quote/:id', :to => 'messages#quote', :via => [:get, :post] - get 'boards/:board_id/topics/:id/edit', :to => 'messages#edit' - - post 'boards/:board_id/topics/preview', :to => 'messages#preview', :as => 'preview_board_message' - post 'boards/:board_id/topics/:id/replies', :to => 'messages#reply' - post 'boards/:board_id/topics/:id/edit', :to => 'messages#edit' - post 'boards/:board_id/topics/:id/destroy', :to => 'messages#destroy' - # boards end - post 'bids/homework_destroy', :to => 'bids#homework_destroy' - - # Misc issue routes. TODO: move into resources - match '/issues/auto_complete', :to => 'auto_completes#issues', :via => :get, :as => 'auto_complete_issues' - match '/issues/context_menu', :to => 'context_menus#issues', :as => 'issues_context_menu', :via => [:get, :post] - match '/issues/changes', :to => 'journals#index', :as => 'issue_changes', :via => :get - match '/issues/:id/quoted', :to => 'journals#new', :id => /\d+/, :via => :post, :as => 'quoted_issue' - - match '/journals/diff/:id', :to => 'journals#diff', :id => /\d+/, :via => :get - match '/journals/edit/:id', :to => 'journals#edit', :id => /\d+/, :via => [:get, :post] - match '/journals/destroy/:id', :to => 'journals#destroy', :id => /\d+/, :via => [:get, :post] - - - get '/projects/:project_id/issues/gantt', :to => 'gantts#show', :as => 'project_gantt' - get '/issues/gantt', :to => 'gantts#show' - - get '/projects/:project_id/issues/calendar', :to => 'calendars#show', :as => 'project_calendar' - get '/issues/calendar', :to => 'calendars#show' - - get 'projects/:id/issues/report', :to => 'reports#issue_report', :as => 'project_issues_report' - get 'projects/:id/issues/report/:detail', :to => 'reports#issue_report_details', :as => 'project_issues_report_details' - post '/users/:id/user_activities', :to => 'users#show', :as => "user_activities" - - #added by young - resources :users do - member do - match 'user_projects', :to => 'users#user_projects', :via => :get - match 'user_activities', :to => 'users#show', :via => :get, :as => "user_activities" - match 'user_newfeedback', :to => 'users#user_newfeedback', :via => :get, :as => "user_newfeedback" - match 'watch_calls', :controller => 'users', :action => 'watch_bids', :via => [:get , :post] - match 'info', :to => 'users#info', :via => [:get , :post], :as => 'user_info' - match 'user_watchlist', :to => 'users#user_watchlist', :via => :get, :as => "user_watchlist" #add by huang - match 'user_fanslist', :to => 'users#user_fanslist', :via => :get, :as => "user_fanslist" #add by huang - match 'user_courses', :to => 'users#user_courses', :via => :get - match 'user_homeworks', :to => 'users#user_homeworks', :via => :get - match 'watch_projects', :to => 'users#watch_projects', :via => :get - # added by bai - match 'show_score', :to => 'users#show_score', :via => :get - match 'topic_score_index', :controller => 'users', :action => 'topic_score_index', :via => [:get, :post] - match 'project_score_index', :to => 'users#project_score_index', :via => :get - match 'activity_score_index', :to => 'users#activity_score_index', :via => :get - match 'influence_score_index', :to => 'users#influence_score_index', :via => :get - match 'score_index', :to => 'users#score_index', :via => :get - - match 'show_projects_score', :to => 'projects#show_projects_score', :via => [:get, :post] - match 'issue_score_index', :to => 'projects#issue_score_index', :via => [:get, :post] - match 'news_score_index', :to => 'projects#news_score_index', :via => [:get, :post] - match 'file_score_index', :to => 'projects#file_score_index', :via => [:get, :post] - match 'code_submit_score_index', :to => 'projects#code_submit_score_index', :via => [:get, :post] - match 'projects_topic_score_index', :to => 'projects#projects_topic_score_index', :via => [:get, :post] - # end - end - end - match 'users/:id/user_newfeedback', :to => 'users#user_newfeedback', :via => :get, :as => "feedback" - match 'users/:id/user_projects', :controller => 'users', :action => 'user_projects', :via => :get - #match 'user/:id/watch_calls', :controller => 'users', :action => 'watch_bids', :via => [:get , :post] - - #end - match 'my/account', :controller => 'my', :action => 'account', :via => [:get, :post] - match 'my/account/destroy', :controller => 'my', :action => 'destroy', :via => [:get, :post] - match 'my/page', :controller => 'my', :action => 'page', :via => :get - match 'my', :controller => 'my', :action => 'index', :via => :get # Redirects to my/page - match 'my/reset_rss_key', :controller => 'my', :action => 'reset_rss_key', :via => :post - match 'my/reset_api_key', :controller => 'my', :action => 'reset_api_key', :via => :post - match 'my/password', :controller => 'my', :action => 'password', :via => [:get, :post] - match 'my/page_layout', :controller => 'my', :action => 'page_layout', :via => :get - match 'my/add_block', :controller => 'my', :action => 'add_block', :via => :post - match 'my/remove_block', :controller => 'my', :action => 'remove_block', :via => :post - match 'my/order_blocks', :controller => 'my', :action => 'order_blocks', :via => :post - - resources :users - match 'users/:id/memberships/:membership_id', :to => 'users#edit_membership', :via => :put, :as => 'user_membership' - match 'users/:id/memberships/:membership_id', :to => 'users#destroy_membership', :via => :delete - match 'users/:id/memberships', :to => 'users#edit_membership', :via => :post, :as => 'user_memberships' - ################# added by william - match 'users/tag_save', :to => 'users#tag_save', :via => :post, :as => 'tag' - - post 'watchers/watch', :to => 'watchers#watch', :as => 'watch' - delete 'watchers/watch', :to => 'watchers#unwatch' - get 'watchers/new', :to => 'watchers#new' - post 'watchers', :to => 'watchers#create' - post 'watchers/append', :to => 'watchers#append' - delete 'watchers', :to => 'watchers#destroy' - get 'watchers/autocomplete_for_user', :to => 'watchers#autocomplete_for_user' - # Specific routes for issue watchers API - post 'issues/:object_id/watchers', :to => 'watchers#create', :object_type => 'issue' - delete 'issues/:object_id/watchers/:user_id' => 'watchers#destroy', :object_type => 'issue' - - resources :bids, :only=>[:edit,:update,:show] do - member do - match 'homework_ajax_modal' - end - end - resources :projects do - member do - post 'finishcourse' - post 'restartcourse' - get 'settings(/:tab)', :action => 'settings', :as => 'settings' - #by young - get 'member', :controller => 'projects', :action => 'member', :as => 'member' - get 'file', :action => 'file', :as => 'file' - get 'statistics', :action => 'statistics', :as => 'statistics' - get 'feedback', :action => 'feedback', :as => 'project_feedback' - get 'watcherlist', :action=> 'watcherlist' - match 'user_watcherlist', :to => 'projects#watcherlist', :via => :get, :as => "watcherlist" #add by huang - get 'homework', :action => 'homework', :as => 'homework' - get 'new_homework', :action => 'new_homework', :as => 'new_homework' - #get 'news', :action => 'news', :as => 'news' - #end - post 'modules' - post 'archive' - post 'unarchive' - post 'close' - post 'reopen' - match 'copy', :via => [:get, :post] - end - - - #by young - match '/member', :controller => 'projects', :action => 'member', :as => 'member', :via => :get - match '/file', :controller => 'projects', :action => 'file', :as => 'file', :via => :get - match '/statistics', :controller => 'projects', :action => 'statistics', :as => 'statistics', :via => :get - # match '/investor', :controller => 'projects', :action => 'investor', :as => 'investor', :via => :get - match '/homework', :controller => 'projects', :action => 'homework', :as => 'homework', :via => :get - - - # match '/activity', :controller => 'activities', :action => 'index', :as => 'activity', :via => :get - # match '/repository', :controller => 'repositories', :action => 'show', :repository_id => nil, :path => nil, :rev => nil, :as => 'repository', :via => :get - # match '/', :controller => 'projects', :action => 'show', :as => 'project_show', :via => :get - # get 'projects/:project_id/show', :to => 'projects#show', :as => 'project_show' - # get 'projects/:project_id/repository', :to => 'repositories#show', :as => 'project_repository' - - # match '/show', :controller => 'projects', :action => 'show', :as => 'project_show', :via => :get - match '/watcherlist', :controller=>'projects', :action=> 'watcherlist', :as => 'watcherlist', :via => :get #add by huang - # matche '/news', :controller => 'news', :action => 'index', :as => 'news', :via => :get - #end - - resources :memberships, :shallow => true, :controller => 'members', :only => [:index, :show, :new, :create, :update, :destroy] do - collection do - get 'autocomplete' - end - end - - resource :enumerations, :controller => 'project_enumerations', :only => [:update, :destroy] - - get 'issues/:copy_from/copy', :to => 'issues#new', :as => 'copy_issue' - resources :issues, :only => [:index, :new, :create] do - resources :time_entries, :controller => 'timelog' do - collection do - get 'report' - end - end - end - # issue form update - match 'issues/update_form', :controller => 'issues', :action => 'update_form', :via => [:put, :post], :as => 'issue_form' - - resources :files, :only => [:index, :new, :create] - - resources :versions, :except => [:index, :show, :edit, :update, :destroy] do - collection do - put 'close_completed' - end - end - get 'versions.:format', :to => 'versions#index' - get 'roadmap', :to => 'versions#index', :format => false - get 'versions', :to => 'versions#index' - - resources :news, :except => [:show, :edit, :update, :destroy] - resources :time_entries, :controller => 'timelog' do - get 'report', :on => :collection - end - resources :queries, :only => [:new, :create] - resources :issue_categories, :shallow => true - resources :documents, :except => [:show, :edit, :update, :destroy] - resources :boards - resources :repositories, :shallow => true, :except => [:index, :show] do - member do - match 'committers', :via => [:get, :post] - end - end - resources :repositories, :except => [:index, :show] do - member do - get 'newrepo', :via => [:get, :post] - # get 'create', :via=>[:get, :post] - end - end - match 'wiki/index', :controller => 'wiki', :action => 'index', :via => :get - resources :wiki, :except => [:index, :new, :create], :as => 'wiki_page' do - member do - get 'rename' - post 'rename' - get 'history' - get 'diff' - match 'preview', :via => [:post, :put] - post 'protect' - post 'add_attachment' - end - collection do - get 'export' - get 'date_index' - end - end - match 'wiki', :controller => 'wiki', :action => 'show', :via => :get - get 'wiki/:id/:version', :to => 'wiki#show', :constraints => {:version => /\d+/} - delete 'wiki/:id/:version', :to => 'wiki#destroy_version' - get 'wiki/:id/:version/annotate', :to => 'wiki#annotate' - get 'wiki/:id/:version/diff', :to => 'wiki#diff' - end - - resources :issues do - collection do - match 'bulk_edit', :via => [:get, :post] - post 'bulk_update' - end - resources :time_entries, :controller => 'timelog' do - collection do - get 'report' - end - end - resources :relations, :shallow => true, :controller => 'issue_relations', :only => [:index, :show, :create, :destroy] - end - match '/issues', :controller => 'issues', :action => 'destroy', :via => :delete - - resources :queries, :except => [:show] - - resources :news, :only => [:index, :show, :edit, :update, :destroy] - match '/news/:id/comments', :to => 'comments#create', :via => :post - match '/news/:id/comments/:comment_id', :to => 'comments#destroy', :via => :delete - - resources :versions, :only => [:show, :edit, :update, :destroy] do - post 'status_by', :on => :member - end - - resources :documents, :only => [:show, :edit, :update, :destroy] do - post 'add_attachment', :on => :member - end - - match '/time_entries/context_menu', :to => 'context_menus#time_entries', :as => :time_entries_context_menu, :via => [:get, :post] - - resources :time_entries, :controller => 'timelog', :except => :destroy do - collection do - get 'report' - get 'bulk_edit' - post 'bulk_update' - end - end - match '/time_entries/:id', :to => 'timelog#destroy', :via => :delete, :id => /\d+/ - # TODO: delete /time_entries for bulk deletion - match '/time_entries/destroy', :to => 'timelog#destroy', :via => :delete - - get 'projects/:id/activity', :to => 'activities#index' - get 'projects/:id/activity.:format', :to => 'activities#index' - get 'activity', :to => 'activities#index' - - # repositories routes - get 'projects/:id/repository/:repository_id/statistics', :to => 'repositories#stats' - get 'projects/:id/repository/:repository_id/graph', :to => 'repositories#graph' - - get 'projects/:id/repository/:repository_id/changes(/*path(.:ext))', :to => 'repositories#changes' - - get 'projects/:id/repository/:repository_id/revisions/:rev', :to => 'repositories#revision' - get 'projects/:id/repository/:repository_id/revision', :to => 'repositories#revision' - post 'projects/:id/repository/:repository_id/revisions/:rev/issues', :to => 'repositories#add_related_issue' - delete 'projects/:id/repository/:repository_id/revisions/:rev/issues/:issue_id', :to => 'repositories#remove_related_issue' - get 'projects/:id/repository/:repository_id/revisions', :to => 'repositories#revisions' - get 'projects/:id/repository/:repository_id/revisions/:rev/:action(/*path(.:ext))', - :controller => 'repositories', - :format => false, - :constraints => { - :action => /(browse|show|entry|raw|annotate|diff)/, - :rev => /[a-z0-9\.\-_]+/ - } - - get 'projects/:id/repository/statistics', :to => 'repositories#stats' - get 'projects/:id/repository/graph', :to => 'repositories#graph' - - get 'projects/:id/repository/changes(/*path(.:ext))', :to => 'repositories#changes' - - get 'projects/:id/repository/revisions', :to => 'repositories#revisions' - get 'projects/:id/repository/revisions/:rev', :to => 'repositories#revision' - get 'projects/:id/repository/revision', :to => 'repositories#revision' - post 'projects/:id/repository/revisions/:rev/issues', :to => 'repositories#add_related_issue' - delete 'projects/:id/repository/revisions/:rev/issues/:issue_id', :to => 'repositories#remove_related_issue' - get 'projects/:id/repository/revisions/:rev/:action(/*path(.:ext))', - :controller => 'repositories', - :format => false, - :constraints => { - :action => /(browse|show|entry|raw|annotate|diff)/, - :rev => /[a-z0-9\.\-_]+/ - } - get 'projects/:id/repository/:repository_id/:action(/*path(.:ext))', - :controller => 'repositories', - :action => /(browse|show|entry|raw|changes|annotate|diff)/ - get 'projects/:id/repository/:action(/*path(.:ext))', - :controller => 'repositories', - :action => /(browse|show|entry|raw|changes|annotate|diff)/ - - get 'projects/:id/repository/:repository_id', :to => 'repositories#show', :path => nil - get 'projects/:id/repository', :to => 'repositories#show', :path => nil - - # additional routes for having the file name at the end of url - get 'attachments/:id/:filename', :to => 'attachments#show', :id => /\d+/, :filename => /.*/, :as => 'named_attachment' - get 'attachments/download/:id/:filename', :to => 'attachments#download', :id => /\d+/, :filename => /.*/, :as => 'download_named_attachment' - get 'attachments/download/:id', :to => 'attachments#download', :id => /\d+/ - get 'attachments/thumbnail/:id(/:size)', :to => 'attachments#thumbnail', :id => /\d+/, :size => /\d+/, :as => 'thumbnail' - get 'attachments/autocomplete' - match 'attachments/autocomplete', :to => 'attachments#autocomplete', via: [:post] - post 'attachments/relationfile', to: 'attachments#add_exist_file_to_project', as: 'attach_relation' - resources :attachments, :only => [:show, :destroy] - - resources :groups do - member do - get 'autocomplete_for_user' - end - end - - match 'groups/:id/users', :controller => 'groups', :action => 'add_users', :id => /\d+/, :via => :post, :as => 'group_users' - match 'groups/:id/users/:user_id', :controller => 'groups', :action => 'remove_user', :id => /\d+/, :via => :delete, :as => 'group_user' - match 'groups/destroy_membership/:id', :controller => 'groups', :action => 'destroy_membership', :id => /\d+/, :via => :post - match 'groups/edit_membership/:id', :controller => 'groups', :action => 'edit_membership', :id => /\d+/, :via => :post - - resources :trackers, :except => :show do - collection do - match 'fields', :via => [:get, :post] - end - end - resources :issue_statuses, :except => :show do - collection do - post 'update_issue_done_ratio' - end - end - resources :custom_fields, :except => :show - resources :roles do - collection do - match 'permissions', :via => [:get, :post] - end - end - resources :enumerations, :except => :show - match 'enumerations/:type', :to => 'enumerations#index', :via => :get - - get 'projects/:id/search', :controller => 'search', :action => 'index' - get 'search', :controller => 'search', :action => 'index' - - match 'mail_handler', :controller => 'mail_handler', :action => 'index', :via => :post - - match 'admin', :controller => 'admin', :action => 'index', :via => :get - match 'admin/projects', :controller => 'admin', :action => 'projects', :via => :get - match 'admin/plugins', :controller => 'admin', :action => 'plugins', :via => :get - match 'admin/info', :controller => 'admin', :action => 'info', :via => :get - match 'admin/test_email', :controller => 'admin', :action => 'test_email', :via => :get - match 'admin/default_configuration', :controller => 'admin', :action => 'default_configuration', :via => :post - - resources :auth_sources do - member do - get 'test_connection', :as => 'try_connection' - end - collection do - get 'autocomplete_for_new_user' - end - end - - - - match 'workflows', :controller => 'workflows', :action => 'index', :via => :get - match 'workflows/edit', :controller => 'workflows', :action => 'edit', :via => [:get, :post] - match 'workflows/permissions', :controller => 'workflows', :action => 'permissions', :via => [:get, :post] - match 'workflows/copy', :controller => 'workflows', :action => 'copy', :via => [:get, :post] - match 'settings', :controller => 'settings', :action => 'index', :via => :get - match 'settings/edit', :controller => 'settings', :action => 'edit', :via => [:get, :post] - match 'settings/plugin/:id', :controller => 'settings', :action => 'plugin', :via => [:get, :post], :as => 'plugin_settings' - - match 'sys/projects', :to => 'sys#projects', :via => :get - match 'sys/projects/:id/repository', :to => 'sys#create_project_repository', :via => :post - match 'sys/fetch_changesets', :to => 'sys#fetch_changesets', :via => :get - - match 'uploads', :to => 'attachments#upload', :via => :post - # Added by Tao - match 'upload_avatar', :to => 'avatar#upload', :via => :post - # Endof Tao's code - get 'robots.txt', :to => 'welcome#robots' - - Dir.glob File.expand_path("plugins/*", Rails.root) do |plugin_dir| - file = File.join(plugin_dir, "config/routes.rb") - if File.exists?(file) - begin - instance_eval File.read(file) - rescue Exception => e - puts "An error occurred while loading the routes definition of #{File.basename(plugin_dir)} plugin (#{file}): #{e.message}." - exit 1 - end - end - end - - ##############测试留言功能 fq - post 'words/new', :to => 'words#new' - post 'words/create', :to => 'words#create' - post 'words/append', :to => 'words#append' - post 'words/create_reply', :to => 'words#create_reply' - delete 'words/destroy', :to => 'words#destroy' - get 'words/more', :to => 'words#more' - get 'words/back', :to=> 'words#back' - ############## fq - post 'calls/create', :to => 'bids#create' - delete 'calls/destroy', :to => 'bids#destroy' - match 'calls/new', :controller => 'bids', :action => 'new', :via => [:get , :post] - get 'calls/more', :to => 'bids#more' - get 'calls/back', :to=> 'bids#back' - match 'calls/new_bid', :controller => 'bids', :action => 'new_bid' - match 'contest/new_contest', :controller => 'bids', :action => 'new_contest' #huang - match 'calls/:id/show_project', :controller => 'bids', :action => 'show_project', :as => 'project_for_bid' - match 'calls/:id/show_project_homework', :controller => 'bids', :action => 'show_project_homework', :as => 'project_for_bid_homework' # by huang - match 'calls/:id/add', :controller => 'bids', :action => 'add' - match 'calls/:id/add_homework', :controller => 'bids', :action => 'add_homework', via: :post - match 'calls/:id/new_submit_homework', to: 'bids#new_submit_homework', via: :get, as: 'new_submit_homework' - match 'words/add_project_respond', :controller => 'words', :action => 'add_project_respond' - match 'words/:id/leave_project_message', :controller => 'words', :action => 'leave_project_message' - - match 'projects/:id/feedback', :to => 'projects#feedback', :via => :get, :as => 'project_feedback' - match 'calls/create_bid', :to => 'bids#create_bid' - match 'contest/create_contest', :to => 'bids#create_contest' #huang - match 'calls/create_homework', :to => 'bids#create_homework' - match 'calls/:id/homework_respond', :to => 'bids#homework_respond' - match 'calls/:id/homework_statistics', :to => 'bids#homework_statistics' - match 'calls/:id/fork', :to => 'bids#fork', :as => 'fork' - match 'calls/:id/create_fork', :to => 'bids#create_fork' - match 'project/enterprise_course', :to => 'projects#enterprise_course' - match 'project/course_enterprise', :to => 'projects#course_enterprise' - match 'calls/:id/show_course', :to => 'bids#show_course', :as => 'show_course' - match 'calls/:id/show_bid_project', :to => 'bids#show_bid_project', :as => 'show_bid_project' - match 'calls/:id/show_bid_user', :to => 'bids#show_bid_user', :as => 'show_bid_user' - - match 'project/:id/share', :to => 'projects#share', :as => 'share_show' #share - - post 'join_in/join', :to => 'courses#join', :as => 'join' - delete 'join_in/join', :to => 'courses#unjoin' - post 'calls/:id/join_in_contest', :to => 'bids#join_in_contest', :as => 'join_in_contest' - delete 'calls/:id/join_in_contest', :to => 'bids#unjoin_in_contest' - match 'calls/:id/show_participator', :to => 'bids#show_participator' #bai - match 'calls/:id/update_contest', :to => 'bids#update_contest' #bai - match 'calls/:id/settings', :to => 'bids#settings' #bai - - delete 'attachment/:id', :to => 'attachments#delete_homework' - match 'new_join', :to => 'projects#new_join', :as => 'try_join' - match 'new_join_in_contest', :to => 'bids#new_join', :as => 'try_join_in_contest' - match 'projects/:id/respond', :to => 'projects#project_respond', :via => :post - match 'calls/:id/manage',:to => 'bids#manage',:via => [:get,:post] - match 'project/course', :to => 'projects#course', :as => 'course' - - #added by william - # match 'calls/:id/set_results',:controller => 'bids', :action => 'set_results',:via => [:get,:post],:as => 'set_results' - # match 'calls/:id/set_prizes',:controller => 'bids',:action => 'set_prizes',:as => 'set_prizes' - match 'calls/:id/set_reward',:controller => 'bids',:action => 'set_reward',:as => 'set_reward' - - ## 测试用 - match 'test/index', :controller => 'test', :action => 'index' - # added by young - match 'calls', :controller => 'bids', :action => 'index' - - match 'calls/:id', :controller => 'bids', :action => 'show', :as => 'respond' - match 'contest', :controller => 'bids', :action => 'contest', :as => 'contest' - - ######added by nie - match 'tags/show_projects_tags',:to => 'tags#show_projects_tags' - ########### added by liuping - match 'tags/add_tag',:to => 'tags#add_tag',:as=>"add_tag" - match 'tags/delete_tag',:to => 'tags#delete_tag',:as=>"add_tag" - match 'tags/show_all',:to => 'tags#show_all' - match 'parise_tread/praise_plus',:to => 'parise_tread#praise_plus',:as=>"praise" - match 'parise_tread/tread_plus',:to => 'parise_tread#tread_plus',:as=>"tread" - match 'tags/delete',:to=>'tags#delete' - match 'tags/remove_tag',:to=>'tags#remove_tag',:as=>"remove_tag" - - match 'words/add_brief_introdution', :controller => 'words', :action => 'add_brief_introdution' - - get ':controller(/:action(/:id))' -end +# Redmine - project management software +# Copyright (C) 2006-2013 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write tobthe Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +RedmineApp::Application.routes.draw do + namespace :zipdown do + match 'assort' + end + namespace :test do + match 'courselist' + match 'zip' + end + ##new added by linchun #以发布应用的形式参与竞赛 + resources :softapplications do + + collection do + match 'new_message', via: :get + end + member do + match 'create_message' , via: :post + end + end + + ## new added by linchun #新竞赛相关 + resources :contests, only: [:index] do + collection do + match 'new_contest' , via: :get + match 'join_in_contest' , via: :post + match 'unjoin_in_contest' , via: :delete + match 'create_contest' , via: :post + match 'new_join' , via: :post + match 'new' , via: :post + end + member do + match 'add_softapplication' + match 'update_contest' , via: [:put] + match 'show_contest' , via: :get + match 'show_project' , via: :get + match 'show_softapplication', via: :get + match 'show_participator' , via: :get + match 'add' , via: [:get, :post] + match 'add_softapplication' , via: [:get, :post] + match 'create' , via: :post + match 'settings' , via: [:get, :post] + end + end + + resources :stores do + collection do + match 'search', via: [:get, :post] + end + end + + resources :forums do + collection do + match 'search_forum', :via => [:get, :post] + end + member do + post 'create_memo' + match 'search_memo', :via => [:get, :post] + end + resources :memos do + collection do + get "quote" + end + end + end + + + resources :shares + + #added by william + get "tags/index" + + get "tags/show" + + get "praise_tread/praise_plus" + + get "praise_tread/tread_plus" + #end + + root :to => 'welcome#index', :as => 'home' + + #added by baiyu + match 'git_usage/ch_usage', :controller => 'git_usage', :action => 'ch_usage', :via => :get, :as => 'ch_usage' + match 'git_usage/en_usage', :controller => 'git_usage', :action => 'en_usage', :via => :get, :as => 'en_usage' + #added by nie + match '/projects/search', :controller => 'projects', :action => 'search', :via => [:get, :post] + match '/users/search', :controller => 'users', :action => 'search', :via => [:get, :post] + #end + match 'login', :to => 'account#login', :as => 'signin', :via => [:get, :post] + match 'logout', :to => 'account#logout', :as => 'signout', :via => [:get, :post] + match 'account/register', :to => 'account#register', :via => [:get, :post], :as => 'register' + match 'account/lost_password', :to => 'account#lost_password', :via => [:get, :post], :as => 'lost_password' + match 'account/activate', :to => 'account#activate', :via => :get + + match '/news/preview', :controller => 'previews', :action => 'news', :as => 'preview_news', :via => [:get, :post, :put] + match '/issues/preview/new/:project_id', :to => 'previews#issue', :as => 'preview_new_issue', :via => [:get, :post, :put] + match '/issues/preview/edit/:id', :to => 'previews#issue', :as => 'preview_edit_issue', :via => [:get, :post, :put] + match '/issues/preview', :to => 'previews#issue', :as => 'preview_issue', :via => [:get, :post, :put] + + match 'projects/:id/wiki', :to => 'wikis#edit', :via => :post + match 'projects/:id/wiki/destroy', :to => 'wikis#destroy', :via => [:get, :post] + + # boards + match 'boards/:board_id/topics/new', :to => 'messages#new', :via => [:get, :post], :as => 'new_board_message' + get 'boards/:board_id/topics/:id', :to => 'messages#show', :as => 'board_message' + match 'boards/:board_id/topics/quote/:id', :to => 'messages#quote', :via => [:get, :post] + get 'boards/:board_id/topics/:id/edit', :to => 'messages#edit' + + post 'boards/:board_id/topics/preview', :to => 'messages#preview', :as => 'preview_board_message' + post 'boards/:board_id/topics/:id/replies', :to => 'messages#reply' + post 'boards/:board_id/topics/:id/edit', :to => 'messages#edit' + post 'boards/:board_id/topics/:id/destroy', :to => 'messages#destroy' + # boards end + post 'bids/homework_destroy', :to => 'bids#homework_destroy' + + # Misc issue routes. TODO: move into resources + match '/issues/auto_complete', :to => 'auto_completes#issues', :via => :get, :as => 'auto_complete_issues' + match '/issues/context_menu', :to => 'context_menus#issues', :as => 'issues_context_menu', :via => [:get, :post] + match '/issues/changes', :to => 'journals#index', :as => 'issue_changes', :via => :get + match '/issues/:id/quoted', :to => 'journals#new', :id => /\d+/, :via => :post, :as => 'quoted_issue' + + match '/journals/diff/:id', :to => 'journals#diff', :id => /\d+/, :via => :get + match '/journals/edit/:id', :to => 'journals#edit', :id => /\d+/, :via => [:get, :post] + match '/journals/destroy/:id', :to => 'journals#destroy', :id => /\d+/, :via => [:get, :post] + + + get '/projects/:project_id/issues/gantt', :to => 'gantts#show', :as => 'project_gantt' + get '/issues/gantt', :to => 'gantts#show' + + get '/projects/:project_id/issues/calendar', :to => 'calendars#show', :as => 'project_calendar' + get '/issues/calendar', :to => 'calendars#show' + + get 'projects/:id/issues/report', :to => 'reports#issue_report', :as => 'project_issues_report' + get 'projects/:id/issues/report/:detail', :to => 'reports#issue_report_details', :as => 'project_issues_report_details' + post '/users/:id/user_activities', :to => 'users#show', :as => "user_activities" + + #added by young + resources :users do + member do + match 'user_projects', :to => 'users#user_projects', :via => :get + match 'user_activities', :to => 'users#show', :via => :get, :as => "user_activities" + match 'user_newfeedback', :to => 'users#user_newfeedback', :via => :get, :as => "user_newfeedback" + match 'watch_calls', :controller => 'users', :action => 'watch_bids', :via => [:get , :post] + match 'info', :to => 'users#info', :via => [:get , :post], :as => 'user_info' + match 'user_watchlist', :to => 'users#user_watchlist', :via => :get, :as => "user_watchlist" #add by huang + match 'user_fanslist', :to => 'users#user_fanslist', :via => :get, :as => "user_fanslist" #add by huang + match 'user_courses', :to => 'users#user_courses', :via => :get + match 'user_homeworks', :to => 'users#user_homeworks', :via => :get + match 'watch_projects', :to => 'users#watch_projects', :via => :get + # added by bai + match 'show_score', :to => 'users#show_score', :via => :get + match 'topic_score_index', :controller => 'users', :action => 'topic_score_index', :via => [:get, :post] + match 'project_score_index', :to => 'users#project_score_index', :via => :get + match 'activity_score_index', :to => 'users#activity_score_index', :via => :get + match 'influence_score_index', :to => 'users#influence_score_index', :via => :get + match 'score_index', :to => 'users#score_index', :via => :get + + match 'show_projects_score', :to => 'projects#show_projects_score', :via => [:get, :post] + match 'issue_score_index', :to => 'projects#issue_score_index', :via => [:get, :post] + match 'news_score_index', :to => 'projects#news_score_index', :via => [:get, :post] + match 'file_score_index', :to => 'projects#file_score_index', :via => [:get, :post] + match 'code_submit_score_index', :to => 'projects#code_submit_score_index', :via => [:get, :post] + match 'projects_topic_score_index', :to => 'projects#projects_topic_score_index', :via => [:get, :post] + # end + end + end + match 'users/:id/user_newfeedback', :to => 'users#user_newfeedback', :via => :get, :as => "feedback" + match 'users/:id/user_projects', :controller => 'users', :action => 'user_projects', :via => :get + #match 'user/:id/watch_calls', :controller => 'users', :action => 'watch_bids', :via => [:get , :post] + + #end + match 'my/account', :controller => 'my', :action => 'account', :via => [:get, :post] + match 'my/account/destroy', :controller => 'my', :action => 'destroy', :via => [:get, :post] + match 'my/page', :controller => 'my', :action => 'page', :via => :get + match 'my', :controller => 'my', :action => 'index', :via => :get # Redirects to my/page + match 'my/reset_rss_key', :controller => 'my', :action => 'reset_rss_key', :via => :post + match 'my/reset_api_key', :controller => 'my', :action => 'reset_api_key', :via => :post + match 'my/password', :controller => 'my', :action => 'password', :via => [:get, :post] + match 'my/page_layout', :controller => 'my', :action => 'page_layout', :via => :get + match 'my/add_block', :controller => 'my', :action => 'add_block', :via => :post + match 'my/remove_block', :controller => 'my', :action => 'remove_block', :via => :post + match 'my/order_blocks', :controller => 'my', :action => 'order_blocks', :via => :post + + resources :users + match 'users/:id/memberships/:membership_id', :to => 'users#edit_membership', :via => :put, :as => 'user_membership' + match 'users/:id/memberships/:membership_id', :to => 'users#destroy_membership', :via => :delete + match 'users/:id/memberships', :to => 'users#edit_membership', :via => :post, :as => 'user_memberships' + ################# added by william + match 'users/tag_save', :to => 'users#tag_save', :via => :post, :as => 'tag' + + post 'watchers/watch', :to => 'watchers#watch', :as => 'watch' + delete 'watchers/watch', :to => 'watchers#unwatch' + get 'watchers/new', :to => 'watchers#new' + post 'watchers', :to => 'watchers#create' + post 'watchers/append', :to => 'watchers#append' + delete 'watchers', :to => 'watchers#destroy' + get 'watchers/autocomplete_for_user', :to => 'watchers#autocomplete_for_user' + # Specific routes for issue watchers API + post 'issues/:object_id/watchers', :to => 'watchers#create', :object_type => 'issue' + delete 'issues/:object_id/watchers/:user_id' => 'watchers#destroy', :object_type => 'issue' + + resources :bids, :only=>[:edit,:update,:show] do + member do + match 'homework_ajax_modal' + end + end + resources :projects do + member do + post 'finishcourse' + post 'restartcourse' + get 'settings(/:tab)', :action => 'settings', :as => 'settings' + #by young + get 'member', :controller => 'projects', :action => 'member', :as => 'member' + get 'file', :action => 'file', :as => 'file' + get 'statistics', :action => 'statistics', :as => 'statistics' + get 'feedback', :action => 'feedback', :as => 'project_feedback' + get 'watcherlist', :action=> 'watcherlist' + match 'user_watcherlist', :to => 'projects#watcherlist', :via => :get, :as => "watcherlist" #add by huang + get 'homework', :action => 'homework', :as => 'homework' + get 'new_homework', :action => 'new_homework', :as => 'new_homework' + #get 'news', :action => 'news', :as => 'news' + #end + post 'modules' + post 'archive' + post 'unarchive' + post 'close' + post 'reopen' + match 'copy', :via => [:get, :post] + end + + + #by young + match '/member', :controller => 'projects', :action => 'member', :as => 'member', :via => :get + match '/file', :controller => 'projects', :action => 'file', :as => 'file', :via => :get + match '/statistics', :controller => 'projects', :action => 'statistics', :as => 'statistics', :via => :get + # match '/investor', :controller => 'projects', :action => 'investor', :as => 'investor', :via => :get + match '/homework', :controller => 'projects', :action => 'homework', :as => 'homework', :via => :get + + + # match '/activity', :controller => 'activities', :action => 'index', :as => 'activity', :via => :get + # match '/repository', :controller => 'repositories', :action => 'show', :repository_id => nil, :path => nil, :rev => nil, :as => 'repository', :via => :get + # match '/', :controller => 'projects', :action => 'show', :as => 'project_show', :via => :get + # get 'projects/:project_id/show', :to => 'projects#show', :as => 'project_show' + # get 'projects/:project_id/repository', :to => 'repositories#show', :as => 'project_repository' + + # match '/show', :controller => 'projects', :action => 'show', :as => 'project_show', :via => :get + match '/watcherlist', :controller=>'projects', :action=> 'watcherlist', :as => 'watcherlist', :via => :get #add by huang + # matche '/news', :controller => 'news', :action => 'index', :as => 'news', :via => :get + #end + + resources :memberships, :shallow => true, :controller => 'members', :only => [:index, :show, :new, :create, :update, :destroy] do + collection do + get 'autocomplete' + end + end + + resource :enumerations, :controller => 'project_enumerations', :only => [:update, :destroy] + + get 'issues/:copy_from/copy', :to => 'issues#new', :as => 'copy_issue' + resources :issues, :only => [:index, :new, :create] do + resources :time_entries, :controller => 'timelog' do + collection do + get 'report' + end + end + end + # issue form update + match 'issues/update_form', :controller => 'issues', :action => 'update_form', :via => [:put, :post], :as => 'issue_form' + + resources :files, :only => [:index, :new, :create] + + resources :versions, :except => [:index, :show, :edit, :update, :destroy] do + collection do + put 'close_completed' + end + end + get 'versions.:format', :to => 'versions#index' + get 'roadmap', :to => 'versions#index', :format => false + get 'versions', :to => 'versions#index' + + resources :news, :except => [:show, :edit, :update, :destroy] + resources :time_entries, :controller => 'timelog' do + get 'report', :on => :collection + end + resources :queries, :only => [:new, :create] + resources :issue_categories, :shallow => true + resources :documents, :except => [:show, :edit, :update, :destroy] + resources :boards + resources :repositories, :shallow => true, :except => [:index, :show] do + member do + match 'committers', :via => [:get, :post] + end + end + resources :repositories, :except => [:index, :show] do + member do + get 'newrepo', :via => [:get, :post] + # get 'create', :via=>[:get, :post] + end + end + match 'wiki/index', :controller => 'wiki', :action => 'index', :via => :get + resources :wiki, :except => [:index, :new, :create], :as => 'wiki_page' do + member do + get 'rename' + post 'rename' + get 'history' + get 'diff' + match 'preview', :via => [:post, :put] + post 'protect' + post 'add_attachment' + end + collection do + get 'export' + get 'date_index' + end + end + match 'wiki', :controller => 'wiki', :action => 'show', :via => :get + get 'wiki/:id/:version', :to => 'wiki#show', :constraints => {:version => /\d+/} + delete 'wiki/:id/:version', :to => 'wiki#destroy_version' + get 'wiki/:id/:version/annotate', :to => 'wiki#annotate' + get 'wiki/:id/:version/diff', :to => 'wiki#diff' + end + + resources :issues do + collection do + match 'bulk_edit', :via => [:get, :post] + post 'bulk_update' + end + resources :time_entries, :controller => 'timelog' do + collection do + get 'report' + end + end + resources :relations, :shallow => true, :controller => 'issue_relations', :only => [:index, :show, :create, :destroy] + end + match '/issues', :controller => 'issues', :action => 'destroy', :via => :delete + + resources :queries, :except => [:show] + + resources :news, :only => [:index, :show, :edit, :update, :destroy] + match '/news/:id/comments', :to => 'comments#create', :via => :post + match '/news/:id/comments/:comment_id', :to => 'comments#destroy', :via => :delete + + resources :versions, :only => [:show, :edit, :update, :destroy] do + post 'status_by', :on => :member + end + + resources :documents, :only => [:show, :edit, :update, :destroy] do + post 'add_attachment', :on => :member + end + + match '/time_entries/context_menu', :to => 'context_menus#time_entries', :as => :time_entries_context_menu, :via => [:get, :post] + + resources :time_entries, :controller => 'timelog', :except => :destroy do + collection do + get 'report' + get 'bulk_edit' + post 'bulk_update' + end + end + match '/time_entries/:id', :to => 'timelog#destroy', :via => :delete, :id => /\d+/ + # TODO: delete /time_entries for bulk deletion + match '/time_entries/destroy', :to => 'timelog#destroy', :via => :delete + + get 'projects/:id/activity', :to => 'activities#index' + get 'projects/:id/activity.:format', :to => 'activities#index' + get 'activity', :to => 'activities#index' + + # repositories routes + get 'projects/:id/repository/:repository_id/statistics', :to => 'repositories#stats' + get 'projects/:id/repository/:repository_id/graph', :to => 'repositories#graph' + + get 'projects/:id/repository/:repository_id/changes(/*path(.:ext))', :to => 'repositories#changes' + + get 'projects/:id/repository/:repository_id/revisions/:rev', :to => 'repositories#revision' + get 'projects/:id/repository/:repository_id/revision', :to => 'repositories#revision' + post 'projects/:id/repository/:repository_id/revisions/:rev/issues', :to => 'repositories#add_related_issue' + delete 'projects/:id/repository/:repository_id/revisions/:rev/issues/:issue_id', :to => 'repositories#remove_related_issue' + get 'projects/:id/repository/:repository_id/revisions', :to => 'repositories#revisions' + get 'projects/:id/repository/:repository_id/revisions/:rev/:action(/*path(.:ext))', + :controller => 'repositories', + :format => false, + :constraints => { + :action => /(browse|show|entry|raw|annotate|diff)/, + :rev => /[a-z0-9\.\-_]+/ + } + + get 'projects/:id/repository/statistics', :to => 'repositories#stats' + get 'projects/:id/repository/graph', :to => 'repositories#graph' + + get 'projects/:id/repository/changes(/*path(.:ext))', :to => 'repositories#changes' + + get 'projects/:id/repository/revisions', :to => 'repositories#revisions' + get 'projects/:id/repository/revisions/:rev', :to => 'repositories#revision' + get 'projects/:id/repository/revision', :to => 'repositories#revision' + post 'projects/:id/repository/revisions/:rev/issues', :to => 'repositories#add_related_issue' + delete 'projects/:id/repository/revisions/:rev/issues/:issue_id', :to => 'repositories#remove_related_issue' + get 'projects/:id/repository/revisions/:rev/:action(/*path(.:ext))', + :controller => 'repositories', + :format => false, + :constraints => { + :action => /(browse|show|entry|raw|annotate|diff)/, + :rev => /[a-z0-9\.\-_]+/ + } + get 'projects/:id/repository/:repository_id/:action(/*path(.:ext))', + :controller => 'repositories', + :action => /(browse|show|entry|raw|changes|annotate|diff)/ + get 'projects/:id/repository/:action(/*path(.:ext))', + :controller => 'repositories', + :action => /(browse|show|entry|raw|changes|annotate|diff)/ + + get 'projects/:id/repository/:repository_id', :to => 'repositories#show', :path => nil + get 'projects/:id/repository', :to => 'repositories#show', :path => nil + + # additional routes for having the file name at the end of url + get 'attachments/:id/:filename', :to => 'attachments#show', :id => /\d+/, :filename => /.*/, :as => 'named_attachment' + get 'attachments/download/:id/:filename', :to => 'attachments#download', :id => /\d+/, :filename => /.*/, :as => 'download_named_attachment' + get 'attachments/download/:id', :to => 'attachments#download', :id => /\d+/ + get 'attachments/thumbnail/:id(/:size)', :to => 'attachments#thumbnail', :id => /\d+/, :size => /\d+/, :as => 'thumbnail' + get 'attachments/autocomplete' + match 'attachments/autocomplete', :to => 'attachments#autocomplete', via: [:post] + post 'attachments/relationfile', to: 'attachments#add_exist_file_to_project', as: 'attach_relation' + resources :attachments, :only => [:show, :destroy] + + resources :groups do + member do + get 'autocomplete_for_user' + end + end + + match 'groups/:id/users', :controller => 'groups', :action => 'add_users', :id => /\d+/, :via => :post, :as => 'group_users' + match 'groups/:id/users/:user_id', :controller => 'groups', :action => 'remove_user', :id => /\d+/, :via => :delete, :as => 'group_user' + match 'groups/destroy_membership/:id', :controller => 'groups', :action => 'destroy_membership', :id => /\d+/, :via => :post + match 'groups/edit_membership/:id', :controller => 'groups', :action => 'edit_membership', :id => /\d+/, :via => :post + + resources :trackers, :except => :show do + collection do + match 'fields', :via => [:get, :post] + end + end + resources :issue_statuses, :except => :show do + collection do + post 'update_issue_done_ratio' + end + end + resources :custom_fields, :except => :show + resources :roles do + collection do + match 'permissions', :via => [:get, :post] + end + end + resources :enumerations, :except => :show + match 'enumerations/:type', :to => 'enumerations#index', :via => :get + + get 'projects/:id/search', :controller => 'search', :action => 'index' + get 'search', :controller => 'search', :action => 'index' + + match 'mail_handler', :controller => 'mail_handler', :action => 'index', :via => :post + + match 'admin', :controller => 'admin', :action => 'index', :via => :get + match 'admin/projects', :controller => 'admin', :action => 'projects', :via => :get + match 'admin/plugins', :controller => 'admin', :action => 'plugins', :via => :get + match 'admin/info', :controller => 'admin', :action => 'info', :via => :get + match 'admin/test_email', :controller => 'admin', :action => 'test_email', :via => :get + match 'admin/default_configuration', :controller => 'admin', :action => 'default_configuration', :via => :post + + resources :auth_sources do + member do + get 'test_connection', :as => 'try_connection' + end + collection do + get 'autocomplete_for_new_user' + end + end + + + + match 'workflows', :controller => 'workflows', :action => 'index', :via => :get + match 'workflows/edit', :controller => 'workflows', :action => 'edit', :via => [:get, :post] + match 'workflows/permissions', :controller => 'workflows', :action => 'permissions', :via => [:get, :post] + match 'workflows/copy', :controller => 'workflows', :action => 'copy', :via => [:get, :post] + match 'settings', :controller => 'settings', :action => 'index', :via => :get + match 'settings/edit', :controller => 'settings', :action => 'edit', :via => [:get, :post] + match 'settings/plugin/:id', :controller => 'settings', :action => 'plugin', :via => [:get, :post], :as => 'plugin_settings' + + match 'sys/projects', :to => 'sys#projects', :via => :get + match 'sys/projects/:id/repository', :to => 'sys#create_project_repository', :via => :post + match 'sys/fetch_changesets', :to => 'sys#fetch_changesets', :via => :get + + match 'uploads', :to => 'attachments#upload', :via => :post + # Added by Tao + match 'upload_avatar', :to => 'avatar#upload', :via => :post + # Endof Tao's code + get 'robots.txt', :to => 'welcome#robots' + + Dir.glob File.expand_path("plugins/*", Rails.root) do |plugin_dir| + file = File.join(plugin_dir, "config/routes.rb") + if File.exists?(file) + begin + instance_eval File.read(file) + rescue Exception => e + puts "An error occurred while loading the routes definition of #{File.basename(plugin_dir)} plugin (#{file}): #{e.message}." + exit 1 + end + end + end + + ##############测试留言功能 fq + post 'words/new', :to => 'words#new' + post 'words/create', :to => 'words#create' + post 'words/append', :to => 'words#append' + post 'words/create_reply', :to => 'words#create_reply' + delete 'words/destroy', :to => 'words#destroy' + get 'words/more', :to => 'words#more' + get 'words/back', :to=> 'words#back' + ############## fq + post 'calls/create', :to => 'bids#create' + delete 'calls/destroy', :to => 'bids#destroy' + match 'calls/new', :controller => 'bids', :action => 'new', :via => [:get , :post] + get 'calls/more', :to => 'bids#more' + get 'calls/back', :to=> 'bids#back' + match 'calls/new_bid', :controller => 'bids', :action => 'new_bid' + match 'contest/new_contest', :controller => 'bids', :action => 'new_contest' #huang + match 'calls/:id/show_project', :controller => 'bids', :action => 'show_project', :as => 'project_for_bid' + match 'calls/:id/show_project_homework', :controller => 'bids', :action => 'show_project_homework', :as => 'project_for_bid_homework' # by huang + match 'calls/:id/add', :controller => 'bids', :action => 'add' + match 'calls/:id/add_homework', :controller => 'bids', :action => 'add_homework', via: :post + match 'calls/:id/new_submit_homework', to: 'bids#new_submit_homework', via: :get, as: 'new_submit_homework' + match 'words/add_project_respond', :controller => 'words', :action => 'add_project_respond' + match 'words/:id/leave_project_message', :controller => 'words', :action => 'leave_project_message' + + match 'projects/:id/feedback', :to => 'projects#feedback', :via => :get, :as => 'project_feedback' + match 'calls/create_bid', :to => 'bids#create_bid' + match 'contest/create_contest', :to => 'bids#create_contest' #huang + match 'calls/create_homework', :to => 'bids#create_homework' + match 'calls/:id/homework_respond', :to => 'bids#homework_respond' + match 'calls/:id/homework_statistics', :to => 'bids#homework_statistics' + match 'calls/:id/fork', :to => 'bids#fork', :as => 'fork' + match 'calls/:id/create_fork', :to => 'bids#create_fork' + match 'project/enterprise_course', :to => 'projects#enterprise_course' + match 'project/course_enterprise', :to => 'projects#course_enterprise' + match 'calls/:id/show_course', :to => 'bids#show_course', :as => 'show_course' + match 'calls/:id/show_bid_project', :to => 'bids#show_bid_project', :as => 'show_bid_project' + match 'calls/:id/show_bid_user', :to => 'bids#show_bid_user', :as => 'show_bid_user' + + match 'project/:id/share', :to => 'projects#share', :as => 'share_show' #share + + post 'join_in/join', :to => 'courses#join', :as => 'join' + delete 'join_in/join', :to => 'courses#unjoin' + post 'calls/:id/join_in_contest', :to => 'bids#join_in_contest', :as => 'join_in_contest' + delete 'calls/:id/join_in_contest', :to => 'bids#unjoin_in_contest' + match 'calls/:id/show_participator', :to => 'bids#show_participator' #bai + match 'calls/:id/update_contest', :to => 'bids#update_contest' #bai + match 'calls/:id/settings', :to => 'bids#settings' #bai + + delete 'attachment/:id', :to => 'attachments#delete_homework' + match 'new_join', :to => 'projects#new_join', :as => 'try_join' + match 'new_join_in_contest', :to => 'bids#new_join', :as => 'try_join_in_contest' + match 'projects/:id/respond', :to => 'projects#project_respond', :via => :post + match 'calls/:id/manage',:to => 'bids#manage',:via => [:get,:post] + match 'project/course', :to => 'projects#course', :as => 'course' + + #added by william + # match 'calls/:id/set_results',:controller => 'bids', :action => 'set_results',:via => [:get,:post],:as => 'set_results' + # match 'calls/:id/set_prizes',:controller => 'bids',:action => 'set_prizes',:as => 'set_prizes' + match 'calls/:id/set_reward',:controller => 'bids',:action => 'set_reward',:as => 'set_reward' + + # added by young + match 'calls', :controller => 'bids', :action => 'index' + + match 'calls/:id', :controller => 'bids', :action => 'show', :as => 'respond' + match 'contest', :controller => 'bids', :action => 'contests', :as => 'contest' #modified @20140403 + + + ######################## + ##added by wen########## + #######confusing######## + post 'school/get_options/:province', :to => 'school#get_options' + get 'school/get_options/:province', :to => 'school#get_options' + + + + ######added by nie + match 'tags/show_projects_tags',:to => 'tags#show_projects_tags' + ########### added by liuping + match 'tags/add_tag',:to => 'tags#add_tag',:as=>"add_tag" + match 'tags/delete_tag',:to => 'tags#delete_tag',:as=>"add_tag" + match 'tags/show_all',:to => 'tags#show_all' + match 'parise_tread/praise_plus',:to => 'parise_tread#praise_plus',:as=>"praise" + match 'parise_tread/tread_plus',:to => 'parise_tread#tread_plus',:as=>"tread" + match 'tags/delete',:to=>'tags#delete' + match 'tags/remove_tag',:to=>'tags#remove_tag',:as=>"remove_tag" + + match 'words/add_brief_introdution', :controller => 'words', :action => 'add_brief_introdution' + + get ':controller(/:action(/:id))' +end diff --git a/db/migrate/20130828004955_stored_status_procedure.rb b/db/migrate/20130828004955_stored_status_procedure.rb index 884c47bba..248fc488c 100644 --- a/db/migrate/20130828004955_stored_status_procedure.rb +++ b/db/migrate/20130828004955_stored_status_procedure.rb @@ -8,17 +8,15 @@ BEGIN DECLARE user_changesets_count int(10); DECLARE _done tinyint(1) DEFAULT 0; DECLARE cur_user CURSOR FOR - SELECT - user_id, - COUNT(*) - FROM changesets - WHERE user_id != '' - GROUP BY user_id; + SELECT + users.id + FROM users + WHERE users.type = 'User' AND users.status = 1 AND users.admin = 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = 1; OPEN cur_user; loop_xxx: LOOP - FETCH cur_user INTO user_uid, user_changesets_count; + FETCH cur_user INTO user_uid ; IF _done = 1 THEN LEAVE loop_xxx; END IF; @@ -35,7 +33,7 @@ LOOP SELECT COUNT(*) INTO journals_for_messages_count FROM journals_for_messages - WHERE user_id = user_uid; + WHERE user_id = user_uid ; SELECT COUNT(*) INTO journals_count FROM journals @@ -60,6 +58,12 @@ LOOP COUNT(*) INTO activities_count FROM activities WHERE user_id = user_uid; + SELECT + COUNT(*) INTO user_changesets_count + FROM changesets + WHERE changesets.user_id = user_uid; + + SET total_count = journals_for_messages_count * 0.05 + journals_count * 0.1 + @@ -97,7 +101,7 @@ BEGIN projects.id FROM projects WHERE projects.status <> 9 - AND projects.is_public = 1 ; + AND projects.is_public = 1 AND projects.project_type = 0 ; DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = 1; OPEN cur_project; diff --git a/db/migrate/20140327071420_create_contests.rb b/db/migrate/20140327071420_create_contests.rb new file mode 100644 index 000000000..0ec04a6c5 --- /dev/null +++ b/db/migrate/20140327071420_create_contests.rb @@ -0,0 +1,15 @@ +class CreateContests < ActiveRecord::Migration + def change + create_table :contests do |t| + t.string :name + t.integer :budget + t.integer :author_id + t.date :deadline + t.string :description + t.integer :commit + t.string :password + + t.timestamps + end + end +end diff --git a/db/migrate/20140327073052_create_contesting_projects.rb b/db/migrate/20140327073052_create_contesting_projects.rb new file mode 100644 index 000000000..b9dc336b2 --- /dev/null +++ b/db/migrate/20140327073052_create_contesting_projects.rb @@ -0,0 +1,12 @@ +class CreateContestingProjects < ActiveRecord::Migration + def change + create_table :contesting_projects do |t| + t.integer :project_id + t.string :contest_id + t.integer :user_id + t.string :description + + t.timestamps + end + end +end diff --git a/db/migrate/20140327082704_change_created_at_of_contests_to_created_on.rb b/db/migrate/20140327082704_change_created_at_of_contests_to_created_on.rb new file mode 100644 index 000000000..32d52d35a --- /dev/null +++ b/db/migrate/20140327082704_change_created_at_of_contests_to_created_on.rb @@ -0,0 +1,11 @@ +class ChangeCreatedAtOfContestsToCreatedOn < ActiveRecord::Migration + def self.up + rename_column :contests, :created_at, :created_on + rename_column :contests, :updated_at, :updated_on + end + + def self.down + rename_column :contests, :created_on, :created_at + rename_column :contests, :updated_on, :updated_at + end +end diff --git a/db/migrate/20140401121611_add_reward_to_contesting_projects.rb b/db/migrate/20140401121611_add_reward_to_contesting_projects.rb new file mode 100644 index 000000000..8ac71c94b --- /dev/null +++ b/db/migrate/20140401121611_add_reward_to_contesting_projects.rb @@ -0,0 +1,5 @@ +class AddRewardToContestingProjects < ActiveRecord::Migration + def change + add_column :contesting_projects, :reward, :string + end +end diff --git a/db/migrate/20140402023357_create_join_in_competitions.rb b/db/migrate/20140402023357_create_join_in_competitions.rb new file mode 100644 index 000000000..b7fba87f1 --- /dev/null +++ b/db/migrate/20140402023357_create_join_in_competitions.rb @@ -0,0 +1,10 @@ +class CreateJoinInCompetitions < ActiveRecord::Migration + def change + create_table :join_in_competitions do |t| + t.integer :user_id + t.integer :competition_id + + t.timestamps + end + end +end diff --git a/db/migrate/20140404030103_create_softapplications.rb b/db/migrate/20140404030103_create_softapplications.rb new file mode 100644 index 000000000..f9094d9c9 --- /dev/null +++ b/db/migrate/20140404030103_create_softapplications.rb @@ -0,0 +1,14 @@ +class CreateSoftapplications < ActiveRecord::Migration + def change + create_table :softapplications do |t| + t.string :name + t.string :description + t.integer :app_type_id + t.string :app_type_name + t.string :android_min_version_available + t.integer :user_id + + t.timestamps + end + end +end diff --git a/db/migrate/20140410015850_add_contest_id_to_softapplications.rb b/db/migrate/20140410015850_add_contest_id_to_softapplications.rb new file mode 100644 index 000000000..b7b73a4aa --- /dev/null +++ b/db/migrate/20140410015850_add_contest_id_to_softapplications.rb @@ -0,0 +1,5 @@ +class AddContestIdToSoftapplications < ActiveRecord::Migration + def change + add_column :softapplications, :contest_id, :integer + end +end diff --git a/db/migrate/20140410020848_add_softapplication_id_to_softapplications.rb b/db/migrate/20140410020848_add_softapplication_id_to_softapplications.rb new file mode 100644 index 000000000..e4a51f535 --- /dev/null +++ b/db/migrate/20140410020848_add_softapplication_id_to_softapplications.rb @@ -0,0 +1,5 @@ +class AddSoftapplicationIdToSoftapplications < ActiveRecord::Migration + def change + add_column :softapplications, :softapplication_id, :integer + end +end diff --git a/db/migrate/20140411003234_create_contesting_softapplications.rb b/db/migrate/20140411003234_create_contesting_softapplications.rb new file mode 100644 index 000000000..118b518f5 --- /dev/null +++ b/db/migrate/20140411003234_create_contesting_softapplications.rb @@ -0,0 +1,12 @@ +class CreateContestingSoftapplications < ActiveRecord::Migration + def change + create_table :contesting_softapplications do |t| + t.integer :softapplication_id + t.integer :contest_id + t.integer :user_id + t.string :description + + t.timestamps + end + end +end diff --git a/db/migrate/20140411004155_add_reward_to_contesting_softapplications.rb b/db/migrate/20140411004155_add_reward_to_contesting_softapplications.rb new file mode 100644 index 000000000..e5e3db183 --- /dev/null +++ b/db/migrate/20140411004155_add_reward_to_contesting_softapplications.rb @@ -0,0 +1,5 @@ +class AddRewardToContestingSoftapplications < ActiveRecord::Migration + def change + add_column :contesting_softapplications, :reward, :string + end +end diff --git a/db/migrate/20140411005214_add_is_public_to_softapplications.rb b/db/migrate/20140411005214_add_is_public_to_softapplications.rb new file mode 100644 index 000000000..15d81699e --- /dev/null +++ b/db/migrate/20140411005214_add_is_public_to_softapplications.rb @@ -0,0 +1,5 @@ +class AddIsPublicToSoftapplications < ActiveRecord::Migration + def change + add_column :softapplications, :is_public, :integer + end +end diff --git a/db/migrate/20140414012423_add_applicationdevelopers_to_softapplications.rb b/db/migrate/20140414012423_add_applicationdevelopers_to_softapplications.rb new file mode 100644 index 000000000..2a4ad1081 --- /dev/null +++ b/db/migrate/20140414012423_add_applicationdevelopers_to_softapplications.rb @@ -0,0 +1,5 @@ +class AddApplicationdevelopersToSoftapplications < ActiveRecord::Migration + def change + add_column :softapplications, :application_developers, :string + end +end diff --git a/db/migrate/20140415090718_remove_schoolid_from_courses.rb b/db/migrate/20140415090718_remove_schoolid_from_courses.rb new file mode 100644 index 000000000..96b3a4ace --- /dev/null +++ b/db/migrate/20140415090718_remove_schoolid_from_courses.rb @@ -0,0 +1,11 @@ +class RemoveSchoolidFromCourses < ActiveRecord::Migration + def up + remove_column :courses, :school_id + + end + + def down + add_column :courses, :school_id, :integer + + end +end diff --git a/db/migrate/20140415090829_add_school_name_to_courses.rb b/db/migrate/20140415090829_add_school_name_to_courses.rb new file mode 100644 index 000000000..1c9175e12 --- /dev/null +++ b/db/migrate/20140415090829_add_school_name_to_courses.rb @@ -0,0 +1,6 @@ +class AddSchoolNameToCourses < ActiveRecord::Migration + def change + add_column :courses, :school_name, :string + + end +end diff --git a/db/migrate/20140417085550_rename_courses_column_school_name.rb b/db/migrate/20140417085550_rename_courses_column_school_name.rb new file mode 100644 index 000000000..9a7d81067 --- /dev/null +++ b/db/migrate/20140417085550_rename_courses_column_school_name.rb @@ -0,0 +1,9 @@ +class RenameCoursesColumnSchoolName < ActiveRecord::Migration + def up + rename_column :courses, :school_name, :school_id + end + + def down + rename_column :courses, :school_id, :school_name + end +end diff --git a/db/migrate/20140417090022_change_courses_column_school_id.rb b/db/migrate/20140417090022_change_courses_column_school_id.rb new file mode 100644 index 000000000..813dbfdf9 --- /dev/null +++ b/db/migrate/20140417090022_change_courses_column_school_id.rb @@ -0,0 +1,9 @@ +class ChangeCoursesColumnSchoolId < ActiveRecord::Migration + def up + change_column :courses, :school_id, :integer + end + + def down + change_column :courses, :school_id, :string + end +end diff --git a/db/migrate/20140417091429_add_school_id_to_user_extensions.rb b/db/migrate/20140417091429_add_school_id_to_user_extensions.rb new file mode 100644 index 000000000..f97e8b9e3 --- /dev/null +++ b/db/migrate/20140417091429_add_school_id_to_user_extensions.rb @@ -0,0 +1,5 @@ +class AddSchoolIdToUserExtensions < ActiveRecord::Migration + def change + add_column :user_extensions, :school_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index a7e2244d2..bfbb7a26e 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 => 20140413022725) do +ActiveRecord::Schema.define(:version => 20140417091429) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -23,15 +23,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type" add_index "activities", ["user_id"], :name => "index_activities_on_user_id" - create_table "apply_project_masters", :force => true do |t| - t.integer "user_id" - t.string "apply_type" - t.integer "apply_id" - t.integer "status" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - create_table "attachments", :force => true do |t| t.integer "container_id" t.string "container_type", :limit => 30 @@ -71,20 +62,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type" - create_table "bak_mentioned", :primary_key => "Id", :force => true do |t| - t.string "this_real_name", :limit => 1000 - t.integer "is_mentioned_in" - t.string "context", :limit => 2000 - end - - add_index "bak_mentioned", ["this_real_name", "is_mentioned_in"], :name => "name_mention", :length => {"this_real_name"=>900, "is_mentioned_in"=>nil} - add_index "bak_mentioned", ["this_real_name"], :name => "this_real_name" - add_index "bak_mentioned", ["this_real_name"], :name => "this_real_name_2" - add_index "bak_mentioned", ["this_real_name"], :name => "this_real_name_3", :length => {"this_real_name"=>900} - add_index "bak_mentioned", ["this_real_name"], :name => "this_real_name_4" - add_index "bak_mentioned", ["this_real_name"], :name => "this_real_name_5" - add_index "bak_mentioned", ["this_real_name"], :name => "this_real_name_6" - create_table "biding_projects", :force => true do |t| t.integer "project_id" t.integer "bid_id" @@ -124,11 +101,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id" add_index "boards", ["project_id"], :name => "boards_project_id" - create_table "categories", :primary_key => "Id", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "proj_categories" - end - create_table "changes", :force => true do |t| t.integer "changeset_id", :null => false t.string "action", :limit => 1, :default => "", :null => false @@ -185,6 +157,38 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "comments", ["author_id"], :name => "index_comments_on_author_id" add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type" + create_table "contesting_projects", :force => true do |t| + t.integer "project_id" + t.string "contest_id" + t.integer "user_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + end + + create_table "contesting_softapplications", :force => true do |t| + t.integer "softapplication_id" + t.integer "contest_id" + t.integer "user_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + end + + create_table "contests", :force => true do |t| + t.string "name" + t.integer "budget" + t.integer "author_id" + t.date "deadline" + t.string "description" + t.integer "commit" + t.string "password" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + end + create_table "courses", :force => true do |t| t.integer "tea_id" t.string "name" @@ -261,14 +265,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "documents", ["created_on"], :name => "index_documents_on_created_on" add_index "documents", ["project_id"], :name => "documents_project_id" - create_table "eco_projects", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.integer "eco_proj_id" - t.datetime "date_collected" - end - - add_index "eco_projects", ["proj_id"], :name => "proj_id" - create_table "enabled_modules", :force => true do |t| t.integer "project_id" t.string "name", :null => false @@ -290,137 +286,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type" add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id" - create_table "events", :primary_key => "event_id", :force => true do |t| - t.string "job_name" - t.datetime "event_time" - t.string "event_type", :limit => 20 - end - - create_table "fm_article", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "article_title", :limit => 16777215 - t.text "article_link", :limit => 16777215 - t.text "article_time", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_article", ["proj_id"], :name => "proj_id" - - create_table "fm_bugtracker_link", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_bugtracker_link", ["proj_id"], :name => "proj_id" - - create_table "fm_datametric_link", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_datametric_link", ["proj_id"], :name => "proj_id" - - create_table "fm_dependency_link", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_dependency_link", ["proj_id"], :name => "proj_id" - - create_table "fm_download_link", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "download_link", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_download_link", ["proj_id"], :name => "proj_id" - - create_table "fm_heartbeat", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.float "popularity_score", :limit => 12 - t.float "vitality_score", :limit => 12 - t.integer "subscription" - t.integer "voting_score" - t.integer "voting_count" - t.datetime "date_collected" - end - - add_index "fm_heartbeat", ["proj_id"], :name => "proj_id" - - create_table "fm_license", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_license", ["proj_id"], :name => "proj_id" - - create_table "fm_mailinglist_link", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_mailinglist_link", ["proj_id"], :name => "proj_id" - - create_table "fm_operating_system", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_operating_system", ["proj_id"], :name => "proj_id" - - create_table "fm_programming_language", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_programming_language", ["proj_id"], :name => "proj_id" - - create_table "fm_project_spotlight", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.text "project_name", :limit => 16777215 - t.text "project_spotlight_link", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_project_spotlight", ["proj_id"], :name => "proj_id" - - create_table "fm_release", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.text "release_version", :limit => 16777215 - t.text "release_time", :limit => 16777215 - t.text "release_tag", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_release", ["proj_id"], :name => "proj_id" - - create_table "fm_submit", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "submitter", :limit => 16777215 - t.text "submitter_link", :limit => 16777215 - t.text "submit_time", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_submit", ["proj_id"], :name => "proj_id" - - create_table "fm_summary", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.text "description", :limit => 16777215 - t.datetime "date_collected" - end - - add_index "fm_summary", ["proj_id"], :name => "proj_id" - create_table "forums", :force => true do |t| t.string "name", :null => false t.string "description", :default => "" @@ -521,6 +386,13 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "issues", ["status_id"], :name => "index_issues_on_status_id" add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id" + create_table "join_in_competitions", :force => true do |t| + t.integer "user_id" + t.integer "competition_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "join_in_contests", :force => true do |t| t.integer "user_id" t.integer "bid_id" @@ -646,22 +518,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "news", ["created_on"], :name => "index_news_on_created_on" add_index "news", ["project_id"], :name => "news_project_id" - create_table "no_uses", :force => true do |t| - t.integer "user_id", :null => false - t.string "no_use_type" - t.integer "no_use_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "ohloh_tagged", :force => true do |t| - t.integer "proj_id", :default => 0, :null => false - t.string "description", :limit => 100, :null => false - t.datetime "date_collected" - end - - add_index "ohloh_tagged", ["proj_id"], :name => "proj_id" - create_table "open_id_authentication_associations", :force => true do |t| t.integer "issued" t.integer "lifetime" @@ -677,19 +533,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do t.string "salt", :null => false end - create_table "open_source_projects", :force => true do |t| - t.string "name" - t.text "description" - t.integer "commit_count", :default => 0 - t.integer "code_line", :default => 0 - t.integer "users_count", :default => 0 - t.date "last_commit_time" - t.string "url" - t.date "date_collected" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - create_table "praise_tread_caches", :force => true do |t| t.integer "object_id", :null => false t.string "object_type" @@ -769,23 +612,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "queries", ["project_id"], :name => "index_queries_on_project_id" add_index "queries", ["user_id"], :name => "index_queries_on_user_id" - create_table "relative_memos", :force => true do |t| - t.integer "osp_id", :null => false - t.integer "parent_id" - t.string "subject", :null => false - t.text "content", :null => false - t.integer "author_id" - t.integer "replies_count", :default => 0 - t.integer "last_reply_id" - t.boolean "lock", :default => false - t.boolean "sticky", :default => false - t.boolean "is_quote", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "viewed_count_crawl", :default => 0 - t.integer "viewed_count_local", :default => 0 - end - create_table "repositories", :force => true do |t| t.integer "project_id", :default => 0, :null => false t.string "url", :default => "", :null => false @@ -812,8 +638,10 @@ ActiveRecord::Schema.define(:version => 20140413022725) do end create_table "schools", :force => true do |t| - t.string "name" - t.string "province" + t.string "name" + t.string "province" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false end create_table "seems_rateable_cached_ratings", :force => true do |t| @@ -856,6 +684,21 @@ ActiveRecord::Schema.define(:version => 20140413022725) do t.string "description" end + create_table "softapplications", :force => true do |t| + t.string "name" + t.string "description" + t.integer "app_type_id" + t.string "app_type_name" + t.string "android_min_version_available" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "contest_id" + t.integer "softapplication_id" + t.integer "is_public" + t.string "application_developers" + end + create_table "students_for_courses", :force => true do |t| t.integer "student_id" t.integer "course_id" @@ -921,22 +764,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id" add_index "tokens", ["value"], :name => "tokens_value", :unique => true - create_table "tprojects", :force => true do |t| - t.string "name", :limit => 1000, :default => "0" - t.text "description", :limit => 16777215 - t.string "commit_count", :limit => 100, :default => "0" - t.string "code_line", :limit => 100 - t.string "last_commit_time", :limit => 100 - t.string "url", :limit => 1000 - t.datetime "date_collected" - t.string "created_at", :limit => 100 - t.string "updated_at", :limit => 100 - t.integer "proj_id", :null => false - t.string "user_count", :limit => 100 - end - - add_index "tprojects", ["proj_id"], :name => "proj_id" - create_table "trackers", :force => true do |t| t.string "name", :limit => 30, :default => "", :null => false t.boolean "is_in_chlog", :default => false, :null => false @@ -962,6 +789,7 @@ ActiveRecord::Schema.define(:version => 20140413022725) do t.string "teacher_realname" t.string "student_realname" t.string "location_city" + t.integer "school_id" end create_table "user_grades", :force => true do |t| @@ -985,19 +813,6 @@ ActiveRecord::Schema.define(:version => 20140413022725) do add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id" - create_table "user_scores", :force => true do |t| - t.integer "user_id", :null => false - t.integer "collaboration" - t.integer "influence" - t.integer "skill" - t.integer "active" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "level" - t.integer "file" - t.integer "issue" - end - create_table "user_statuses", :force => true do |t| t.integer "changesets_count" t.integer "watchers_count" diff --git a/lib/redmine.rb b/lib/redmine.rb index 0ede4d1d8..2c935074b 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -276,6 +276,16 @@ Redmine::MenuManager.map :bid_menu do |menu| # menu.push :result, { :controller => 'bids', :action => 'show_results' }, # :caption => :label_bidding_results,:if => Proc.new{ |p| User.current.id == p } end +###new add by linchun +Redmine::MenuManager.map :contest_menu do |menu| + menu.push :respond, :show_contest_contest_path, :caption => :label_user_response + menu.push :project, :show_project_contest_path, :caption => :label_contest_project + menu.push :application, :show_softapplication_contest_path, :caption => :label_contest_application + # menu.push :result, { :controller => 'bids', :action => 'show_results' }, + # :caption => :label_bidding_results,:if => Proc.new{ |p| User.current.id == p } +end + +#### Redmine::MenuManager.map :application_menu do |menu| # Empty end diff --git a/lib/tasks/rubyzip.rake b/lib/tasks/rubyzip.rake new file mode 100644 index 000000000..349ced29b --- /dev/null +++ b/lib/tasks/rubyzip.rake @@ -0,0 +1,38 @@ +desc "nyan ruby zip operation" +task :zip do + puts "input rake zip:clean_tmp will removed tmp/*.zip ." +end + +namespace :zip do + desc "ruby zip sweeper" + task :clean_tmp do + unless File.exist?(Dir.pwd+"/tmp/archiveZip") + puts "tmp/archiveZip folder is not exist. " + next + end + + puts "ruby zip sweeping..." + Dir.chdir('tmp/archiveZip') do + Dir['*'].select do |file| + if file =~ /archive_\d+\.zip/ + File.delete(file) + puts "#{file} is deleted." + end + end + end + puts "ruby zip sweeping is done." + end +end + +desc "create tmp file, to test" +file 'tmp/test.yml' do + require 'yaml' + var = { + :name => "name", + :age => "age", + :agent => "agent" + } + File.open('tmp/test.yml', 'w') do |f| + f.write YAML.dump({'conf' => var }) + end +end \ No newline at end of file diff --git a/public/images/008.jpg b/public/images/008.jpg new file mode 100644 index 000000000..378e72164 Binary files /dev/null and b/public/images/008.jpg differ diff --git a/public/images/009.gif b/public/images/009.gif new file mode 100644 index 000000000..b90b130fb Binary files /dev/null and b/public/images/009.gif differ diff --git a/public/images/android_0.jpg b/public/images/android_0.jpg new file mode 100644 index 000000000..6aadab331 Binary files /dev/null and b/public/images/android_0.jpg differ diff --git a/public/images/footer_logo/buaa_scse.png b/public/images/footer_logo/buaa_scse.png new file mode 100644 index 000000000..c224a5668 Binary files /dev/null and b/public/images/footer_logo/buaa_scse.png differ diff --git a/public/images/footer_logo/inforbus.png b/public/images/footer_logo/inforbus.png new file mode 100644 index 000000000..ba1ce65f9 Binary files /dev/null and b/public/images/footer_logo/inforbus.png differ diff --git a/public/images/footer_logo/iscas.png b/public/images/footer_logo/iscas.png new file mode 100644 index 000000000..f3cbac371 Binary files /dev/null and b/public/images/footer_logo/iscas.png differ diff --git a/public/images/footer_logo/nudt.png b/public/images/footer_logo/nudt.png new file mode 100644 index 000000000..68ff07fe0 Binary files /dev/null and b/public/images/footer_logo/nudt.png differ diff --git a/public/images/footer_logo/peking_eecs.png b/public/images/footer_logo/peking_eecs.png new file mode 100644 index 000000000..6c7164f08 Binary files /dev/null and b/public/images/footer_logo/peking_eecs.png differ diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 2845c3ce0..3067b0f23 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1,3 +1,4 @@ +//= require_directory ./rateable /* Redmine - project management software Copyright (C) 2006-2013 Jean-Philippe Lang */ diff --git a/public/javascripts/attachments.js b/public/javascripts/attachments.js index 7b8394fe8..3d1520f84 100644 --- a/public/javascripts/attachments.js +++ b/public/javascripts/attachments.js @@ -7,14 +7,14 @@ function addFile(inputEl, file, eagerUpload) { var attachmentId = addFile.nextAttachmentId++; - var fileSpan = $('', { id: 'attachments_' + attachmentId }); + var fileSpan = $('', { 'id': 'attachments_' + attachmentId, 'class':'attachment' }); fileSpan.append( - $('', { type: 'text', 'class': 'filename readonly', name: 'attachments[' + attachmentId + '][filename]', readonly: 'readonly'} ).val(file.name), - $('', { type: 'text', 'class': 'description', name: 'attachments[' + attachmentId + '][description]', maxlength: 255, placeholder: $(inputEl).data('description-placeholder') } ).toggle(!eagerUpload), - $(' ').attr({ href: "#", 'class': 'remove-upload', 'data-confirm' : "您确定要删除吗?" }).click(removeFile).toggle(!eagerUpload) + $('', { 'type': 'text', 'class': 'filename readonly', 'name': 'attachments[' + attachmentId + '][filename]', 'readonly': 'readonly'} ).val(file.name), + $('', { 'type': 'text', 'class': 'description', 'name': 'attachments[' + attachmentId + '][description]', 'maxlength': 255, 'placeholder': $(inputEl).data('description-placeholder') } ).toggle(!eagerUpload), + $(' ').attr({ 'href': "#", 'class': 'remove-upload', 'data-confirm' : "您确定要删除吗?" }).click(removeFile).toggle(!eagerUpload) ).appendTo('#attachments_fields'); - + if(eagerUpload) { ajaxUpload(file, attachmentId, fileSpan, inputEl); } @@ -63,6 +63,22 @@ function ajaxUpload(file, attachmentId, fileSpan, inputEl) { } form.dequeue('upload'); }); + + //gcm files count and add delete_all link + + var count=$('#attachments_fields>span').length; + $('#upload_file_count').html("已上传"+""+count+""+"个文件"); + + if(count>=1){ + var add_attachs=$('.add_attachment'); + var delete_all=$('.remove_all'); + if(delete_all.length<1){ + add_attachs.append($(" ").attr({"href":"javascript:void(0)", 'class': 'remove_all',"onclick": "removeAll()"})); + } + } + + //gcm + } var progressSpan = $('
    ').insertAfter(fileSpan.find('input.filename')); @@ -84,6 +100,16 @@ function removeFile() { return false; } +//gcm delete all file +function removeAll(){ + if(confirm("您确定要删除所有文件吗?")){ + $(".remove-upload").removeAttr("data-confirm"); + $(".remove-upload").click(); + } +// return false; +} +//gcm + function uploadBlob(blob, uploadUrl, attachmentId, options) { var actualOptions = $.extend({ diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index e60316841..678346bb3 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -9,6 +9,14 @@ h4, .wiki h3 {font-size: 13px;} h4 {border-bottom: 1px dotted #bbb;} /*huang*/ /*current position*/ +.contest_count{ + width: 20%; + height: 60px; + border: 1px solid #15bccf; + border-radius: 5px 5px 5px 5px; + float:right; +} + .top-content{ background-color: #f7f7f7; height: 56px; @@ -1727,7 +1735,7 @@ ul.properties li span {font-style:italic;} /*end*/ .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;} -#user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 60%; } +/*#user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 45%; }*/ #workflow_copy_form select { width: 200px; } table.transitions td.enabled {background: #bfb;} @@ -1821,6 +1829,11 @@ span.required {color: #bb0000;} a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%; width:1px; display:inline-block; padding-left:16px;} a.remove-upload:hover {text-decoration:none !important;} +/*gcm upload file count and deleteall*/ +#upload_file_count #count {color:red; font-size:1.5em;} +span.add_attachment .remove_all {background:none;background: url(../images/delete.png) no-repeat 1px 50%; width:1px; display:inline-block;position:absolute;right:21px;text-decoration:none;} + + div.fileover { background-color: lavender; } div.attachments { margin-top: 12px; } @@ -2693,4 +2706,38 @@ div.repos_explain{ margin-left: -220px; } +/* new linchun compitition */ +.contest_underline{ + margin:1; + padding:1; + width:900px; + height:0.5px; + background-color:#aaa; + overflow:hidden +} +.underline-contests_one{ + margin-bottom: 10px; + border-bottom: 1px dashed rgb(204, 204, 204); + width: 930px; +} +.underline-contests_two{ + margin-bottom: 10px; + border-bottom: 1px dashed rgb(204, 204, 204); + width: 660px; +} +.underline-contests_three{ + margin-bottom: 10px; + border-bottom: 1px dashed rgb(204, 204, 204); + width: 688px; +} +.contest-star{ + color: #bb0000; +} + +.contes-new-box{ + background: #fcfcfc; + padding-left: 85px; + padding-top: 20px; + padding-bottom: 20px; +} diff --git a/public/themes/redpenny-master/stylesheets/application.css b/public/themes/redpenny-master/stylesheets/application.css index c68e36cd7..748b8aab4 100644 --- a/public/themes/redpenny-master/stylesheets/application.css +++ b/public/themes/redpenny-master/stylesheets/application.css @@ -456,6 +456,7 @@ ul.projects li.root width:auto; float:center; min-height:800px; + border: 1px solid #ffffff; } /*by huang*/ @@ -541,13 +542,13 @@ ul.projects li.root #footer a:hover { - background:#666 none repeat scroll 0 0; - color:#FFF!important + /*background:#666 none repeat scroll 0 0;*/ + /*color:#FFF!important*/ } #footer a:link,#footer a:visited { - color:#666 + /*color:#666*/ } #footer .bgr:after @@ -981,7 +982,8 @@ hr } p { - font-size: 13px + font-size: 13px; + position:relative;/*gcm*/ } /*end*/ div.issue @@ -1906,6 +1908,10 @@ input[type="submit"], .button_submit { text-shadow: 0px -1px 0px rgba(0, 0, 0, 0.2), 0px 1px 0px rgb(255, 255, 255); cursor: pointer; } +.button_submit_font_white{ + color: white !important ; + font-weight: 400; +} input[type="button-submit"] { padding-bottom: 5px; @@ -2228,4 +2234,17 @@ ul.messages-for-user-reply li { } .sub_menu li{ width: 90%; -} \ No newline at end of file +} + +/*gcm*/ +.footer_logo_link{ + margin:5px; +} +#copyright,#contact_us,#record{ + margin-left:20px; +} + +/*.footer_text_link{ + margin-left:20px; +}*/ +/*gcm*/ \ No newline at end of file diff --git a/test/fixtures/contesting_softapplications.yml b/test/fixtures/contesting_softapplications.yml new file mode 100644 index 000000000..4b64c8b03 --- /dev/null +++ b/test/fixtures/contesting_softapplications.yml @@ -0,0 +1,13 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html + +one: + softapplication_id: 1 + contest_id: 1 + user_id: 1 + description: MyString + +two: + softapplication_id: 1 + contest_id: 1 + user_id: 1 + description: MyString diff --git a/test/fixtures/softapplications.yml b/test/fixtures/softapplications.yml new file mode 100644 index 000000000..0ab48299f --- /dev/null +++ b/test/fixtures/softapplications.yml @@ -0,0 +1,17 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html + +one: + name: MyString + description: MyString + app_type_id: 1 + app_type_name: MyString + android_min_version_available: MyString + user_id: 1 + +two: + name: MyString + description: MyString + app_type_id: 1 + app_type_name: MyString + android_min_version_available: MyString + user_id: 1 diff --git a/test/functional/softapplications_controller_test.rb b/test/functional/softapplications_controller_test.rb new file mode 100644 index 000000000..8c5611cb9 --- /dev/null +++ b/test/functional/softapplications_controller_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' + +class SoftapplicationsControllerTest < ActionController::TestCase + setup do + @softapplication = softapplications(:one) + end + + test "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:softapplications) + end + + test "should get new" do + get :new + assert_response :success + end + + test "should create softapplication" do + assert_difference('Softapplication.count') do + post :create, softapplication: { android_min_version_available: @softapplication.android_min_version_available, app_type_id: @softapplication.app_type_id, app_type_name: @softapplication.app_type_name, description: @softapplication.description, name: @softapplication.name, user_id: @softapplication.user_id } + end + + assert_redirected_to softapplication_path(assigns(:softapplication)) + end + + test "should show softapplication" do + get :show, id: @softapplication + assert_response :success + end + + test "should get edit" do + get :edit, id: @softapplication + assert_response :success + end + + test "should update softapplication" do + put :update, id: @softapplication, softapplication: { android_min_version_available: @softapplication.android_min_version_available, app_type_id: @softapplication.app_type_id, app_type_name: @softapplication.app_type_name, description: @softapplication.description, name: @softapplication.name, user_id: @softapplication.user_id } + assert_redirected_to softapplication_path(assigns(:softapplication)) + end + + test "should destroy softapplication" do + assert_difference('Softapplication.count', -1) do + delete :destroy, id: @softapplication + end + + assert_redirected_to softapplications_path + end +end diff --git a/test/functional/zipdown_controller_test.rb b/test/functional/zipdown_controller_test.rb new file mode 100644 index 000000000..f74dcc1c0 --- /dev/null +++ b/test/functional/zipdown_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class ZipdownControllerTest < ActionController::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/unit/contesting_softapplication_test.rb b/test/unit/contesting_softapplication_test.rb new file mode 100644 index 000000000..0c1364caa --- /dev/null +++ b/test/unit/contesting_softapplication_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class ContestingSoftapplicationTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/unit/helpers/softapplications_helper_test.rb b/test/unit/helpers/softapplications_helper_test.rb new file mode 100644 index 000000000..ad8173602 --- /dev/null +++ b/test/unit/helpers/softapplications_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class SoftapplicationsHelperTest < ActionView::TestCase +end diff --git a/test/unit/helpers/zipdown_helper_test.rb b/test/unit/helpers/zipdown_helper_test.rb new file mode 100644 index 000000000..ca30cb362 --- /dev/null +++ b/test/unit/helpers/zipdown_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class ZipdownHelperTest < ActionView::TestCase +end diff --git a/test/unit/softapplication_test.rb b/test/unit/softapplication_test.rb new file mode 100644 index 000000000..b3872eec5 --- /dev/null +++ b/test/unit/softapplication_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class SoftapplicationTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end
    当前网站状态 活跃项目:<%=@projectCount%>个