diff --git a/Gemfile b/Gemfile index a3cc7b68e..3784e60d8 100644 --- a/Gemfile +++ b/Gemfile @@ -25,6 +25,18 @@ group :development do end end +# Gems used only for assets and not required +# in production environments by default. +group :assets do + gem 'sass-rails', '~> 3.2.3' + gem 'coffee-rails', '~> 3.2.1' + + # See https://github.com/sstephenson/execjs#readme for more supported runtimes + # gem 'therubyracer', :platforms => :ruby + + gem 'uglifier', '>= 1.0.3' +end + # Optional gem for LDAP authentication group :ldap do gem "net-ldap", "~> 0.3.1" diff --git a/Gemfile.lock b/Gemfile.lock index 25cc9f48f..6680070a7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -53,7 +53,16 @@ GEM arel (3.0.2) builder (3.0.0) coderay (1.0.9) + coffee-rails (3.2.2) + coffee-script (>= 2.2.0) + railties (~> 3.2.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.6.1) erubis (2.7.0) + execjs (1.4.0) + multi_json (~> 1.0) fastercsv (1.5.0) hike (1.2.3) i18n (0.6.1) @@ -99,6 +108,11 @@ GEM rdoc (3.12.2) json (~> 1.4) ruby-openid (2.1.8) + sass (3.2.7) + sass-rails (3.2.6) + railties (~> 3.2.0) + sass (>= 3.1.10) + tilt (~> 1.3) sprockets (2.2.2) hike (~> 1.2) multi_json (~> 1.0) @@ -110,6 +124,9 @@ GEM polyglot polyglot (>= 0.3.1) tzinfo (0.3.37) + uglifier (1.0.3) + execjs (>= 0.3.0) + multi_json (>= 1.0.2) PLATFORMS x86-mingw32 @@ -121,6 +138,7 @@ DEPENDENCIES better_errors! builder (= 3.0.0) coderay (~> 1.0.6) + coffee-rails (~> 3.2.1) fastercsv (~> 1.5.0) i18n (~> 0.6.0) jquery-rails (~> 2.0.2) @@ -130,4 +148,6 @@ DEPENDENCIES rack-openid rails (= 3.2.13) ruby-openid (~> 2.1.4) + sass-rails (~> 3.2.3) seems_rateable! + uglifier (>= 1.0.3) diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb index d63f0cfbb..87b0d8dcf 100644 --- a/app/controllers/bids_controller.rb +++ b/app/controllers/bids_controller.rb @@ -881,6 +881,7 @@ class BidsController < ApplicationController def memberAccess # 是课程,则判断当前用户是否参加了课程 + return true if current_user.admin? return 0 if @bid.courses.first.project_type == Project::ProjectType_project currentUser = User.current render_403 unless currentUser.member_of?(@bid.courses.first) diff --git a/app/controllers/contests_controller.rb b/app/controllers/contests_controller.rb index e7490f5b0..b51a11436 100644 --- a/app/controllers/contests_controller.rb +++ b/app/controllers/contests_controller.rb @@ -5,7 +5,8 @@ class ContestsController < ApplicationController menu_item :project, :only => :show_project menu_item :application, :only => :show_softapplication menu_item :attendingcontest, :only => :show_attendingcontest - before_filter :find_contest, :only => [:show_contest, :show_project, :show_softapplication, :show_attendingcontest, :set_reward_project, :set_reward_softapplication, :create,:destroy,:more,:back,:add,:add_softapplication,:new,:show_results, :set_reward, + menu_item :contestnotification, :only => :show_notification + before_filter :find_contest, :only => [:show_contest, :show_project, :show_softapplication, :show_attendingcontest, :show_notification, :set_reward_project, :set_reward_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 @@ -355,6 +356,17 @@ class ContestsController < ApplicationController end ###end + +def show_notification + @contest = Contest.find_by_id(params[:id]) + respond_to do |format| + format.html { + render :layout => 'base_newcontest' + } + format.api + end +end + def set_reward_project @c_p = nil diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index 5b81b7291..ed6f9937d 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -70,7 +70,7 @@ class FilesController < ApplicationController Mailer.attachments_added(attachments[:files]).deliver end - # 临时用 + # TODO: 临时用 nyan sort_init 'created_on', 'desc' sort_update 'created_on' => "#{Attachment.table_name}.created_on", 'filename' => "#{Attachment.table_name}.filename", diff --git a/app/controllers/open_source_projects_controller.rb b/app/controllers/open_source_projects_controller.rb index 1ca7ddcef..ee3af10ce 100644 --- a/app/controllers/open_source_projects_controller.rb +++ b/app/controllers/open_source_projects_controller.rb @@ -1,8 +1,8 @@ class OpenSourceProjectsController < ApplicationController - + before_filter :find_osp, :only => [:master_apply, :accept_master_apply, :refuse_master_apply] before_filter :require_master, :only => [:master_apply, :accept_master_apply, :refuse_master_apply] - + helper :sort include SortHelper helper :apply_project_masters @@ -12,6 +12,7 @@ class OpenSourceProjectsController < ApplicationController # GET /open_source_projects # GET /open_source_projects.json def index + @app_dir = params[:app_dir] @language = params[:language] @created_at = params[:created_at] @@ -22,8 +23,10 @@ class OpenSourceProjectsController < ApplicationController @os_project_count = @open_source_projects.count @os_project_pages = Paginator.new @os_project_count, per_page_option, params['page'] - + @open_source_projects = @open_source_projects.offset(@os_project_pages.offset).limit(@os_project_pages.per_page) + + @bugs = BugToOsp.order('created_at desc').limit(8) # @open_source_projects = OpenSourceProject.all @@ -32,11 +35,11 @@ class OpenSourceProjectsController < ApplicationController format.json { render json: @open_source_projects } end end - + def master_apply @apply = @open_source_project.apply_tips @applicants = @open_source_project.applicants - + respond_to do |format| format.html { render :layout => "base_opensource_p" @@ -49,7 +52,7 @@ class OpenSourceProjectsController < ApplicationController # GET /open_source_projects/1.json def show @open_source_project = OpenSourceProject.find(params[:id]) - + sort_init 'updated_at', 'desc' sort_update 'created_at' => "#{RelativeMemo.table_name}.created_at", 'replies' => "#{RelativeMemo.table_name}.replies_count", @@ -63,9 +66,9 @@ class OpenSourceProjectsController < ApplicationController includes(:last_reply). limit(@topic_pages.per_page). offset(@topic_pages.offset). - order(sort_clause). + order(sort_clause). all - + @bugs = @open_source_project.bugs.limit(6) respond_to do |format| @@ -75,26 +78,36 @@ class OpenSourceProjectsController < ApplicationController format.json { render json: @open_source_project } end end - - -def search + + def allbug + @bugs = BugToOsp.visible + @bug_count = @bugs.count + @bug_pages = Paginator.new @bug_count, per_page_option, params['page'] + @bugs = @bugs.includes(:bug).reorder("#{RelativeMemo.table_name}.created_at DESC").limit(@bug_pages.per_page).offset(@bug_pages.offset).all + + respond_to do |format| + format.html + format.json { render json: @open_source_project } + end end + def search -# added by yiang 暴力添加,请绕道 -def showmemo - @open_source_project = OpenSourceProject.find(params[:id]) + end - sort_init 'updated_at', 'desc' - sort_update 'created_at' => "#{RelativeMemo.table_name}.created_at", + def showbug + @open_source_project = OpenSourceProject.find(params[:id]) + + sort_init 'updated_at', 'desc' + sort_update 'created_at' => "#{RelativeMemo.table_name}.created_at", 'replies' => "#{RelativeMemo.table_name}.replies_count", 'updated_at' => "COALESCE (last_replies_relative_memos.created_at, #{RelativeMemo.table_name}.created_at)" - @memo = RelativeMemo.new(:open_source_project => @open_source_project) - @topic_count = @open_source_project.topics.count - @topic_pages = Paginator.new @topic_count, per_page_option, params['page'] - @memos = @open_source_project.topics. + @memo = RelativeMemo.new(:open_source_project => @open_source_project) + @topic_count = @open_source_project.bugs.count + @topic_pages = Paginator.new @topic_count, per_page_option, params['page'] + @memos = @open_source_project.bugs. reorder("#{RelativeMemo.table_name}.sticky DESC"). includes(:last_reply). limit(@topic_pages.per_page). @@ -102,13 +115,42 @@ def showmemo order(sort_clause). all - respond_to do |format| - format.html { - render :layout => "base_opensource_p" - } - format.json { render json: @open_source_project } + respond_to do |format| + format.html { + render :layout => "base_opensource_p" + } + format.json { render json: @open_source_project } + end end -end + + # added by yiang 暴力添加,请绕道 + def showmemo + @open_source_project = OpenSourceProject.find(params[:id]) + + sort_init 'updated_at', 'desc' + sort_update 'created_at' => "#{RelativeMemo.table_name}.created_at", + 'replies' => "#{RelativeMemo.table_name}.replies_count", + 'updated_at' => "COALESCE (last_replies_relative_memos.created_at, #{RelativeMemo.table_name}.created_at)" + + @memo = RelativeMemo.new(:open_source_project => @open_source_project) + @topic_count = @open_source_project.topics.count + @topic_pages = Paginator.new @topic_count, per_page_option, params['page'] + @memos = @open_source_project.topics. + reorder("#{RelativeMemo.table_name}.sticky DESC"). + includes(:last_reply). + limit(@topic_pages.per_page). + offset(@topic_pages.offset). + order(sort_clause). + all + + respond_to do |format| + format.html { + render :layout => "base_opensource_p" + } + format.json { render json: @open_source_project } + end + end + # GET /open_source_projects/new # GET /open_source_projects/new.json def new @@ -168,52 +210,51 @@ end format.json { head :no_content } end end - + def remove_condition @app_dir = params[:app_dir] @language = params[:language] @created_at = params[:created_at] redirect_to open_source_projects_path(:app_dir => @app_dir, :language => @language, :created_at => @created_at, :name => params[:name]) end - + def search # per_page_option = 10 -# + # # @open_source_projects = OpenSourceProject.filter(@app_dir, @language, @created_at) # @open_source_projects = @open_source_projects.like(params[:name]) if params[:name].present? -# + # # @os_project_count = @open_source_projects.count # @os_project_pages = Paginator.new @os_project_count, per_page_option, params['page'] -# + # # @open_source_projects = @open_source_projects.offset(@os_project_pages.offset).limit(@os_project_pages.per_page) redirect_to open_source_projects_path(:name => params[:name]) end - + def refuse_master_apply @apply = ApplyProjectMaster.where("user_id = ? and apply_id = ? and apply_type = 'OpenSourceProject'", params[:user_id], @open_source_project.id) @apply.first.destory - + redirect_to master_apply_open_source_project_path end - + def accept_master_apply @apply = ApplyProjectMaster.where("user_id = ? and apply_id = ? and apply_type = 'OpenSourceProject'", params[:user_id], @open_source_project.id) if @apply.count == 1 - @apply.first.update_attributes(:status => 2) + @apply.first.update_attributes(:status => 2) end - + redirect_to master_apply_open_source_project_path end - - + private - + def require_master render_403 unless @open_source_project.admin?(User.current) end - + def find_osp @open_source_project = OpenSourceProject.find(params[:id]) render_404 unless @open_source_project.present? diff --git a/app/controllers/softapplications_controller.rb b/app/controllers/softapplications_controller.rb index 31675ca5d..b8d81b108 100644 --- a/app/controllers/softapplications_controller.rb +++ b/app/controllers/softapplications_controller.rb @@ -47,7 +47,7 @@ class SoftapplicationsController < ApplicationController def show @softapplication = Softapplication.find(params[:id]) - @project = Project.find_by_identifier(@softapplication.deposit_project) + @project = @softapplication.project # 打分统计 stars_reates = @softapplication. rates(:quality) @@ -142,13 +142,16 @@ class SoftapplicationsController < ApplicationController def create @softapplication = Softapplication.new(params[:softapplication]) @softapplication.user = User.current - @softapplication.deposit_project = params[:project] + #@softapplication.deposit_project = params[:project] + @softapplication.project = Project.find_by_id(params[:project]) @softapplication.save_attachments(params[:attachments]) respond_to do |format| if @softapplication.save ContestingSoftapplication.create(:contest_id => params[:contest_id], :softapplication_id => @softapplication.id) + #ProjectingSoftapplication.create_softapplication_projecting(:project_id => params[:project_id], :softapplication_id => @softapplication.id) + #ProjectingSoftapplication.create_softapplication_projecting(@project.id, softapplication.id) format.html { redirect_to show_attendingcontest_contest_path(:id => params[:contest_id]), notice: l(:notice_attendingcontest_work_successfully_created) } # format.json { render json: @softapplication, status: :created, location: @softapplication } else @@ -170,7 +173,8 @@ class SoftapplicationsController < ApplicationController # @softapplication = Softapplication.find(params[:id]) @softapplication.attachments.map{|attach| attach.destroy } @softapplication.save_attachments(params[:attachments]) - @softapplication.deposit_project = params[:project] + #@softapplication.deposit_project = params[:project] + @softapplication.project = Project.find_by_id(params[:project]) respond_to do |format| if @softapplication.update_attributes(params[:softapplication]) format.html { redirect_to @softapplication, notice: l(:notice_softapplication_was_successfully_updated) } diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index c662c44f7..c92f39d34 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -21,13 +21,7 @@ class WelcomeController < ApplicationController before_filter :entry_select_course, :entry_select_contest, :entry_select_user, :only => [:index] def index - projectActive = Project.project_entities.active - @projectCount = projectActive.count - @projectPublicCount = projectActive.all_public.count - @projectHidenCount = @projectCount - @projectPublicCount - @developerCount = User.developer.count - @allUsercount = User.count end def robots @@ -36,10 +30,7 @@ class WelcomeController < ApplicationController end def course - @courseCount = Project.course_entities.count - @teacherCount = User.teacher.count - @studentCount = User.student.count - @logoLink = logolink() + @logoLink ||= logolink() end @@ -121,25 +112,25 @@ class WelcomeController < ApplicationController end end - def render(*args) - _fake if @fake_filter - super - end + # def render(*args) + # _fake if @fake_filter + # super + # end - private + # private - def fake - @fake_filter = true - end + # def fake + # @fake_filter = true + # end - # 骗子方法 - def _fake - instance_variables.map { |variable| - if variable.to_s =~ /Count$/ - self.instance_variable_set(variable.to_sym, - ("1" + (self.instance_variable_get(variable.to_sym).to_s)).to_i) - end - } - end + # # 骗子方法 + # def _fake + # instance_variables.map { |variable| + # if variable.to_s =~ /Count$/ + # self.instance_variable_set(variable.to_sym, + # ("1" + (self.instance_variable_get(variable.to_sym).to_s)).to_i) + # end + # } + # end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7dc4b5556..7bfe95123 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -750,7 +750,7 @@ module ApplicationHelper tmp = Hash.new tmp={"" => ""} option.each do |project| - tmp[project.name] = project.identifier + tmp[project.name] = project.id end tmp end diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 23351d919..5e7f7c18c 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -59,12 +59,11 @@ module IssuesHelper def issue_heading(issue) #h("#{issue.tracker} ##{issue.id}") - #h("#{issue.tracker} #{issue.source_from}") + # h("#{issue.tracker} #{issue.source_from}") s = '' - s << ">>" - s << link_to(@issue.project.name+l(:issue_list), project_issues_path(@issue.project)) - s << " >" - s << @issue.source_from + s << link_to(@issue.project.name, project_issues_path(@issue.project)) + s << " > #" + s << @issue.project_index s.html_safe end diff --git a/app/helpers/journals_helper.rb b/app/helpers/journals_helper.rb index 480524457..26b4c13b9 100644 --- a/app/helpers/journals_helper.rb +++ b/app/helpers/journals_helper.rb @@ -18,7 +18,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. module JournalsHelper - def render_notes(issue, journal, options={}) + def render_links(issue, journal, options={}) content = '' editable = User.current.logged? && (User.current.allowed_to?(:edit_issue_notes, issue.project) || (journal.user == User.current && User.current.allowed_to?(:edit_own_issue_notes, issue.project))) destroyable = User.current.logged? && ((journal.user == User.current) || (issue.author_id == User.current.id) || (User.current.admin == 1)) @@ -38,7 +38,35 @@ module JournalsHelper :title => l(:button_delete)) end end - content << content_tag('div', links.join(' ').html_safe, :class => 'contextual', :style => 'margin-top:-25px;') unless links.empty? + content << content_tag('div', links.join(' ').html_safe, :class => 'contextual') unless links.empty? + #content << textilizable(journal, :notes) + #css_classes = "wiki" + #css_classes << " editable" if editable + #content_tag('div', content.html_safe, :id => "journal-#{journal.id}-notes", :class => css_classes) + content.html_safe + end + + def render_notes (issue, journal, options={}) + content = '' + editable = User.current.logged? && (User.current.allowed_to?(:edit_issue_notes, issue.project) || (journal.user == User.current && User.current.allowed_to?(:edit_own_issue_notes, issue.project))) + destroyable = User.current.logged? && ((journal.user == User.current) || (issue.author_id == User.current.id) || (User.current.admin == 1)) + links = [] + if !journal.notes.blank? + links << link_to(l(:button_quote), + {:controller => 'journals', :action => 'new', :id => issue.id, :journal_id => journal}, + :remote => true, + :method => 'post', + :title => l(:button_quote)) if options[:reply_links] + links << link_to_in_place_notes_editor(l(:button_edit), "journal-#{journal.id}-notes", + { :controller => 'journals', :action => 'edit', :id => journal, :format => 'js' }, + :title => l(:button_edit)) if editable + #Added by young + if destroyable + links << link_to(l(:button_delete), { :controller => 'journals', :action => 'destroy', :id => journal, :format => 'js' }, + :title => l(:button_delete)) + end + end + #content << content_tag('div', links.join(' ').html_safe, :class => 'contextual', :style => 'margin-top:-25px;') unless links.empty? content << textilizable(journal, :notes) css_classes = "wiki" css_classes << " editable" if editable diff --git a/app/helpers/open_source_projects_helper.rb b/app/helpers/open_source_projects_helper.rb index f1c1cd35e..dfc7cc8d0 100644 --- a/app/helpers/open_source_projects_helper.rb +++ b/app/helpers/open_source_projects_helper.rb @@ -46,4 +46,12 @@ module OpenSourceProjectsHelper end description end + + def show_description_of_bug(bug) + description = bug.description + if description.nil? || description == '' + description = bug.open_source_project.name + l(:label_bug) + end + description + end end diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index f412e0c8e..87b495f00 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -69,28 +69,30 @@ module UsersHelper #
  • <%= link_to("所有反馈", {:controller => 'users', :action => 'show', :type => 2}) %>
  • # - def show_activity(state) - content = ''.html_safe - case state - when 0 - s = content_tag('span', l(:label_user_all_activity), :class => "current-page") - content << content_tag('li', s) - content << content_tag('li', link_to(l(:label_user_activity_myself), {:controller => 'users', :action => 'show', :type => 1})) - content << content_tag('li', link_to(l(:label_user_all_respond), {:controller => 'users', :action => 'show', :type => 2})) - when 1 - s = content_tag('span', l(:label_user_activity_myself), :class => "current-page") - content << content_tag('li', link_to(l(:label_user_all_activity), {:controller => 'users', :action => 'show'})) - content << content_tag('li', s, :class => "current-page") - content << content_tag('li', link_to(l(:label_user_all_respond), {:controller => 'users', :action => 'show', :type => 2})) - when 2 - s = content_tag('span', l(:label_user_all_respond), :class => "current-page") - content << content_tag('li', link_to(l(:label_user_all_activity), {:controller => 'users', :action => 'show'})) - content << content_tag('li', link_to(l(:label_user_activity_myself), {:controller => 'users', :action => 'show', :type => 1})) - content << content_tag('li', s, :class => "current-page") - end - content_tag('div', content, :class => "pagination") - end + # TODO: 待删 + # def show_activity(state) + # content = ''.html_safe + # case state + # when 0 + # s = content_tag('span', l(:label_user_all_activity), :class => "current-page") + # content << content_tag('li', s) + # content << content_tag('li', link_to(l(:label_user_activity_myself), {:controller => 'users', :action => 'show', :type => 1})) + # content << content_tag('li', link_to(l(:label_user_all_respond), {:controller => 'users', :action => 'show', :type => 2})) + # when 1 + # s = content_tag('span', l(:label_user_activity_myself), :class => "current-page") + # content << content_tag('li', link_to(l(:label_user_all_activity), {:controller => 'users', :action => 'show'})) + # content << content_tag('li', s, :class => "current-page") + # content << content_tag('li', link_to(l(:label_user_all_respond), {:controller => 'users', :action => 'show', :type => 2})) + # when 2 + # s = content_tag('span', l(:label_user_all_respond), :class => "current-page") + # content << content_tag('li', link_to(l(:label_user_all_activity), {:controller => 'users', :action => 'show'})) + # content << content_tag('li', link_to(l(:label_user_activity_myself), {:controller => 'users', :action => 'show', :type => 1})) + # content << content_tag('li', s, :class => "current-page") + # end + # content_tag('div', content, :class => "pagination") + # end + #TODO: 待删 def watch_projects(state) content = ''.html_safe case state diff --git a/app/models/bug_to_osp.rb b/app/models/bug_to_osp.rb index 5471bd3f9..9cd1d7359 100644 --- a/app/models/bug_to_osp.rb +++ b/app/models/bug_to_osp.rb @@ -5,4 +5,8 @@ class BugToOsp < ActiveRecord::Base validates_presence_of :osp_id, :relative_memo_id + scope :visible, lambda {|*args| + nil + } + end diff --git a/app/models/issue.rb b/app/models/issue.rb index d2332350a..7e899eafc 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1156,7 +1156,11 @@ class Issue < ActiveRecord::Base # back string obj which is belong to project. def source_from "" << self.project.name.to_s << - "#" << (self.project.issues.index(self).to_i + 1).to_s + "#" << project_index + end + + def project_index + (self.project.issues.index(self).to_i + 1).to_s end private diff --git a/app/models/mailer.rb b/app/models/mailer.rb index e0ad54296..bb7a2424f 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -57,12 +57,16 @@ class Mailer < ActionMailer::Base #如果是直接留言并且留言对象是Project并且Project类型是课程 if !journals_for_message.at_user && journals_for_message.jour.class.to_s.to_sym == :Project && journals_for_message.jour.project_type == 1 project = journals_for_message.jour + @author = journals_for_message.user #课程的教师 @teachers = searchTeacherAndAssistant journals_for_message.jour #收件人邮箱 @recipients ||= [] @teachers.each do |teacher| - @recipients << teacher.user.mail + if teacher.user.notify_about? journals_for_message + @recipients << teacher.user.mail + end + end mail :to => @recipients, :subject => "#{l(:label_your_course)}#{journals_for_message.jour.name}#{l(:label_have_message)} " @@ -440,10 +444,7 @@ class Mailer < ActionMailer::Base headers[:to].delete(@author.mail) if headers[:to].is_a?(Array) headers[:cc].delete(@author.mail) if headers[:cc].is_a?(Array) end - if !User.current.nil? - #不给本人发邮件 - headers[:to].delete(User.current.mail) if headers[:to].is_a?(Array) - end + if @author && @author.logged? redmine_headers 'Sender' => @author.login end diff --git a/app/models/relative_memo.rb b/app/models/relative_memo.rb index 073d1ca12..f087fce2b 100644 --- a/app/models/relative_memo.rb +++ b/app/models/relative_memo.rb @@ -70,6 +70,11 @@ class RelativeMemo < ActiveRecord::Base def cannot_reply_to_locked_topic errors.add :base, l(:label_memo_locked) if root.locked? && self != root end + + def short_content(length = 25) + str = "^(.{,#{length}})[^\n\r]*.*$" + content.gsub(Regexp.new(str), '\1...').strip if content + end # def update_memos_forum # if forum_id_changed? diff --git a/app/models/softapplication.rb b/app/models/softapplication.rb index 5e1e1bd50..f7eed43fc 100644 --- a/app/models/softapplication.rb +++ b/app/models/softapplication.rb @@ -6,10 +6,11 @@ class Softapplication < ActiveRecord::Base has_many :journals_for_messages, :as => :jour, :dependent => :destroy has_many :contesting_softapplications, :dependent => :destroy - has_many :projecting_softapplications, :dependent => :destroy + #has_many :projecting_softapplications, :dependent => :destroy belongs_to :user belongs_to :project has_many :contests, :through => :contesting_softapplications + belongs_to :project def add_jour(user, notes, reference_user_id = 0, options = {}) if options.count == 0 diff --git a/app/models/user.rb b/app/models/user.rb index 63e0b3837..ddf40a827 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -692,6 +692,7 @@ class User < Principal end end + # Return true if the user is allowed to do the specified action on a specific context # Action can be: # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit') @@ -795,10 +796,39 @@ class User < Principal when News # always send to project members except when mail_notification is set to 'none' true + #判定用户是否接受留言提醒邮件 + when JournalsForMessage + ##如果是直接留言并且留言对象是Project并且Project类型是课程(课程留言) + if !object.at_user && object.jour.class.to_s.to_sym == :Project && object.jour.project_type == 1 + #根据用户设置邮件接收模式判定当前用户是否接受邮件提醒 + is_notified_project object.jour + end + end end end + #用户是否接收project的消息提醒 + def is_notified_project arg + if arg.is_a?(Project) + case mail_notification + when 'selected' + notified_projects_ids.include?(arg.id) + when 'only_my_events' + projects.include?(arg) + when 'only_assigned' + false + when 'only_owner' + course = Course.find_by_extra(arg.identifier) + course.teacher == self + end + #勾选的项目或用户的项目 TODO:需改 + #notified_projects_ids.include?(arg) || projects.include?(arg) + else + false + end + end + def self.current=(user) Thread.current[:current_user] = user end diff --git a/app/views/contests/_list_softapplications.html.erb b/app/views/contests/_list_softapplications.html.erb index 9b99b675c..89e8a3172 100644 --- a/app/views/contests/_list_softapplications.html.erb +++ b/app/views/contests/_list_softapplications.html.erb @@ -4,7 +4,7 @@
    - 应用软件: + <%=l(:label_softapplication)%>: <%= link_to(c_softapplication.softapplication.name, softapplication_path(c_softapplication.softapplication), :target => '_blank') %> @@ -12,7 +12,7 @@
    - 简介: + <%=l(:label_profile)%>: <%= c_softapplication.softapplication.description.truncate(90, omission: '...') %> @@ -20,7 +20,7 @@
    - 发布时间: + <%=l(:label_activity_time)%>: <%=format_time c_softapplication.created_at %> diff --git a/app/views/contests/_new.html.erb b/app/views/contests/_new.html.erb index 2462d3fb1..804c59429 100644 --- a/app/views/contests/_new.html.erb +++ b/app/views/contests/_new.html.erb @@ -45,7 +45,7 @@ <% else %> -
    +
    <%= l(:label_user_login_tips) %> <%= link_to l(:label_user_login_new), signin_path %>
    diff --git a/app/views/contests/_new_join.html.erb b/app/views/contests/_new_join.html.erb index c764690de..3b0cff690 100644 --- a/app/views/contests/_new_join.html.erb +++ b/app/views/contests/_new_join.html.erb @@ -36,7 +36,7 @@ } -

    请输入竞赛密码

    +

    <%=l(:label_please_input_password)%>

    <%= form_tag( join_in_contest_contests_path(id: contest.id), :remote => true, diff --git a/app/views/contests/add.js.erb b/app/views/contests/add.js.erb index 9c696d8aa..0706d0c56 100644 --- a/app/views/contests/add.js.erb +++ b/app/views/contests/add.js.erb @@ -1,4 +1,4 @@ $('#contesting_project_list').html('<%= escape_javascript(render(:partial => 'project_list', :locals => {:contesting_project => @contesting_project})) %>'); -$("#project_id").val("请选择项目"); +$("#project_id").val("<%= l(:label_please_select_project) %>"); $("#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 index 6071c7070..dfe774100 100644 --- a/app/views/contests/add_softapplication.js.erb +++ b/app/views/contests/add_softapplication.js.erb @@ -1,4 +1,4 @@ $('#contesting_softapplication_list').html('<%= escape_javascript(render(:partial => 'softapplication_list', :locals => {:contesting_softapplication => @contesting_softapplication})) %>'); -$("#softapplication_id").val("请选择参赛应用"); +$("#softapplication_id").val("<%= l(:label_please_select_contestingsoftapplication) %>"); $("#contest_message").val( "<%= l(:label_bid_reason) %>" ); $("#put-bid-form").hide(); \ No newline at end of file diff --git a/app/views/contests/show_attendingcontest.html.erb b/app/views/contests/show_attendingcontest.html.erb index bbd01c241..8a567bd53 100644 --- a/app/views/contests/show_attendingcontest.html.erb +++ b/app/views/contests/show_attendingcontest.html.erb @@ -1,170 +1,177 @@ <%= render_flash_messages %>
    -
    温馨提示:如果您准备参加竞赛,请点击下面的"新建参赛作品"!
    -
    1) 若您已完成开发,且只希望发布您的作品,“托管项目”一项可以不选;
    -
    2) 若您希望托管竞赛数据和代码以及保留开发和提交代码的轨迹,请从“托管项目”中选择一项您已创建好的项目作为该参赛作品的托管项目,若您还没有创建项目,请点击右边的“创建项目”,然后回到本页再选择。
    +
    <%= l(:label_wellmeaning_intimation_contentone) %>
    +
    1) <%= l(:label_wellmeaning_intimation_contenttwo) %>
    +
    2) <%= l(:label_wellmeaning_intimation_contentthree) %>
    <% if User.current.logged? %> -
    -
    - 参加竞赛: - <%= link_to '新建参赛作品', "javascript:void(0);", onclick: "$('#put-project-form').toggle();" %> -
    - - -
    +
    +
    + <%= l(:label_attending_contest) %>: + <%= link_to l(:label_new_attendingcontest_work), "javascript:void(0);", onclick: "$('#put-project-form').toggle();" %> +
    +
    <% else %> -
    - <%= l(:label_user_login_attending_contest) %> - <%= link_to l(:label_user_login_new), signin_path %> -
    +
    + <%= l(:label_user_login_attending_contest) %> + <%= link_to l(:label_user_login_new), signin_path %> +
    <% end %> @@ -176,173 +183,185 @@ <% if @contest.id == 2 or @contest.id == 3 or @contest.id == 6 %> -<% @contesting_project.sort.reverse.each do |c_project|%> -<% if c_project.project %> -
    -
    -
    -
    参赛作品: <%= link_to(c_project.project.name, project_path(c_project.project), :target => '_blank') %> -
    - - - - <% if get_prize(c_project).nil? or get_prize(c_project) == "" %> + <% @contesting_project.sort.reverse.each do |c_project| %> + <% if c_project.project %> +
    +
    +
    +
    <%= l(:label_contest_work) %> + : <%= link_to(c_project.project.name, project_path(c_project.project), :target => '_blank') %> + +
    + + + + <% if get_prize(c_project).nil? or get_prize(c_project) == "" %> <% if @contest.deadline < Date.today %> - <%= l(:label_noawards)%> - <% else%> - <%= l(:label_noawards_current)%> + <%= l(:label_noawards) %> + <% else %> + <%= l(:label_noawards_current) %> <% end %> <% else %> - <% case get_prize(c_project) %> + <% case get_prize(c_project) %> <% when '-1' %> - <%= image_tag("/images/bid/special_reward.png")%> + <%= image_tag("/images/bid/special_reward.png") %> <% when '0' %> - <%= image_tag("/images/bid/first_reward.png")%> + <%= image_tag("/images/bid/first_reward.png") %> <% when '1' %> - <%= image_tag("/images/bid/second_reward.png")%> + <%= image_tag("/images/bid/second_reward.png") %> <% when '2' %> - <%= image_tag("/images/bid/third_reward.png")%> + <%= image_tag("/images/bid/third_reward.png") %> <% when '3' %> - <%= image_tag("/images/bid/forth_reward.png")%> + <%= image_tag("/images/bid/forth_reward.png") %> <% when '4' %> - <%= image_tag("/images/bid/fifth_reward.png")%> + <%= image_tag("/images/bid/fifth_reward.png") %> <% when '5' %> - <%= image_tag("/images/bid/qualified.png")%> + <%= image_tag("/images/bid/qualified.png") %> <% end %> <% end %> - - - - - <% if ((User.current.id == @contest.author_id) && (@contest.deadline > Date.today))||User.current.admin %> - - <%= toggle_link '评奖', c_project.id.to_s %> - - + + + + <% if ((User.current.id == @contest.author_id) && (@contest.deadline > Date.today))||User.current.admin %> + + <%= toggle_link l(:label_reward), c_project.id.to_s %> + + - - <% end %> -
    -
    -

    -
    -
    - - 简介: - <%= c_project.project.description.truncate(90, omission: '...') %> -
    -
    -
    - 参赛时间:<%= format_time c_project.created_at%> - 参赛代表:<%= c_project.user.name %> -
    + + + <% end %> +
    +
    +
    +
    +
    +
    + + <%= l(:label_profile) %>: + <%= c_project.project.description.truncate(90, omission: '...') %> + +
    +
    +
    + <%= l(:label_attendingcontest_time) %> + :<%= format_time c_project.created_at %> + <%= l(:label_attendingcontest_spoksman) %> + :<%= c_project.user.name %> +
    -
    +
    -
    -
    -<% end %> -
    -<% end %> +
    +
    + <% end %> +
    + <% end %> <% else %> -<% @contesting_softapplication.each do |c_softapplication|%> -<% if c_softapplication.softapplication %> -
    -
    - - 参赛作品: - <%= link_to(c_softapplication.softapplication.name, softapplication_path(c_softapplication.softapplication), :target => '_blank') %> -
    -
    - -
    - - 简介: - <%= c_softapplication.softapplication.description.truncate(90, omission: '...') %> -
    -
    - -
    - 参赛时间:<%= format_time c_softapplication.created_at %> - 参赛代表:<%= c_softapplication.softapplication.user.name %> -
    - - -
    - 最终得分:<%= c_softapplication.softapplication.average(:quality).try(:avg).try(:round, 2).to_i.to_s%>分 + <% @contesting_softapplication.each do |c_softapplication| %> + <% if c_softapplication.softapplication %> +
    +
    + + <%= l(:label_contest_work) %>: + <%= link_to(c_softapplication.softapplication.name, softapplication_path(c_softapplication.softapplication), :target => '_blank') %> + +
    +
    + +
    + + <%= l(:label_profile) %>: + <%= c_softapplication.softapplication.description.truncate(90, omission: '...') %> + +
    +
    + +
    + <%= l(:label_attendingcontest_time) %> + :<%= format_time c_softapplication.created_at %> + <%= l(:label_attendingcontest_spoksman) %> + :<%= c_softapplication.softapplication.user.name %> +
    + + +
    + <%= l(:label_final_scores) %> + :<%= c_softapplication.softapplication.average(:quality).try(:avg).try(:round, 2).to_i.to_s %> + 分 - - - <% if get_prize(c_softapplication).nil? or get_prize(c_softapplication) == "" %> + + + <% if get_prize(c_softapplication).nil? or get_prize(c_softapplication) == "" %> <% if @contest.deadline < Date.today %> - <%= l(:label_noawards)%> - <% else%> - <%= l(:label_noawards_current)%> + <%= l(:label_noawards) %> + <% else %> + <%= l(:label_noawards_current) %> <% end %> <% else %> - <% case get_prize(c_softapplication) %> + <% case get_prize(c_softapplication) %> <% when '-1' %> - <%= image_tag("/images/bid/special_reward.png")%> + <%= image_tag("/images/bid/special_reward.png") %> <% when '0' %> - <%= image_tag("/images/bid/first_reward.png")%> + <%= image_tag("/images/bid/first_reward.png") %> <% when '1' %> - <%= image_tag("/images/bid/second_reward.png")%> + <%= image_tag("/images/bid/second_reward.png") %> <% when '2' %> - <%= image_tag("/images/bid/third_reward.png")%> + <%= image_tag("/images/bid/third_reward.png") %> <% when '3' %> - <%= image_tag("/images/bid/forth_reward.png")%> + <%= image_tag("/images/bid/forth_reward.png") %> <% when '4' %> - <%= image_tag("/images/bid/fifth_reward.png")%> + <%= image_tag("/images/bid/fifth_reward.png") %> <% when '5' %> - <%= image_tag("/images/bid/qualified.png")%> + <%= image_tag("/images/bid/qualified.png") %> <% end %> <% end %> - - + + - <% if ((User.current.id == @contest.author_id) && (@contest.deadline > Date.today))||User.current.admin %> -
    + <% if ((User.current.id == @contest.author_id) && (@contest.deadline > Date.today))||User.current.admin %> +
    <%= toggle_link '评奖', c_softapplication.id.to_s %> -
    + +
    <% end %> -
    -
    -
    -<% end %> -
    -<% end %> + +
    +
    + <% end %> +
    + <% end %> <% end %> diff --git a/app/views/contests/show_notification.html.erb b/app/views/contests/show_notification.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/contests/show_project.html.erb b/app/views/contests/show_project.html.erb index 202d3b632..3e759cfc1 100644 --- a/app/views/contests/show_project.html.erb +++ b/app/views/contests/show_project.html.erb @@ -68,7 +68,7 @@

    - <%= link_to '创建项目', new_project_path(course: 0, project_type: 0), :target=>'_blank'%> + <%= link_to l(:label_create_new_projects), new_project_path(course: 0, project_type: 0), :target=>'_blank'%>

    diff --git a/app/views/contests/show_softapplication.html.erb b/app/views/contests/show_softapplication.html.erb index 14c907d82..d12a70e35 100644 --- a/app/views/contests/show_softapplication.html.erb +++ b/app/views/contests/show_softapplication.html.erb @@ -68,7 +68,7 @@

    - <%= link_to '发布应用', new_softapplication_path(:target=>'_blank'), :target=>'_blank' %> + <%= link_to l(:label_release_softapplication), new_softapplication_path(:target=>'_blank'), :target=>'_blank' %>

    diff --git a/app/views/files/_new.html.erb b/app/views/files/_new.html.erb index 7dcf82e19..a1cfb37e2 100644 --- a/app/views/files/_new.html.erb +++ b/app/views/files/_new.html.erb @@ -2,7 +2,7 @@ <% versions = project.versions.sort %> <% attachmenttypes = project.attachmenttypes %> <%= error_messages_for 'attachment' %> -<%= form_tag(project_files_path(project), :multipart => true,:remote => true,:method => :post,:name=>"upload_form", :class => "tabular") do %> +<%= form_tag(project_files_path(project), :multipart => true,:remote => false,:method => :post,:name=>"upload_form", :class => "tabular") do %>

    diff --git a/app/views/files/index.html.erb b/app/views/files/index.html.erb index 231be8beb..9fc430e3f 100644 --- a/app/views/files/index.html.erb +++ b/app/views/files/index.html.erb @@ -25,9 +25,9 @@ :onchange => "attachment_contenttypes_searchex(this.value)" %> <% end %> - + - + <% contest = @softapplication.contests.first %> - + - - + + - + - - + + - -
    - + -<% end; reset_cycle %> - -
    <%= link_to h(topic.subject), topic.url %><%= link_to h(topic.subject), topic.url, :target => '_blank' %> - + @@ -449,7 +430,7 @@ diff --git a/app/views/open_source_projects/allbug.html.erb b/app/views/open_source_projects/allbug.html.erb new file mode 100644 index 000000000..d5c0c2e55 --- /dev/null +++ b/app/views/open_source_projects/allbug.html.erb @@ -0,0 +1,89 @@ + + + + +
    + +
    + 共有 <%= link_to @bug_count %> 个安全贴子 +
    +
    + <% if @bugs.any? %> + <% @bugs.each do |bug| %> + <% topic = bug.bug %> +
    <%= link_to (topic.replies_count), open_source_project_relative_memo_path(open_source_project, topic) %><%= link_to (topic.replies_count), topic.url, :target => '_blank' %>
    回帖 - + @@ -459,7 +440,7 @@ - + - + - - +
    <%= link_to (topic.viewed_count_crawl+topic.viewed_count_local), open_source_project_relative_memo_path(open_source_project, topic) %><%= link_to (topic.viewed_count_crawl+topic.viewed_count_local), topic.url, :target => '_blank' %>
    关注 - + @@ -467,17 +448,17 @@
    <%= link_to (topic.viewed_count_crawl+topic.viewed_count_local), open_source_project_relative_memo_path(open_source_project, topic) %><%= link_to (topic.viewed_count_crawl+topic.viewed_count_local), topic.url, :target => '_blank' %>
    浏览
    帖子来源:<%=link_to 'OSChina', topic.url %> + 帖子来源:<%=link_to 'OSChina', topic.url %> <%= no_use_link(topic, User.current) %> <%= no_use_link(topic, User.current) %>
    + + + + + +
    <%= link_to image_tag(url_to_avatar(topic.author), :class => "avatar"), user_path(topic.author) if topic.author%> + <%= image_tag('../images/avatars/User/0', :class => "avatar") unless topic.author%> + + + + + + + + + + + + + + + + + + + + + +
    + <% if topic.url.nil? || topic.url == '' %> + <%= link_to h(topic.subject), open_source_project_relative_memo_path(bug.open_source_project, topic) %> + <% else %> + <%= link_to h(topic.subject), topic.url, :target => '_blank' %> + <% end %> + + + + + + + +
    <%= link_to (topic.replies_count), topic.url, :target => '_blank' %>
    回帖
    + + + + + + + +
    <%= link_to (topic.viewed_count_crawl+topic.viewed_count_local), topic.url, :target => '_blank' %>
    关注
    + + + + + + + +
    <%= link_to (topic.viewed_count_crawl+topic.viewed_count_local), topic.url, :target => '_blank' %>
    浏览
    <%= topic.short_content(100) %>
    <%= user_url_and_time topic.username, topic.userhomeurl, topic.created_at %> +
    +
    帖子来源:<%=link_to topic.topic_resource, topic.url, :target => '_blank' %> +
    + + <% end %> + + <% else %> +

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

    + <% end %> + + +<%#= render :partial => 'open_source_projects/show_memo', :locals => {:memos => @memos, :open_source_project => @open_source_project} %> + \ No newline at end of file diff --git a/app/views/open_source_projects/index.html.erb b/app/views/open_source_projects/index.html.erb index e51ef4fc1..99e34333f 100644 --- a/app/views/open_source_projects/index.html.erb +++ b/app/views/open_source_projects/index.html.erb @@ -48,7 +48,7 @@ background-position: -266px 3px; } .navigation .icon-search, .navigation .nav-pill-cancle, .navigation .nav-switch-icon, .navigation .nav-topbar .topbar-search .topbar-submit, .navigation .nav-topbar-arror { - background: url(); + /*background: url()*/ } .nav-switch-icon { width: 15px; @@ -129,8 +129,6 @@ li { .nav-search-con{ padding-top: 7px; } - - <%= javascript_include_tag "ichart.1.2.min" %> <%= stylesheet_link_tag "buglist-div-use.css" %> @@ -146,29 +144,13 @@ li {
    -

    软件安全漏洞

    More >>
    +

    软件安全态势

    <%= link_to '更多 >>', allbug_open_source_projects_path %>
    -
    +
    @@ -236,7 +218,7 @@ li { parseText:function(tip,name,value,text,i){ return name+"漏洞数:"+value; } - } , + } }, tipMocker:function(tips,i){ var index; @@ -272,7 +254,7 @@ li { label:false, //是否显示数值 // hollow_inside:false, smooth : true,//平滑曲线 - point_size:2, // 焦点大小 + point_size:2 // 焦点大小 // point_hollow : true, @@ -298,7 +280,7 @@ li { start_scale:0, scale_space:50, end_scale:70, - scale_color:'#9f9f9f', + scale_color:'#9f9f9f' // label : {color:'#ffffff',fontsize:11}, },{ @@ -417,7 +399,7 @@ line.target.line(28,97,400,97,2,'#b32c0d')
    \ No newline at end of file diff --git a/app/views/projects/settings/_members.html.erb b/app/views/projects/settings/_members.html.erb index f97e9d0f2..f69f9edff 100644 --- a/app/views/projects/settings/_members.html.erb +++ b/app/views/projects/settings/_members.html.erb @@ -1,125 +1,88 @@ <%= error_messages_for 'member' %> -<% roles = Role.find_all_givable - members = @project.member_principals.includes(:roles, :principal).all.sort %> +<% + roles = Role.givable.all + if @project.project_type == Project::ProjectType_course + roles = roles[3..5] + else + roles = roles[0..2] + end + members = @project.member_principals.includes(:roles, :principal).all.sort +%> +
    -<% if members.any? %> - - - - - + <% if members.any? %> +
    <%= l(:label_user) %><%= l(:label_role_plural) %>
    + + + + + <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %> - - - <% members.each do |member| %> - <% next if member.new_record? %> - - - + + + <% members.each do |member| %> + <% next if member.new_record? %> + + + - - <%= error_messages_for 'member' %> -<% roles = Role.find_all_givable - members = @project.member_principals.includes(:roles, :principal).all.sort %> - <% if @project.project_type == 1 %> - <%if member.roles.first.to_s == "Manager" %> - - <% else %> - - <% end %> - <% else %> - + <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member), + :method => :put, + :html => {:id => "member-#{member.id}-roles-form", :class => 'hol'}} + ) do |f| %> + +

    + <% roles.each do |role| %> +
    + <% end %>

    + <%= hidden_field_tag 'membership[role_ids][]', '' %> +

    <%= submit_tag l(:button_change), :class => "small" %> + <%= link_to_function l(:button_cancel), + "$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;" + %>

    + <% end %> + + + <% if @project.project_type == 1 %> + <% if member.roles.first.to_s == "Manager" %> + + <% else %> + + <% end %> + <% else %> + + <% end %> + + <%= call_hook(:view_projects_settings_members_table_row, {:project => @project, :member => member}) %> + + <% end; reset_cycle %> + +
    <%= l(:label_user) %><%= l(:label_role_plural) %>
    <%= link_to_user member.principal %> - - - <% if @project.project_type == 1 %> - <% if member.roles.sort.collect(&:to_s).join(', ') =='Manager' %> - 老师 - <% else %> - <%=h member.roles.sort.collect(&:to_s).join(', ') %> - <% end %> - <% else %> - <%=h member.roles.sort.collect(&:to_s).join(', ') %> - <% end %> +
    <%= link_to_user member.principal %> + + <%= h member.roles.sort.collect(&:to_s).join(', ') %> - <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member), - :method => :put, - :html => { :id => "member-#{member.id}-roles-form", :class => 'hol' }} - ) do |f| %> - -<%= error_messages_for 'member' %> -<% if @project.project_type == 1 %> -<% r = [] %> -<% for i in 3..5 %> -<% roles = Role.givable.all[i] - members = @project.member_principals.includes(:roles, :principal).all.sort %> - <% r << roles %> - <% end %> -<% else %> -<% r = [] %> -<% for i in 0..2 %> -<% roles = Role.givable.all[i] - members = @project.member_principals.includes(:roles, :principal).all.sort %> - <% r << roles %> - <% end %> -<% end %> - -

    <% r.each do |role| %> -
    - <% end %>

    - <%= hidden_field_tag 'membership[role_ids][]', '' %> -

    <%= submit_tag l(:button_change), :class => "small" %> - <%= link_to_function l(:button_cancel), - "$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;" - %>

    - <% end %> -
    - <%= link_to_function l(:button_edit), - "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;", - :class => 'icon icon-edit' %> - <%= delete_link membership_path(member), - :remote => true, - :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %> - - <%= link_to_function l(:button_edit), - "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;", - :class => 'icon icon-edit' %> - <%= delete_link membership_path(member), - :remote => true, - :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %> - + <%= link_to_function l(:button_edit), + "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;", + :class => 'icon icon-edit' %> + <%= delete_link membership_path(member), + :remote => true, + :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %> + + <%= link_to_function l(:button_edit), + "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;", + :class => 'icon icon-edit' %> + <%= delete_link membership_path(member), + :remote => true, + :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %> +
    + <% else %> +

    <%= l(:label_no_data) %>

    <% end %> - - <%= call_hook(:view_projects_settings_members_table_row, { :project => @project, :member => member}) %> -
    -<% else %> -

    <%= l(:label_no_data) %>

    -<% end %> - -<%= error_messages_for 'member' %> -<% if @project.project_type == 1 %> -<% r = [] %> -<% for i in 3..5 %> -<% roles = Role.givable.all[i] - members = @project.member_principals.includes(:roles, :principal).all.sort %> - <% r << roles %> - <% end %> -<% else %> -<% r = [] %> -<% for i in 0..2 %> -<% roles = Role.givable.all[i] - members = @project.member_principals.includes(:roles, :principal).all.sort %> - <% r << roles %> - <% end %> -<% end %> - -
    -<% if r.any? %> + <% if roles.any? %> <% if @project.applied_projects.any? %>
    <%= form_for(@applied_members, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> @@ -131,7 +94,7 @@

    <%= l(:label_role_plural) %>: - <% r.each do |role| %> + <% roles.each do |role| %> <% end %>

    @@ -144,24 +107,25 @@
    <% end %> - <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> -
    <%=l(:label_member_new)%> + <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> +
    + <%= l(:label_member_new) %> -

    <%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %>

    - <%= javascript_tag "observeSearchfield('principal_search', null, '#{ escape_javascript autocomplete_project_memberships_path(@project, :format => 'js') }')" %> +

    <%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %>

    + <%= javascript_tag "observeSearchfield('principal_search', null, '#{ escape_javascript autocomplete_project_memberships_path(@project, :format => 'js') }')" %> -
    - <%= render_principals_for_new_members(@project) %> -
    - -

    <%= l(:label_role_plural) %>: - <% r.each do |role| %> - - - <% end %>

    +
    + <%= render_principals_for_new_members(@project) %> +
    + +

    <%= l(:label_role_plural) %>: + <% roles.each do |role| %> -

    <%= submit_tag l(:button_add), :id => 'member-add-submit' %>

    -
    + + <% end %>

    + +

    <%= submit_tag l(:button_add), :id => 'member-add-submit' %>

    +
    + <% end %> <% end %> -<% end %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index 173fc26a4..6be2a4d72 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -17,8 +17,13 @@
    <%= h(e.project) if @project.nil? || @project.id != e.project.id %> - - <%= link_to_user(e.event_author) if e.respond_to?(:event_author) %>(<%= link_to_user(e.event_author,@canShowRealName) if e.respond_to?(:event_author) %>) + + <% if @canShowRealName %> + <%= link_to_user(e.event_author) if e.respond_to?(:event_author) %>(<%= link_to_user(e.event_author,@canShowRealName) if e.respond_to?(:event_author) %>) + <% else %> + <%= link_to_user(e.event_author) if e.respond_to?(:event_author) %> + <% end %> + <%= l(:label_new_activity) %> <%= link_to "#{eventToLanguageCourse(e.event_type, @project)}: "<< format_activity_title(e.event_title), (e.event_type.eql?("attachment")&&e.container.kind_of?(Project)) ? project_files_path(e.container) : e.event_url %> diff --git a/app/views/softapplications/_form.html.erb b/app/views/softapplications/_form.html.erb index 4703af9be..fd946cfc5 100644 --- a/app/views/softapplications/_form.html.erb +++ b/app/views/softapplications/_form.html.erb @@ -65,7 +65,7 @@
    - 上传作品软件包和作品截图 + <%=l(:label_upload_softworkpacket_photo)%> <%= render_flash_messages %>

    <%= render :partial => 'attachments/form' %> diff --git a/app/views/softapplications/index.html.erb b/app/views/softapplications/index.html.erb index 841a8a207..5b355f65c 100644 --- a/app/views/softapplications/index.html.erb +++ b/app/views/softapplications/index.html.erb @@ -16,13 +16,13 @@

    <%= softapplication.description.truncate(95, omission: '...') %>
    <%contest = softapplication.contests.first%> -

    所属竞赛:<%= contest ? link_to(contest.name.truncate(14, omission: '...'), show_attendingcontest_contest_path(contest), title: contest.name.to_s ) : '尚未加入竞赛'%>

    -

    所属类别:<%= softapplication.app_type_name.truncate(10, omission: '...') %>

    -

    系统支持:<%= softapplication.android_min_version_available %>

    +

    <%=l(:label_attendingcontestwork_belongs_contest)%>:<%= contest ? link_to(contest.name.truncate(14, omission: '...'), show_attendingcontest_contest_path(contest), title: contest.name.to_s ) : '尚未加入竞赛'%>

    +

    <%=l(:label_attendingcontestwork_belongs_type)%>:<%= softapplication.app_type_name.truncate(10, omission: '...') %>

    +

    <%=l(:label_attendingcontestwork_adaptive_system)%>:<%= softapplication.android_min_version_available %>

    - 开发人员:<%= softapplication.application_developers %> - 发布时间:<%=format_time softapplication.created_at %> + <%=l(:label_attendingcontestwork_developers)%>:<%= softapplication.application_developers %> + <%=l(:label_attendingcontestwork_release_time)%>:<%=format_time softapplication.created_at %>
    diff --git a/app/views/softapplications/show.html.erb b/app/views/softapplications/show.html.erb index 8b9b3260d..e41ecb842 100644 --- a/app/views/softapplications/show.html.erb +++ b/app/views/softapplications/show.html.erb @@ -16,38 +16,35 @@
    所属类别:<%= @softapplication.app_type_name %><%=l(:label_attendingcontestwork_belongs_type)%>:<%= @softapplication.app_type_name %>所属竞赛:<%= contest ? link_to(contest.name, show_attendingcontest_contest_path(contest)) : '尚未加入竞赛' %><%=l(:label_attendingcontestwork_belongs_contest)%>:<%= contest ? link_to(contest.name, show_attendingcontest_contest_path(contest)) : '尚未加入竞赛' %>
    发布人员:<%= @softapplication.user.name %>系统支持:<%= @softapplication.android_min_version_available %><%=l(:label_attendingcontestwork_release_person)%>:<%= @softapplication.user.name %><%=l(:label_attendingcontestwork_adaptive_system)%>:<%= @softapplication.android_min_version_available %>
    - 作品下载: + <%=l(:label_attendingcontestwork_download)%>: <% options = {:author => true, :deletable => @softapplication.user.eql?(User.current)} %><%= render :partial => 'attachments/app_link', :locals => {:attachments => @app_items, :options => options} %> 开发人员:<%= @softapplication.application_developers %><%=l(:label_attendingcontestwork_developers)%>:<%= @softapplication.application_developers %>
    平均评分: <%= rating_for @softapplication, :static => true, dimension: :quality, class: 'rateable div_inline' %>发布时间:<%=format_time @softapplication.created_at %><%=l(:label_attendingcontestwork_average_scores)%>: <%= rating_for @softapplication, :static => true, dimension: :quality, class: 'rateable div_inline' %><%=l(:label_attendingcontestwork_release_time)%>:<%=format_time @softapplication.created_at %>
    - <% if (@softapplication.deposit_project != "nil" && @softapplication.deposit_project != "") %> - <%#= textilizable ("托管项目: " + @project.name) %> - 托管项目:<%= link_to "#@project", project_path(@project.id) %> - <% end %> + <% if @project %> + <%=l(:label_attendingcontestwork_deposit_project)%>:<%= link_to "#@project", project_path(@project) %> + <% end %>
    @@ -56,7 +53,7 @@

    -
    作品简介:
    +
    <%=l(:label_work_description)%>:
    <%= @softapplication.description %>
    @@ -64,11 +61,11 @@
    -
    作品得分:
    +
    <%=l(:label_work_scores)%>:
    -
    得分比例
    +
    <%=l(:label_work_scores_proportion)%>
    <% 100.step(20, -20) do |star| %>
    @@ -83,14 +80,12 @@
    -
    最终得分
    -
    <%= @softapplication.average(:quality).try(:avg).try(:round, 2).to_i.to_s %> - 分 -
    +
    <%=l(:label_final_scores)%>
    +
    <%= @softapplication.average(:quality).try(:avg).try(:round, 2).to_i.to_s %>分
    <%= rating_for @softapplication, :static => true, dimension: :quality, class: 'rateable div_inline' %>
    -
    打分总人数
    +
    <%=l(:label_rating_person_amount)%>
    <%= @softapplication.raters(:quality).count %>
    @@ -100,7 +95,7 @@
    -
    作品截图:
    +
    <%=l(:label_work_photo)%>:
    @@ -119,10 +114,10 @@
    -
    作品评论:
    +
    <%=l(:label_work_comment)%>:
    <% if (User.current.logged? and User.current.id != @softapplication.user_id) %> -
    评分: <%= rating_for @softapplication, dimension: :quality, class: 'rateable div_inline' %> - (您可以重新打分,打分结果以最后一次打分为主!)
    +
    <%=l(:label_work_rating)%>: <%= rating_for @softapplication, dimension: :quality, class: 'rateable div_inline' %> + (<%=l(:label_attendingcontestwork_sorting_intimation)%>)
    <% end %>
    diff --git a/app/views/tags/_tag_name.html.erb b/app/views/tags/_tag_name.html.erb index 4891cc233..dad5d53f7 100644 --- a/app/views/tags/_tag_name.html.erb +++ b/app/views/tags/_tag_name.html.erb @@ -51,14 +51,14 @@ <% when '2' %> - <% if (ProjectInfo.find_by_project_id(obj.id)).user_id == User.current.id %> + <% if (ProjectInfo.find_by_project_id(obj.id)).try(:user_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 %> <% when '3' %> - <% if (ProjectInfo.find_by_project_id(obj.project_id)).user_id == User.current.id %> + <% if (ProjectInfo.find_by_project_id(obj.project_id)).try(:user_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 %> diff --git a/app/views/users/_course_list_have_entity.html.erb b/app/views/users/_course_list_have_entity.html.erb index 87dd52635..19fb88a6a 100644 --- a/app/views/users/_course_list_have_entity.html.erb +++ b/app/views/users/_course_list_have_entity.html.erb @@ -1,4 +1,4 @@ -
    +