diff --git a/.gitignore b/.gitignore index 0cd336786..944ad4ef2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /.bundle *.swp /config/database.yml +/config/configuration.yml /files/* /log/* /tmp/* @@ -14,5 +15,4 @@ /db/schema.rb /Gemfile.lock /lib/plugins/acts_as_versioned/test/debug.log -/config/configuration.yml .rbenv-gemsets diff --git a/Gemfile b/Gemfile index 5045cb822..dc834e68d 100644 --- a/Gemfile +++ b/Gemfile @@ -18,7 +18,7 @@ gem "builder", "3.0.0" gem 'acts-as-taggable-on', '2.4.1' gem 'spreadsheet' gem 'ruby-ole' -gem 'email_verifier' +#gem 'email_verifier' group :development do gem 'better_errors', path: 'lib/better_errors' diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index edd3f1b9d..b5e0362b3 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -273,6 +273,7 @@ class CoursesController < ApplicationController if valid_attr.eql?('name') faker.name = valid_value + faker.course_id = params[:course_id] faker.valid? req[:valid] = faker.errors[:name].blank? req[:message] = faker.errors[:name] diff --git a/app/controllers/poll_controller.rb b/app/controllers/poll_controller.rb index 4abddaa5e..0ee17222e 100644 --- a/app/controllers/poll_controller.rb +++ b/app/controllers/poll_controller.rb @@ -47,6 +47,7 @@ class PollController < ApplicationController :user_id => User.current.id, :published_at => Time.now, :closed_at => Time.now, + :show_result => 1, :polls_description => "" } @poll = Poll.create option diff --git a/app/models/course_group.rb b/app/models/course_group.rb index 144c43c6e..c7fc81df4 100644 --- a/app/models/course_group.rb +++ b/app/models/course_group.rb @@ -12,11 +12,20 @@ class CourseGroup < ActiveRecord::Base before_destroy :set_member_nil attr_accessible :name - validates :name, :presence => true, :length => {:maximum => 20}, - :uniqueness => {case_sensitive: false} + validates :name, :presence => true, :length => {:maximum => 20} + validate :unique_name_and_course + + + def set_member_nil if self.members && self.members.count > 0 self.members.update_all("course_group_id = 0") end end + private + def unique_name_and_course + if CourseGroup.where("name=? and course_id=?", name, course_id).first + errors.add(:name, :groupname_repeat) + end + end end diff --git a/app/models/issue_observer.rb b/app/models/issue_observer.rb index 50cbf2a42..e404a4a1c 100644 --- a/app/models/issue_observer.rb +++ b/app/models/issue_observer.rb @@ -19,7 +19,8 @@ class IssueObserver < ActiveRecord::Observer def after_create(issue) Thread.start do - recipients = issue.recipients + # 将跟踪者与本项目的其他成员都设为收件方,并去重,不在进行抄送, + recipients = issue.recipients - issue.watcher_recipients + issue.watcher_recipients recipients.each do |rec| Mailer.issue_add(issue,rec).deliver if Setting.notified_events.include?('issue_added') end diff --git a/app/models/journal_observer.rb b/app/models/journal_observer.rb index 10d3f7b4b..b58464a9b 100644 --- a/app/models/journal_observer.rb +++ b/app/models/journal_observer.rb @@ -24,7 +24,8 @@ class JournalObserver < ActiveRecord::Observer (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?) ) Thread.start do - recipients = journal.recipients + # 将跟踪者与本项目的其他成员都设为收件方,并去重,不在进行抄送, + recipients = journal.recipients - journal.watcher_recipients + journal.watcher_recipients recipients.each do |rec| Mailer.issue_edit(journal,rec).deliver diff --git a/app/models/mailer.rb b/app/models/mailer.rb index 23ac36054..1760d9004 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -147,13 +147,11 @@ class Mailer < ActionMailer::Base @project_url = url_for(:controller => 'projects', :action => 'show', :id => issue.project_id, :token => @token.value) @user_url = url_for(my_account_url(user,:token => @token.value)) - cc = nil - if recipients == issue.recipients[0] - cc = issue.watcher_recipients - issue.recipients - end + + subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}" mail(:to => recipients, - :cc => cc, + :subject => subject) end # issue.attachments.each do |attach| @@ -198,11 +196,7 @@ class Mailer < ActionMailer::Base - # Watchers in cc - cc = nil - if recipients == journal.recipients[0] - cc = journal.watcher_recipients - journal.recipients - end + s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] " s << "(#{issue.status.name}) " if journal.new_value_for('status_id') @@ -211,7 +205,7 @@ class Mailer < ActionMailer::Base @journal = journal # @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}") mail(:to => recipients, - :cc => cc, + :subject => s) end diff --git a/app/models/user.rb b/app/models/user.rb index bef65fe54..06f59c764 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -188,7 +188,7 @@ class User < Principal validates_confirmation_of :password, :allow_nil => true validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true validate :validate_password_length - validates_email_realness_of :mail + #validates_email_realness_of :mail before_create :set_mail_notification before_save :update_hashed_password before_destroy :remove_references_before_destroy diff --git a/app/views/bids/_bid_homework_show.html.erb b/app/views/bids/_bid_homework_show.html.erb index 2d6c35555..1009f405f 100644 --- a/app/views/bids/_bid_homework_show.html.erb +++ b/app/views/bids/_bid_homework_show.html.erb @@ -56,18 +56,30 @@ <%= link_to(bid.name, course_for_bid_path(bid), :class => 'bid_path') %> - + <% if User.current.logged? && is_cur_course_student(@course) %> <% cur_user_homework = cur_user_homework_for_bid(bid) %> + + <% if bid.open_anonymous_evaluation == 1 %> + <% case bid.comment_status %> + <% when 0 %> + 未开启匿评 + <% when 1 %> +   匿评中..   + <% when 2 %> +   匿评结束   + <% end %> + <% end%> + <% if cur_user_homework && cur_user_homework.empty? %> <%= link_to l(:label_commit_homework),new_exercise_book_path(bid) %> <% else %> - - <%= l(:lable_has_commit_homework)%> - + + 已 提 交 + <% end %> <% end %> <% if (User.current.admin?||User.current.allowed_to?(:as_teacher,@course)) %> diff --git a/app/views/courses/member.html.erb b/app/views/courses/member.html.erb index 803be3731..e2c1fb418 100644 --- a/app/views/courses/member.html.erb +++ b/app/views/courses/member.html.erb @@ -6,7 +6,8 @@ $.get( '<%=valid_ajax_course_path%>', { valid: "name", - value: document.getElementById('group_name').value }, + value: document.getElementById('group_name').value, + course_id: <%= @course.id %> }, function (data) { if (!data.valid) { alert(data.message); diff --git a/app/views/layouts/_base_feedback.html.erb b/app/views/layouts/_base_feedback.html.erb index ae85d9479..f1c829c1f 100644 --- a/app/views/layouts/_base_feedback.html.erb +++ b/app/views/layouts/_base_feedback.html.erb @@ -1,10 +1,10 @@ @@ -313,7 +313,7 @@ <%= link_to l(:label_poll), poll_index_path(:polls_type => "Course", :polls_group_id => @course.id)%>
-

N

+

NEW

diff --git a/app/views/mailer/_issue.html.erb b/app/views/mailer/_issue.html.erb index cd5fbc091..0ec585868 100644 --- a/app/views/mailer/_issue.html.erb +++ b/app/views/mailer/_issue.html.erb @@ -1,7 +1,7 @@

- <%= link_to(h("#{@issue.author}(#{@issue.author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %> + <%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %> <%= l(:mail_issue_title_userin)%> <%= link_to(h("#{@issue.project.name}"), @project_url, :style=>'color:#1b55a7; font-weight:bold;') %><%= l(:mail_issue_title_active)%>

diff --git a/app/views/mailer/_issue.text.erb b/app/views/mailer/_issue.text.erb index 8848e494a..e0579824f 100644 --- a/app/views/mailer/_issue.text.erb +++ b/app/views/mailer/_issue.text.erb @@ -1,5 +1,5 @@ - <%= link_to(h("#{@issue.author}(#{@issue.author.show_name})"), @issue_author_url) %> + <%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url) %> <%= l(:mail_issue_title_userin)%> <%= link_to(h("#{@issue.project.name}"),@project_url) %><%= l(:mail_issue_title_active)%> <%= l(:mail_issue_subject)%><%= link_to(issue.subject, issue_url) %> diff --git a/app/views/mailer/journals_for_message_add.html.erb b/app/views/mailer/journals_for_message_add.html.erb index 1aa8e45f8..f39b49026 100644 --- a/app/views/mailer/journals_for_message_add.html.erb +++ b/app/views/mailer/journals_for_message_add.html.erb @@ -1,5 +1,5 @@ 尊敬的用户,<%= @user %>给你留言了:
<%= @message %>
-

点击链接查看最新回复<%= link_to(@url, @url) %>

-         

<%= link_to(l(:lable_not_receive_mail),"http://" + Setting.host_name + "/my/account")%>

+

点击链接查看最新回复<%= link_to(@url, @url) %> +         <%= link_to(l(:lable_not_receive_mail),"http://" + Setting.host_name + "/my/account")%>

diff --git a/app/views/mailer/message_posted.html.erb b/app/views/mailer/message_posted.html.erb index 4bb487405..1fe28e04f 100644 --- a/app/views/mailer/message_posted.html.erb +++ b/app/views/mailer/message_posted.html.erb @@ -1,10 +1,37 @@ -

- <% if @message.project %> - <%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %> + +

+ + <%= h @message.author %>(<%= @message.author.show_name %>) + <%= l(:mail_issue_title_userin)%> + + <% if @message.project %> + <%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url,:style=>'color:#1b55a7; font-weight:bold;') %> <% elsif @message.course %> - <%=h @message.board.course.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %> - <% end %> -

-<%=h @message.author %> + <%=h @message.board.course.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url,:style=>'color:#1b55a7; font-weight:bold;') %> + <% end %> + <%= l(:mail_issue_title_active)%>

+
+
    +
  • <%= l(:mail_issue_subject)%> <%= link_to(h(@message.subject), @message_url, :style=>'color:#1b55a7; font-weight:bold;') %>
  • +
  • <%= l(:mail_issue_sent_from)%> + <% if @message.project %> + <%=h @message.board.project.name %> - <%=h @message.board.name %> + <% elsif @message.course %> + <%=h @message.board.course.name %> - <%=h @message.board.name %> + <% end %> +
  • +
  • <%= l(:mail_issue_content)%> + + <%= @message.content %> + +
  • + +
+
+ +
+
+ -<%= textilizable(@message, :content, :only_path => false) %> diff --git a/app/views/poll/_poll_form.html.erb b/app/views/poll/_poll_form.html.erb index b3fae8b4a..df4859613 100644 --- a/app/views/poll/_poll_form.html.erb +++ b/app/views/poll/_poll_form.html.erb @@ -59,7 +59,7 @@ { $('#ajax-modal').html('<%= escape_javascript(render :partial => 'poll_submit', locals: { :poll => @poll,:is_remote => false}) %>'); showModal('ajax-modal', '310px'); - $('#ajax-modal').css('height','110px'); + $('#ajax-modal').css('height','115px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before("" + ""); diff --git a/app/views/poll/_show_mulit_result.html.erb b/app/views/poll/_show_mulit_result.html.erb index e54cca505..786ed9460 100644 --- a/app/views/poll/_show_mulit_result.html.erb +++ b/app/views/poll/_show_mulit_result.html.erb @@ -13,7 +13,7 @@

- <%= get_anwser_vote_text poll_question.id,User.current.id%> + <%= get_anwser_vote_text(poll_question.id,User.current.id).html_safe%>

diff --git a/app/views/poll/index.html.erb b/app/views/poll/index.html.erb index de30b5deb..a8aca1308 100644 --- a/app/views/poll/index.html.erb +++ b/app/views/poll/index.html.erb @@ -15,7 +15,7 @@ "" + ""); showModal('ajax-modal', '310px'); - $('#ajax-modal').css('height','110px'); + $('#ajax-modal').css('height','115px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before("" + ""); @@ -41,7 +41,7 @@ "" + ""); showModal('ajax-modal', '310px'); - $('#ajax-modal').css('height','110px'); + $('#ajax-modal').css('height','115px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before("" + ""); diff --git a/config/configuration.yml b/config/configuration.yml index 9a9373e45..f17881485 100644 --- a/config/configuration.yml +++ b/config/configuration.yml @@ -87,12 +87,12 @@ default: - address: smtp.163.com + address: smtp.126.com port: 25 - domain: smtp.163.com + domain: smtp.126.com authentication: :plain - user_name: mcb592@163.com - password: 'mcb1989822' + user_name: "alanlong9278@126.com" + password: 'alanlong8788786' # Absolute path to the directory where attachments are stored. # The default is the 'files' directory in your Redmine instance. diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 77a5b4a1b..0f7d67cb8 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -152,7 +152,7 @@ zh: not_same_project: "不属于同一个项目" circular_dependency: "此关联将导致循环依赖" cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务" - + groupname_repeat: "该班名已存在" actionview_instancetag_blank_option: 请选择 @@ -598,6 +598,7 @@ zh: label_document_added: 文档已添加 label_forum_message_added: 发帖成功 label_forum_add: 贴吧创建成功 + label_message_reply: 回帖人 label_document_public_info: (打钩为公开,不打钩则不公开,若不公开,仅项目成员可见该文档。) label_role: 角色 label_role_plural: 角色 diff --git a/db/migrate/20150123020615_add_show_result.rb b/db/migrate/20150123020615_add_show_result.rb new file mode 100644 index 000000000..0407abceb --- /dev/null +++ b/db/migrate/20150123020615_add_show_result.rb @@ -0,0 +1,9 @@ +class AddShowResult < ActiveRecord::Migration + def up + add_column :polls, :show_result, :integer, default: 1 + end + + def down + remove_column :polls, :show_result + end +end diff --git a/db/schema.rb b/db/schema.rb index 7d10abc35..d0d755bd3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -23,6 +23,18 @@ ActiveRecord::Schema.define(:version => 20150121030451) 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 "api_keys", :force => true do |t| + t.string "access_token" + t.datetime "expires_at" + t.integer "user_id" + t.boolean "active", :default => true + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token" + add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id" + create_table "applied_projects", :force => true do |t| t.integer "project_id", :null => false t.integer "user_id", :null => false diff --git a/public/stylesheets/nyan.css b/public/stylesheets/nyan.css index c532e7112..ac7142c71 100644 --- a/public/stylesheets/nyan.css +++ b/public/stylesheets/nyan.css @@ -1433,8 +1433,8 @@ ul.contest-notification-list li span{ } .xls { - background: url('../images/icon_excel.gif') no-repeat scroll 1px 50% transparent; - padding: 2px 0px 3px 16px; + /*background: url('../images/icon_excel.gif') no-repeat scroll 1px 50% transparent;*/ + /*padding: 2px 0px 3px 16px;*/ font-family:微软雅黑 !important; font-size: 12px !important; color: #136b3b !important; diff --git a/public/stylesheets/polls.css b/public/stylesheets/polls.css index e601d231d..a4e2010f0 100644 --- a/public/stylesheets/polls.css +++ b/public/stylesheets/polls.css @@ -14,9 +14,9 @@ div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span{ margi #polls .fr{ float:right;} /*问卷按钮*/ -.polls_btn{ height:33px;border-top:1px solid #15bed1; border-bottom:1px solid #15bed1;border-right:1px solid #cee6e6; width:225px; padding:7px 0 0 15px; } -.polls_btn a{font-size:14px; color:#444444;font-weight:bold;} -.polls_btn span{ color:#15bed1; font-size:12px; font-weight:normal;} +/*.polls_btn{ height:33px;border-top:1px solid #15bed1; border-bottom:1px solid #15bed1;border-right:1px solid #cee6e6; width:225px; padding:7px 0 0 15px; }*/ +/*.polls_btn a{font-size:14px; color:#444444;font-weight:bold;}*/ +/*.polls_btn span{ color:#15bed1; font-size:12px; font-weight:normal;}*/ /*问卷列表*/ .polls_content{ width:615px;padding-left: 6px;} @@ -53,7 +53,7 @@ ul.wlist li a:hover{ background:#15bccf; color:#fff; text-decoration:none;} .ur_inputs label{ padding-left:10px;word-break: break-all; word-wrap: break-word;} .ur_inputs input{ margin-right:5px;} .ur_text{ height:30px;} -.ur_textbox{ border:1px solid #dcdcdc !important; color:#676765;} +.ur_textbox{ border:1px solid #dcdcdc !important; color:#676765; word-break:break-all; word-wrap:break-word;} .ur_buttons{ width:250px; margin:20px auto 10px;} a.ur_button{ display:block; width:106px; height:37px; background:#15bccf; color:#fff; font-size:16px; text-align:center; padding-top:3px; float:left; margin-right:15px;} a:hover.ur_button{ background:#0fa9bb; text-decoration:none;}