president
yanxd 11 years ago
commit 510b1c4233

@ -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"

@ -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)

@ -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)

@ -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
@ -356,6 +357,17 @@ class ContestsController < ApplicationController
###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
@contesting_project_id = nil

@ -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",

@ -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]
@ -25,6 +26,8 @@ class OpenSourceProjectsController < ApplicationController
@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
respond_to do |format|
@ -76,14 +79,52 @@ class OpenSourceProjectsController < ApplicationController
end
end
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
def search
respond_to do |format|
format.html
format.json { render json: @open_source_project }
end
end
def search
end
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.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).
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
# added by yiang 暴力添加,请绕道
def showmemo
# added by yiang 暴力添加,请绕道
def showmemo
@open_source_project = OpenSourceProject.find(params[:id])
sort_init 'updated_at', 'desc'
@ -108,7 +149,8 @@ def showmemo
}
format.json { render json: @open_source_project }
end
end
end
# GET /open_source_projects/new
# GET /open_source_projects/new.json
def new
@ -178,13 +220,13 @@ 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])
@ -207,7 +249,6 @@ end
redirect_to master_apply_open_source_project_path
end
private
def require_master

@ -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) }

@ -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

@ -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

@ -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

@ -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

@ -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

@ -69,28 +69,30 @@ module UsersHelper
# <li><%= link_to("所有反馈", {:controller => 'users', :action => 'show', :type => 2}) %></li>
# </ul></div>
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

@ -5,4 +5,8 @@ class BugToOsp < ActiveRecord::Base
validates_presence_of :osp_id, :relative_memo_id
scope :visible, lambda {|*args|
nil
}
end

@ -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

@ -57,13 +57,17 @@ 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|
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)} "
else
@ -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

@ -71,6 +71,11 @@ class RelativeMemo < ActiveRecord::Base
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?
# Message.update_all({:board_id => board_id}, ["id = ? OR parent_id = ?", root.id, root.id ])

@ -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

@ -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,8 +796,37 @@ 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)

@ -4,7 +4,7 @@
<div style="padding-left: 18px">
<div style="font-size: 15px">
<tr>
<td><strong>应用软件:</strong></td>
<td><strong><%=l(:label_softapplication)%>:</strong></td>
<td>
<%= link_to(c_softapplication.softapplication.name, softapplication_path(c_softapplication.softapplication), :target => '_blank') %>
</td>
@ -12,7 +12,7 @@
</div>
<div style="padding-left: 68px">
<tr>
<td>简介:</td>
<td><%=l(:label_profile)%>:</td>
<td>
<%= c_softapplication.softapplication.description.truncate(90, omission: '...') %>
</td>
@ -20,7 +20,7 @@
</div>
<div style="padding-left: 68px; padding-bottom: 8px">
<tr>
<td>发布时间</td>
<td><%=l(:label_activity_time)%></td>
<td>
<%=format_time c_softapplication.created_at %>
</td>

@ -45,7 +45,7 @@
</table>
<!-- end -->
<% else %>
<div style="font-size: 14px;margin:10px;">
<div style="font-size: 14px;margin:10px;padding-left: 13px">
<%= l(:label_user_login_tips) %>
<%= link_to l(:label_user_login_new), signin_path %>
</div>

@ -36,7 +36,7 @@
}
</style>
<h3 class="title">请输入竞赛密码</h3>
<h3 class="title"><%=l(:label_please_input_password)%></h3>
<%= form_tag( join_in_contest_contests_path(id: contest.id),
:remote => true,

@ -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();

@ -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();

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save