diff --git a/.idea/.generators b/.idea/.generators new file mode 100644 index 000000000..48c69bb77 --- /dev/null +++ b/.idea/.generators @@ -0,0 +1,8 @@ + + diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 000000000..2327e6ef0 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +trustie2 \ No newline at end of file diff --git a/.idea/.rakeTasks b/.idea/.rakeTasks new file mode 100644 index 000000000..212558e83 --- /dev/null +++ b/.idea/.rakeTasks @@ -0,0 +1,7 @@ + + diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 000000000..e206d70d8 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..12817166a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..eb86c781f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000..922003b84 --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/trustie2.iml b/.idea/trustie2.iml new file mode 100644 index 000000000..897cad7ea --- /dev/null +++ b/.idea/trustie2.iml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..c80f2198b --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 000000000..2bb1461a3 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,989 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CSS + + + Code style issuesJavaScript + + + Control flow issuesJavaScript + + + JavaScript + + + JavaScript function metricsJavaScript + + + JavaScript validity issuesJavaScript + + + Potentially confusing code constructsJavaScript + + + Ruby + + + SQL + + + + + CoffeeScript + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1397784941950 + 1397784941950 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/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/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 73b1849c1..6edd2a8c8 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -175,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/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 7db953a0b..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 @@ -390,7 +392,7 @@ class ProjectsController < ApplicationController # added by bai @course.term = params[:term] @course.time = params[:time] - @course.school_name = params[:occupation] + @course.school_id = params[:occupation] @course.setup_time = params[:setup_time] @course.endup_time = params[:endup_time] @course.class_period = params[:class_period] @@ -569,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 diff --git a/app/controllers/school_controller.rb b/app/controllers/school_controller.rb index 63791795c..749491b69 100644 --- a/app/controllers/school_controller.rb +++ b/app/controllers/school_controller.rb @@ -6,7 +6,7 @@ class SchoolController < ApplicationController options = "" @school.each do |s| - options << "" + options << "" end render :text => options 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/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 5e00642a1..d566c9b86 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -81,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 index 12f1976e0..57078a436 100644 --- a/app/controllers/zipdown_controller.rb +++ b/app/controllers/zipdown_controller.rb @@ -1,68 +1,115 @@ class ZipdownController < ApplicationController - def assort - obj_class = params[:obj_class] - obj_id = params[:obj_id] - obj = obj_class.constantize.find(obj_id) - case obj.class.to_s.to_sym - when :Bid - zip obj - else - logger.error "[ZipDown#assort] ===> #{obj.class.to_s.to_sym} unKown !!" - end + SAVE_FOLDER = "#{Rails.root}/files" + OUTPUT_FOLDER = "#{Rails.root}/tmp/archiveZip" - rescue NameError, ActiveRecord::RecordNotFound => e - logger.error "[ZipDown] ===> #{e}" - @error = e - end + 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 - private + #rescue NameError, ActiveRecord::RecordNotFound => e + #logger.error "[ZipDown] ===> #{e}" + #@error = e + end - def zip bid - # Todo: User Access Controll - homeworks_attach_path = [] - 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}" - @error = e - end + private - 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" + 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)) - 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) + 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"){ |os| - os.write "Homeworks" - } - end - zipfile_name - rescue Errno=> e - logger.error "[zipdown#zipping] ===> #{e}" - @error = e - 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 detect_content_type(name) - content_type = Redmine::MimeType.of(name) - content_type.to_s - 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 - def filename_to_real name - attach = Attachment.find_by_disk_filename(name) - attach.filename - 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..10e8a4471 100644 --- a/app/helpers/welcome_helper.rb +++ b/app/helpers/welcome_helper.rb @@ -97,10 +97,14 @@ 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 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 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/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 b9d752eb6..d14090c56 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -78,12 +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/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/contests/_contest_list.html.erb b/app/views/contests/_contest_list.html.erb new file mode 100644 index 000000000..4fb2865c8 --- /dev/null +++ b/app/views/contests/_contest_list.html.erb @@ -0,0 +1,49 @@ + +<% contests.each do |contest|%> + + + + + +
<%= 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') %>
+ + + + + + + + + +
+ <%= 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)) %>) + <%= l(:label_contest_softapplication, :count => contest.contesting_softapplications.count) %>(<%= link_to(contest.contesting_softapplications.count, show_softapplication_contest_path(contest)) %>) + +
<%= l :label_create_time %>: <%= format_time contest.created_on %>
+
+ + + + +
<%= contest.description%>
+
+<% 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..3a7bde1e5 --- /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') %> + <% 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/layouts/_base_header.html.erb b/app/views/layouts/_base_header.html.erb index 4c3884a05..d340ea9e9 100644 --- a/app/views/layouts/_base_header.html.erb +++ b/app/views/layouts/_base_header.html.erb @@ -13,6 +13,10 @@ @nav_dispaly_home_path_label = 1 @nav_dispaly_main_course_label = 1 @nav_dispaly_main_project_label = 1 + @nav_dispaly_main_contest_label = 1 + elsif (realUrl.match(/contest\.trustie\.net\/*/)) + @nav_dispaly_contest_label = 1 + @nav_dispaly_store_all_label = 1 else @nav_dispaly_project_all_label = 1 @nav_dispaly_course_all_label = 1 diff --git a/app/views/layouts/base_newcontest.html.erb b/app/views/layouts/base_newcontest.html.erb new file mode 100644 index 000000000..190209ae4 --- /dev/null +++ b/app/views/layouts/base_newcontest.html.erb @@ -0,0 +1,237 @@ +<% @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 2063528cc..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/my/account.html.erb b/app/views/my/account.html.erb index 6ff37ed7c..e46b25fc4 100644 --- a/app/views/my/account.html.erb +++ b/app/views/my/account.html.erb @@ -91,7 +91,7 @@

