diff --git a/Gemfile b/Gemfile
index 037c606c8..1bc9e6629 100644
--- a/Gemfile
+++ b/Gemfile
@@ -21,7 +21,7 @@ gem 'acts-as-taggable-on', '2.4.1'
gem 'spreadsheet'
gem 'ruby-ole'
#gem 'email_verifier', path: 'lib/email_verifier'
-
+gem 'rufus-scheduler'
group :development do
gem 'grape-swagger'
gem 'grape-swagger-ui', git: 'https://github.com/guange2015/grape-swagger-ui.git'
diff --git a/Gemfile.lock b/Gemfile.lock
index 355ca422d..861c49754 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -252,6 +252,8 @@ GEM
ruby-ole (1.2.11.7)
ruby-openid (2.1.8)
rubyzip (1.1.6)
+ rufus-scheduler (3.0.8)
+ tzinfo
sass (3.3.10)
sass-rails (3.2.6)
railties (~> 3.2.0)
@@ -339,6 +341,7 @@ DEPENDENCIES
rspec-rails (= 2.13.1)
ruby-ole
ruby-openid (~> 2.1.4)
+ rufus-scheduler
sass-rails (~> 3.2.3)
seems_rateable!
selenium-webdriver (~> 2.42.0)
diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index 61944ca2c..a55abd123 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -5,6 +5,7 @@ class CoursesController < ApplicationController
helper :members
helper :words
+ before_filter :authorize1, :only => [:show, :feedback]
menu_item :overview
menu_item :feedback, :only => :feedback
menu_item :homework, :only => :homework
diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb
index 8d6943f02..d2a253c2a 100644
--- a/app/controllers/messages_controller.rb
+++ b/app/controllers/messages_controller.rb
@@ -17,6 +17,7 @@
class MessagesController < ApplicationController
include ApplicationHelper
+ before_filter :authorize1, :only => [:show]
menu_item :boards
default_search_scope :messages
before_filter :find_board, :only => [:new, :preview,:edit]
diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb
index 2df17d73f..b44e8a348 100644
--- a/app/controllers/news_controller.rb
+++ b/app/controllers/news_controller.rb
@@ -17,6 +17,7 @@
class NewsController < ApplicationController
layout 'base_projects'# by young
+ before_filter :authorize1, :only => [:show]
default_search_scope :news
model_object News
before_filter :find_model_object, :except => [:new, :create, :index]
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 02bfc9e19..5054fd5c1 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -19,7 +19,7 @@
# Description 封装代码,简化代码,格式化代码,
class ProjectsController < ApplicationController
layout :select_project_layout
-
+ before_filter :authorize1, :only => [:show]
menu_item :overview, :only => :show
menu_item :roadmap, :only => :roadmap
menu_item :settings, :only => :settings
diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb
index c71fbaf47..39618e43b 100644
--- a/app/models/journals_for_message.rb
+++ b/app/models/journals_for_message.rb
@@ -22,8 +22,8 @@ class JournalsForMessage < ActiveRecord::Base
:foreign_key => 'jour_id',
:conditions => "#{self.table_name}.jour_type = 'Project' "
belongs_to :course,
- :foreign_key => 'jour_id',
- :conditions => "#{self.table_name}.jour_type = 'Course' "
+ :foreign_key => 'jour_id'
+
belongs_to :jour, :polymorphic => true
belongs_to :user
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index 2cae982a7..85ce46e8b 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -27,6 +27,80 @@ class Mailer < ActionMailer::Base
{ :host => Setting.host_name, :protocol => Setting.protocol }
end
+ # author: alan
+ # 根据用户选择发送个人日报或周报
+ # 发送内容: 项目【缺陷,讨论区,新闻】,课程【通知,留言,新闻】, 贴吧, 个人留言
+ def send_for_user_activities(user, date_to, days)
+ date_from = date_to - days.days
+
+ # 生成token用于直接点击登录
+ token = Token.new(:user =>user , :action => 'autologin')
+ token.save
+ @token = token
+
+ @user_url = url_for(my_account_url(user,:token => @token.value))
+ # 查询user参加的项目及课程
+ projects = user.projects
+ courses = user.courses
+ project_ids = projects.map{|project| project.id}.join(",")
+ course_ids = courses.map {|course| course.id}.join(",")
+
+ # 查询user的缺陷,包括发布的,跟踪的以及被指派的缺陷
+ @issues = Issue.find_by_sql("select DISTINCT i.* from issues i, watchers w
+ where (i.assigned_to_id = #{user.id} or i.author_id = #{user.id}
+ or (w.watchable_type = 'Issue' and w.watchable_id = i.id and w.user_id = #{user.id}))
+ and (i.created_on between #{date_from} and #{date_to}) order by i.created_on desc")
+
+ # 查询课程作业,包括老师发布的作业,以及user提交作业
+ @bids ||= [] # 老师发布的作业
+ courses.each do |course|
+ @bids << course.homeworks.where("created_at between #{date_from} and #{date_to} order by i.created_on desc")
+ end
+ # user 提交的作业
+ @homeworks = HomeworkAttach.where("user_id=#{user.id} and (created_at between #{date_from} and #{date_to})")
+
+ # 查询user在课程。项目中发布的讨论帖子
+ messages = Message.find_by_sql("select DISTINCT * from messages where author_id = #{user.id} and (created_on between #{date_from} and #{date_to}) order by i.created_on desc")
+ @course_messages ||= []
+ @project_messages ||= []
+ messages.each do |msg|
+ if msg.project
+ @project_messages << msg
+ elsif msg.course
+ @course_messages << msg
+ end
+ end
+
+ # 查询user在课程中发布的通知,项目中发的新闻
+ @course_news = News.find_by_sql("select DISTINCT n.* from news n
+ where n.course_id in (#{course_ids})
+ and (created_on between #{date_from} and #{date_to}) order by i.created_on desc")
+ @project_news = News.find_by_sql("select DISTINCT n.* from news n where n.project_id in (#{project_ids})
+ and (created_on between #{date_from} and #{date_to}) order by i.created_on desc")
+
+ # 查询user在课程及个人中留言
+ @course_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT * from journals_for_messages where
+ jour_type='Course' and user_id = #{user.id}
+ and (created_on between #{date_from} and #{date_to}) order by i.created_on desc")
+ @user_journal_messages = user.journals_for_messages.where("m_parent_id IS NULL and (created_on between #{date_from} and #{date_to})").order('created_on DESC')
+
+ # 查询课程课件更新
+ @attachments ||= []
+ courses.each do |course|
+ @attachments << course.attachments.where("created_on between #{date_from} and #{date_to}").order('created_at DESC')
+ end
+ # 查询user新建贴吧或发布帖子
+ @forums = Forum.find_by_sql("select DISTINCT * from forums where creator_id = #{user.id} and (created_at between #{date_from} and #{date_to}) order by i.created_on desc")
+ @memos = Memo.find_by_sql("select DISTINCT m.* from memos m, forums f where (m.author_id = #{user.id} or (m.forum_id = f.id and f.creator_id = #{user.id}))
+ and (created_at between #{date_from} and #{date_to}) order by i.created_on desc")
+ if days == 1
+ subject = "[ #{user.show_name} : #{date_from} - #{l(:label_day_mail)}]"
+ else
+ subject = "[ #{user.show_name} : #{l(:label_week_mail)}]"
+ end
+ mail :to => user.mail,:subject => "[ #{user.show_name} : #{l(:notice_successful_create)}]"
+
+ end
# 贴吧新建贴吧发送邮件
# example Mailer.forum(forum).deliver
def forum_add(forum)
@@ -140,7 +214,6 @@ class Mailer < ActionMailer::Base
@author = issue.author
@issue = issue
user = User.find_by_mail(recipients)
-
token = Token.new(:user =>user , :action => 'autologin')
token.save
@token = token
diff --git a/app/models/user.rb b/app/models/user.rb
index 06f59c764..dd06db838 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -24,7 +24,7 @@ class User < Principal
DEVELOPER = 3
include Redmine::SafeAttributes
-
+ seems_rateable_rater
# Different ways of displaying/sorting users
USER_FORMATS = {
:firstname_lastname => {
@@ -149,7 +149,7 @@ class User < Principal
scope :by_join_date, order("created_on DESC")
############################# added by liuping 关注
acts_as_watchable
- seems_rateable_rater
+
has_one :user_extensions,:dependent => :destroy
## end
diff --git a/app/views/mailer/send_for_user_activities.html.erb b/app/views/mailer/send_for_user_activities.html.erb
new file mode 100644
index 000000000..22b071a1f
--- /dev/null
+++ b/app/views/mailer/send_for_user_activities.html.erb
@@ -0,0 +1,337 @@
+
+
+
+
+
+
+
+
<%= l(:label_course_overview)%>
+ <% unless @course_news.first.nil? %>
+
+
+
+ <%= l(:label_course_news) %>
+ (<%= @course_news.count %>)
+
+
+ <% @course_news.each do |course_new|%>
+ -
+ ▪
+ [
+
+ <%= link_to course_new.course.name, [:controller => 'courses', :action => 'show', :id => course_new.course_id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to course_new.author, user_activities_url(course_new.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_project_notice) %>
+
+ <%= link_to course_new.title, [:controller => 'news', :action => 'show', :id => course_new.id,:token => @token.value],
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= course_new.created_on %>
+
+ <% end %>
+
+
+
+ <% end %>
+ <% if !@bids.first.nil? || !@homeworks.first.nil? %>
+
+
+ <%= l(:label_homework_overview) %>>(<%= @bids.count %>)
+ <% unless @bids.first.nil?%>
+ <% @bids.each do |bid| %>
+ -
+ ▪
+ [
+
+ <%= link_to bid.courses.first.name, [:controller => 'courses', :action => 'show', :id => bid.courses.first.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to bid.author, user_activities_url(bid.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_course_homework) %>
+
+ <%= link_to bid.name, course_for_bid(:id => bid.id,:token => @token.value),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= bid.created_on %>
+
+ <% end %>
+ <% end %>
+ <% unless @homeworks.first.nil? %>
+ <% @homeworks.each do |homework| %>
+ -
+ ▪
+ [
+
+ <%= link_to homework.bid.courses.first.name, [:controller => 'courses', :action => 'show', :id => homework.bid.courses.first.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to homework.user, user_activities_url(homework.user,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_course_submit_homework) %>
+
+ <%= link_to homework.name, course_for_bid(:id => homework.bid.id,:token => @token.value),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= homework.created_on %>
+
+ <% end %>
+ <% end %>
+
+
+
+ <% end %>
+
+ <% unless @course_journal_messages.first.nil? %>
+
+
+
+ <%= l(:view_course_journals_for_messages) %>
+ (<%= @course_journal_messages.count %>)
+
+
+ <% @course_journal_messages.each do |course_journal_message|%>
+ -
+ ▪
+ [
+
+ <%= link_to course_journal_message.course.name, [:controller => 'courses', :action => 'show', :id => course_journal_message.jour_id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to course_journal_message.user, user_activities_url(course_journal_message.user,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_send_course_journals_for_messages) %>
+
+ <%= link_to course_journal_message.notes, [:controller => 'courses', :action => 'feedback', :id => course_journal_message.jour_id,:token => @token.value],
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= course_journal_message.created_on %>
+
+ <% end %>
+
+
+
+ <% end %>
+
+ <% unless @course_messages.first.nil? %>
+
+
+
+ <%= l(:view_borad_course) %>
+ (<%= @course_journal_messages.count %>)
+
+
+ <% @course_messages.each do |course_message|%>
+ -
+ ▪
+ [
+
+ <%= link_to course_message.course.name, [:controller => 'courses', :action => 'show', :id => course_message.course.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to course_message.author, user_activities_url(course_message.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_send_course_messages) %>
+
+ <%= link_to course_message.subject,url_for(course_message.event_url(:token => @token.value)),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= course_message.created_on %>
+
+ <% end %>
+
+
+
+ <% end %>
+
+ <% unless @attachments.first.nil? %>
+
+
+ <%= l(:label_course_attendingcontestwork_download) %>
+ (<%= @attachments.count %>)
+
+
+ <% @attachments.each do |attachment|%>
+ -
+ ▪
+ [
+
+ <%= link_to attachment.course.name, [:controller => 'courses', :action => 'show', :id => attachment.course.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to attachment.author, user_activities_url(attachment.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_course_file_upload) %>
+
+ <%= link_to attachment.filename,course_files_path(@course,:token => @token.value),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= course_message.created_on %>
+
+ <% end %>
+
+
+ <% end %>
+
+
+
+
+
<%= l(:label_project_overview)%>
+ <% unless @issues.first.nil? %>
+
+
+ <%= l(:label_issue_tracking) %>
+ (<%= @issues.count %>)
+
+
+ <% @issues.each do |issue|%>
+ -
+ ▪
+ [
+
+ <%= link_to issue.project.name, [:controller => 'projects', :action => 'show', :id => issue.project.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to issue.author, user_activities_url(issue.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_project_issue) %>
+
+ <%= link_to issue.subject,url_for(:controller => 'issues', :action => 'show', :id => issue.id, :token => @token.value),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= issue.created_on %>
+
+ <% end %>
+
+
+
+ <% end %>
+
+ <% unless @project_messages.first.nil? %>
+
+
+ <%= l(:project_moule_boards_show) %>
+ (<%= @course_journal_messages.count %>)
+
+
+ <% @project_messages.each do |project_message|%>
+ -
+ ▪
+ [
+
+ <%= link_to project_message.project.name, [:controller => 'projects', :action => 'show', :id => project_message.project.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to project_message.author, user_activities_url(project_message.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_send_course_messages) %>
+
+ <%= link_to project_message.subject,url_for(project_message.event_url(:token => @token.value)),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= project_message.created_on %>
+
+ <% end %>
+
+
+
+ <% end %>
+
+
+
+
+
+
+
<%= l(:label_activities) %>
+ <% unless @user_journal_messages.first.nil? %>
+
+
+ <%= l(:label_user_message) %>
+ (<%= @user_journal_messages.count %>)
+
+
+ <% @user_journal_messages.each do |user_journal_message|%>
+ -
+ ▪
+
+ <%= link_to user_journal_message.user, user_activities_url(course_journal_message.user,:token => @token.value),
+ :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ <%= l(:label_show_your_message) %>
+
+ <%= link_to user_journal_message.notes, [:controller => 'courses', :action => 'feedback', :id => course_journal_message.jour_id,:token => @token.value],
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= user_journal_message.created_on %>
+
+ <% end %>
+
+
+
+ <% end %>
+
+
+
+
+
+
diff --git a/app/views/mailer/send_for_user_activities.text.erb b/app/views/mailer/send_for_user_activities.text.erb
new file mode 100644
index 000000000..03ea31ec3
--- /dev/null
+++ b/app/views/mailer/send_for_user_activities.text.erb
@@ -0,0 +1,253 @@
+<%= l(:label_course_overview)%>
+ <% unless @course_news.first.nil? %>
+ <%= l(:label_course_news) %>
+ (<%= @course_news.count %>)
+
+
+ <% @course_news.each do |course_new|%>
+
+ ▪
+ [
+
+ <%= link_to course_new.course.name, [:controller => 'courses', :action => 'show', :id => course_new.course_id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to course_new.author, user_activities_url(course_new.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_project_notice) %>
+
+ <%= link_to course_new.title, [:controller => 'news', :action => 'show', :id => course_new.id,:token => @token.value],
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %> <%= course_new.created_on %>
+
+ <% end %>
+
+ <% end %>
+ <% if !@bids.first.nil? || !@homeworks.first.nil? %>
+ <%= l(:label_homework_overview) %><%= @bids.count %>
+ <% unless @bids.first.nil?%>
+ <% @bids.each do |bid| %>
+ ▪
+ [
+
+ <%= link_to bid.courses.first.name, [:controller => 'courses', :action => 'show', :id => bid.courses.first.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to bid.author, user_activities_url(bid.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_course_homework) %>
+
+ <%= link_to bid.name, course_for_bid(:id => bid.id,:token => @token.value),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= bid.created_on %>
+
+ <% end %>
+ <% end %>
+ <% unless @homeworks.first.nil? %>
+ <% @homeworks.each do |homework| %>
+ ▪[
+
+ <%= link_to homework.bid.courses.first.name, [:controller => 'courses', :action => 'show', :id => homework.bid.courses.first.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to homework.user, user_activities_url(homework.user,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_course_submit_homework) %>
+
+ <%= link_to homework.name, course_for_bid(:id => homework.bid.id,:token => @token.value),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= homework.created_on %>
+ <% end %>
+ <% end %>
+
+
+
+ <% end %>
+
+ <% unless @course_journal_messages.first.nil? %>
+
+ <%= l(:view_course_journals_for_messages) %> (<%= @course_journal_messages.count %>)
+
+
+ <% @course_journal_messages.each do |course_journal_message|%>
+
+ [
+
+ <%= link_to course_journal_message.course.name, [:controller => 'courses', :action => 'show', :id => course_journal_message.jour_id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to course_journal_message.user, user_activities_url(course_journal_message.user,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_send_course_journals_for_messages) %>
+
+ <%= link_to course_journal_message.notes, [:controller => 'courses', :action => 'feedback', :id => course_journal_message.jour_id,:token => @token.value],
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= course_journal_message.created_on %>
+
+ <% end %>
+
+
+ <% end %>
+
+ <% unless @course_messages.first.nil? %>
+
+ <%= l(:view_borad_course) %>
+ (<%= @course_journal_messages.count %>)
+
+
+ <% @course_messages.each do |course_message|%>
+
+ ▪
+ [
+
+ <%= link_to course_message.course.name, [:controller => 'courses', :action => 'show', :id => course_message.course.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to course_message.author, user_activities_url(course_message.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_send_course_messages) %>
+
+ <%= link_to course_message.subject,url_for(course_message.event_url(:token => @token.value)),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= course_message.created_on %>
+
+ <% end %>
+
+
+ <% end %>
+
+ <% unless @attachments.first.nil? %>
+
+ <%= l(:label_course_attendingcontestwork_download) %>
+ (<%= @attachments.count %>)
+
+
+ <% @attachments.each do |attachment|%>
+ ▪[
+
+ <%= link_to attachment.course.name, [:controller => 'courses', :action => 'show', :id => attachment.course.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to attachment.author, user_activities_url(attachment.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_course_file_upload) %>
+
+ <%= link_to attachment.filename,course_files_path(@course,:token => @token.value),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= course_message.created_on %>
+
+ <% end %>
+
+
+ <% end %>
+
+
+
+<%= l(:label_project_overview)%>
+ <% unless @issues.first.nil? %>
+
+ <%= l(:label_issue_tracking) %>
+ (<%= @issues.count %>)
+
+ <% @issues.each do |issue|%>
+ ▪
+ [
+
+ <%= link_to issue.project.name, [:controller => 'projects', :action => 'show', :id => issue.project.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to issue.author, user_activities_url(issue.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_project_issue) %>
+
+ <%= link_to issue.subject,url_for(:controller => 'issues', :action => 'show', :id => issue.id, :token => @token.value),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= issue.created_on %>
+ <% end %>
+
+
+ <% end %>
+
+ <% unless @project_messages.first.nil? %>
+
+ <%= l(:project_moule_boards_show) %>
+ (<%= @course_journal_messages.count %>)
+
+ <% @project_messages.each do |project_message|%>
+ ▪[
+
+ <%= link_to project_message.project.name, [:controller => 'projects', :action => 'show', :id => project_message.project.id, :token => @token.value],
+ :class=> "wmail_column",
+ :style=> "width:90px; font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ ]
+
+ <%= link_to project_message.author, user_activities_url(project_message.author,:token => @token.value), :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
+ <%= l(:label_send_course_messages) %>
+
+ <%= link_to project_message.subject,url_for(project_message.event_url(:token => @token.value)),
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= project_message.created_on %>
+ <% end %>
+
+
+ <% end %>
+
+
+
+<%= l(:label_activities) %>
+ <% unless @user_journal_messages.first.nil? %>
+
+ <%= l(:label_user_message) %>
+ (<%= @user_journal_messages.count %>)
+
+ <% @user_journal_messages.each do |user_journal_message|%>
+ ▪
+
+ <%= link_to user_journal_message.user, user_activities_url(course_journal_message.user,:token => @token.value),
+ :class => "wmail_name",
+ :style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; width:50px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
+ <%= l(:label_show_your_message) %>
+
+ <%= link_to user_journal_message.notes, [:controller => 'courses', :action => 'feedback', :id => course_journal_message.jour_id,:token => @token.value],
+ :class => 'wmail_info',
+ :style => "color:#5a5a5a; float:left; width:400px; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
+ %>
+ <%= user_journal_message.created_on %>
+
+ <% end %>
+
+
+ <% end %>
+<
+
+ <%= link_to l(:mail_footer), @user_url, :style => "margin-top:20px;color:#2775d2; margin-left:10px;" %>
diff --git a/config/initializers/send_mail.rb b/config/initializers/send_mail.rb
new file mode 100644
index 000000000..4cfd3cc03
--- /dev/null
+++ b/config/initializers/send_mail.rb
@@ -0,0 +1,23 @@
+#!/usr/bin/env ruby
+
+require 'rubygems'
+require 'rufus-scheduler'
+
+#users = User.where("mail_notification = 'week' or mail_notification = 'day'")
+
+scheduler = Rufus::Scheduler.new
+scheduler.cron('*/1 * * * *') do
+ users = User.where("login like '%alan%'")
+ users.each do |user|
+ # if user.mail_notification == "week"
+ # cycle = '*/1 * * * *'
+ # else
+ # cycle = '*/2 * * * *'
+ # end
+ Rails.logger.info "send mail to #{user.show_name}(#{user.mail}) at #{Time.now}"
+ Thread.start do
+ Mailer.send_for_user_activities(user, Date.today, 7).deliver
+ end
+ end
+end
+
diff --git a/config/locales/zh.yml b/config/locales/zh.yml
index 42a1143ec..8899256a9 100644
--- a/config/locales/zh.yml
+++ b/config/locales/zh.yml
@@ -248,6 +248,9 @@ zh:
# end
field_name: 名称
field_enterprise_name: 组织名称
+
+ label_week_mail: 一周动态
+ label_day_mail: 一日动态
#added by huang
field_tea_name: 教师
field_couurse_time: 学时
@@ -497,6 +500,9 @@ zh:
permission_paret_in_homework: 加入作业
permission_view_homework_attaches: 查看作业附件
permission_view_course_journals_for_messages: 查看课程留言
+ view_course_journals_for_messages: 课程留言
+ label_send_course_journals_for_messages: 发布了留言
+ label_send_course_messages: 发布了讨论
permission_select_course_modules: 选择课程模块
permission_view_course_files: 查看课程资源
permission_add_course: 新建课程
@@ -511,6 +517,7 @@ zh:
permission_upload_attachments: 资源上传
project_module_issue_tracking: 问题跟踪
+ project_moule_boards_show: 项目论坛
project_module_time_tracking: 时间跟踪
project_module_news: 新闻
project_module_documents: 文档
@@ -657,6 +664,8 @@ zh:
label_user_login_attending_contest: 您还没有登录,请登录后参赛
label_user_login_score_and_comment: 您还没有登录,请登录后对作品进行打分评价
label_user_login_notificationcomment: 您还没有登录,请登录后参加评论
+ label_user_message: 您的留言
+ label_show_your_message: 给您的留言
#end
#by huang # modified by bai
label_college: 高校进入
@@ -727,6 +736,7 @@ zh:
label_attachment: 文件
label_attachment_new: 新建文件
label_file_upload: 上传资料
+ label_course_file_upload: 上传了课件
label_attachment_delete: 删除文件
label_attachment_plural: 文件
label_file_added: 文件已添加
@@ -745,6 +755,8 @@ zh:
label_settings: 配置
label_overview: 近期动态
label_course_overview: "课程动态"
+ label_project_overview: "项目动态"
+ label_homework_overview: 作业动态
label_question_student: 作业交流 #bai
label_homework_commit: 提交作业 #huang
label_homework_info: 提交情况 #huang
@@ -992,6 +1004,7 @@ zh:
label_project_newother: "查看其他评论"
label_project_newshare: "分享了"
label_project_notice: "发布了通知:"
+ label_project_issue: "发布了问题:"
label_project_newadd: "添加了"
label_project_unadd: "暂无项目,赶快去创建吧!"
label_project_un: "该用户暂未参与任何项目!"
@@ -1591,6 +1604,7 @@ zh:
label_exist_repository_path: 定义已有版本库URL路径,定义格式file://, http://, https://, svn://
label_project_no_activity: 该项目暂无动态!
label_course_homework_un: 暂未发布任何作业
+ label_course_homework: 发布了作业
label_follow_no_requirement: 暂未关注任何需求!
label_no_user_respond_you: 暂无任何用户对您进行反馈!
label_tags_issue: 问题名称:
@@ -1662,6 +1676,7 @@ zh:
label_project_no_follow: 该项目暂未被关注!
label_no_bid_project: 暂无参与项目
label_no_course_project: 暂无已提交的作业!
+ label_course_submit_homework: 提交了作业
label_bids_reward_method: 奖励方式 :
label_bids_reward_what: 输入奖励内容
label_call_bonus: 奖金
@@ -1769,6 +1784,7 @@ zh:
label_wiki_number: wiki的数量
label_message_number: 留言的数量
label_activity_number: 个人动态数量
+ label_activities: 个人动态
label_issue_message_number: 对issue的留言数量
label_code_submit_number: 代码提交次数
label_topic_number: 讨论区发言数量
@@ -1954,6 +1970,7 @@ zh:
label_hot_project: '热门项目'
label_borad_project: 项目讨论区
label_borad_course: 课程讨论区
+ view_borad_course: 课程讨论
label_memo_create_succ: 发布成功
label_memo_create_fail: 发布失败
label_forum_create_succ: 贴吧新建成功
@@ -2117,6 +2134,7 @@ zh:
label_attendingcontestwork_release_person: 发布人员
label_attendingcontestwork_adaptive_system: 系统支持
label_attendingcontestwork_download: 作品下载
+ label_course_attendingcontestwork_download: 课件下载
label_attendingcontestwork_developers: 开发人员
label_attendingcontestwork_average_scores: 平均评分
label_attendingcontestwork_release_time: 发布时间
@@ -2370,7 +2388,7 @@ zh:
mail_issue_from_project: "项目问题跟踪"
mail_issue_attachments: "附件:"
mail_issue_reply: "我要回复"
-
+ mail_footer: "退订Trustie社区任务提醒?"
# 课程资源上传
# edit by meng
# 课程资源上传>