<%= l(:field_occupation) %> *<%= select_tag "province", options_from_collection_for_select(School.find_by_sql("select distinct province from schools"), :province, :province), :onchange => "get_options(this.value)" %> - <%= select_tag "occupation", options_for_select([['安徽大学','安徽大学'],['合肥工业大学','合肥工业大学'],['中国科技大学','中国科技大学']]) %> + <%= select_tag "occupation" %>

diff --git a/app/views/projects/_course_form.html.erb b/app/views/projects/_course_form.html.erb index ca736b05a..944157a9b 100644 --- a/app/views/projects/_course_form.html.erb +++ b/app/views/projects/_course_form.html.erb @@ -289,7 +289,7 @@ <%=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 "occupation", options_for_select([['安徽大学','安徽大学'],['合肥工业大学','合肥工业大学'],['中国科技大学','中国科技大学']]) %> + <%= select_tag "occupation" %>

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..3ca41d072 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -1,4 +1,4 @@ -<% if @events_by_day.size >0 %> +

@@ -43,26 +43,30 @@ <% end %>

<% end -%> + + +
+ + + + + +
<%= 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) %> +
+
+
-<% else %> -
- - - - - -
<%= 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 %> + + + 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 index 61cd69e13..959d6a4be 100644 --- a/app/views/test/courselist.html.erb +++ b/app/views/test/courselist.html.erb @@ -17,14 +17,14 @@ <% @courses.each do |course| %>
- <%= course.name %> + <%= course.name %> <% course.homeworks.each do |homework| %> <% homeworks_attach_path = [] %>
<%= link_to homework.name, respond_path(homework) %>(<%=homework.homeworks.count %>)<%#Bid%>
- <%= link_to "package", test_zip_path(:homework_id => homework.id)%>
+ <%= 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%>) diff --git a/app/views/welcome/contest.html.erb b/app/views/welcome/contest.html.erb index 6a0a8413f..f3d7f092e 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[5]) %> + +
  • +
    + <%= image_tag('/images/039.gif')%> +
    + +
    + <%= link_to(contest.name, show_contest_contest_path(contest.id), :class => "d-g-blue d-p-project-name", :title => "#{contest.name}", :target => "_blank") %> +
    + +
    + ><%=contest.description.truncate(50, omission: '...')%> +

    + +
    + <%= l(:label_contest_project, :count => contest.contesting_projects.count) %>(<%= link_to(contest.contesting_projects.count, show_project_contest_path(contest)) %>) + <%= l(:label_contest_softapplication, :count => contest.contesting_softapplications.count) %>(<%= link_to(contest.contesting_softapplications.count, show_softapplication_contest_path(contest)) %>) +
    + +
  • + <% 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/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/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 2423b8485..5cc7b7d8d 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -1550,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: 作业 @@ -1813,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 8e7a2501e..17e09f5a8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -23,7 +23,41 @@ RedmineApp::Application.routes.draw 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] @@ -549,7 +583,7 @@ RedmineApp::Application.routes.draw do match 'calls', :controller => 'bids', :action => 'index' match 'calls/:id', :controller => 'bids', :action => 'show', :as => 'respond' - match 'contest', :controller => 'bids', :action => 'contest', :as => 'contest' + match 'contest', :controller => 'bids', :action => 'contests', :as => 'contest' #modified @20140403 ######################## 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/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 a5cb5409c..b4a9ba972 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 => 20140415090829) do +ActiveRecord::Schema.define(:version => 20140417091429) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -23,6 +23,15 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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 @@ -62,6 +71,20 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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" @@ -101,6 +124,11 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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 @@ -205,7 +233,7 @@ ActiveRecord::Schema.define(:version => 20140415090829) do t.string "setup_time" t.string "endup_time" t.string "class_period" - t.string "school_name" + t.integer "school_id" end create_table "custom_fields", :force => true do |t| @@ -265,6 +293,14 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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 @@ -286,6 +322,137 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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 => "" @@ -518,6 +685,22 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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" @@ -533,6 +716,19 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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" @@ -612,6 +808,23 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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 @@ -764,6 +977,22 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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 @@ -789,6 +1018,7 @@ ActiveRecord::Schema.define(:version => 20140415090829) 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| @@ -820,6 +1050,9 @@ ActiveRecord::Schema.define(:version => 20140415090829) do 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| diff --git a/lib/redmine.rb b/lib/redmine.rb index 0ede4d1d8..43e47a26a 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/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/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/stylesheets/application.css b/public/stylesheets/application.css index c3572f930..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; @@ -2698,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/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/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/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