diff --git a/app/controllers/forums_controller.rb b/app/controllers/forums_controller.rb
index 03d1454ef..54b8c6305 100644
--- a/app/controllers/forums_controller.rb
+++ b/app/controllers/forums_controller.rb
@@ -160,12 +160,15 @@ class ForumsController < ApplicationController
def create
@forum = Forum.new(params[:forum])
@forum.creator_id = User.current.id
+ if @forum.save
+ respond_to do |format|
- respond_to do |format|
- if @forum.save
- format.html { redirect_to @forum, notice: l(:label_forum_create_succ) }
- format.json { render json: @forum, status: :created, location: @forum }
- else
+ format.html { redirect_to @forum, notice: l(:label_forum_create_succ) }
+ format.json { render json: @forum, status: :created, location: @forum }
+ end
+
+ else
+ respond_to do |format|
flash.now[:error] = "#{l :label_forum_create_fail}: #{@forum.errors.full_messages[0]}"
format.html { render action: "new" }
format.json { render json: @forum.errors, status: :unprocessable_entity }
diff --git a/app/controllers/homework_attach_controller.rb b/app/controllers/homework_attach_controller.rb
index 8b9bf9099..8e69d1d72 100644
--- a/app/controllers/homework_attach_controller.rb
+++ b/app/controllers/homework_attach_controller.rb
@@ -26,6 +26,7 @@ class HomeworkAttachController < ApplicationController
get_not_batch_homework_list sort,direction, @bid.id
@cur_page = params[:page] || 1
@cur_type = 1
+ @cur_sort,@cur_direction = params[:sort] || "s_socre", params[:direction] || "desc"
@direction = direction == 'asc'? 'desc' : 'asc'
respond_to do |format|
format.js
@@ -433,7 +434,7 @@ class HomeworkAttachController < ApplicationController
#添加留言
def addjours
@is_teacher,@is_anonymous_comments,@m_score = params[:is_teacher]=="true",params[:is_anonymous_comments]=="true",params[:stars_value]
- @cur_page,@cur_type = params[:cur_page] || 1,params[:cur_type] || 5
+ @cur_page,@cur_type = params[:page] || 1,params[:cur_type] || 5
@homework = HomeworkAttach.find(params[:homework_id])
@stars_reates = @homework.rates(:quality)
homework = @homework
@@ -479,7 +480,7 @@ class HomeworkAttachController < ApplicationController
if @cur_type == "1" #如果当前是老师未批列表,需要刷新整个作业列表界面
@bid = @homework.bid
- get_not_batch_homework_list "s_socre","desc",@homework.bid_id
+ get_not_batch_homework_list params[:cur_sort] || "s_socre",params[:cur_direction] || "desc",@homework.bid_id
elsif @cur_type == "2" #老师已批列表
@result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*,
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score,
diff --git a/app/controllers/poll_controller.rb b/app/controllers/poll_controller.rb
index 42ab98e10..4abddaa5e 100644
--- a/app/controllers/poll_controller.rb
+++ b/app/controllers/poll_controller.rb
@@ -1,7 +1,7 @@
class PollController < ApplicationController
- before_filter :find_poll_and_course, :only => [:edit,:update,:destroy,:show,:statistics_result,:create_poll_question,:commit_poll,:commit_answer,:publish_poll,:republish_poll]
+ before_filter :find_poll_and_course, :only => [:edit,:update,:destroy,:show,:statistics_result,:create_poll_question,:commit_poll,:commit_answer,:publish_poll,:republish_poll,:poll_result]
before_filter :find_container, :only => [:new,:create, :index]
- before_filter :is_member_of_course, :only => [:index,:show]
+ before_filter :is_member_of_course, :only => [:index,:show,:poll_result]
before_filter :is_course_teacher, :only => [:new,:create,:edit,:update,:destroy,:publish_poll,:republish_poll]
include PollHelper
def index
@@ -330,6 +330,14 @@ class PollController < ApplicationController
end
end
+ #显示某个学生某份问卷的填写结果
+ def poll_result
+ @poll_questions = paginateHelper @poll.poll_questions,5
+ respond_to do |format|
+ format.html{render :layout => 'base_courses'}
+ end
+ end
+
private
def find_poll_and_course
@poll = Poll.find params[:id]
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 24a3ff19f..a2e793a10 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -35,7 +35,7 @@ class ProjectsController < ApplicationController
# edit
before_filter :authorize1, :only => [:show]
#
- before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise,:view_homework_attaches]
+ before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise,:view_homework_attaches,:join_project]
# before_filter :authorize, :except => [:new_join, :new_homework, :homework, :statistics, :search, :watcherlist, :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy, :member, :focus, :file,
# :statistics, :feedback, :course, :enterprise_course, :course_enterprise, :project_respond, :share,
# :show_projects_score, :issue_score_index, :news_score_index, :file_score_index, :code_submit_score_index, :projects_topic_score_index]
@@ -917,6 +917,14 @@ class ProjectsController < ApplicationController
end
end
end
+
+ #加入私有项目
+ def join_project
+ respond_to do |format|
+ format.js
+ end
+ end
+
private
def memberAccess
diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb
index 95b049dc2..22eb9bfae 100644
--- a/app/helpers/courses_helper.rb
+++ b/app/helpers/courses_helper.rb
@@ -112,7 +112,7 @@ module CoursesHelper
# end
#获取课程所有成员
- def course_member course
+ def course_all_member course
course.members
end
# 学生人数计算
diff --git a/app/helpers/poll_helper.rb b/app/helpers/poll_helper.rb
index 17ef02a36..60d82c096 100644
--- a/app/helpers/poll_helper.rb
+++ b/app/helpers/poll_helper.rb
@@ -73,5 +73,5 @@ module PollHelper
"多行主观题"
end
end
-
+
end
\ No newline at end of file
diff --git a/app/models/forum.rb b/app/models/forum.rb
index 61ba528a0..eb8bb19d2 100644
--- a/app/models/forum.rb
+++ b/app/models/forum.rb
@@ -18,7 +18,7 @@ class Forum < ActiveRecord::Base
acts_as_taggable
scope :by_join_date, order("created_at DESC")
-
+ after_create :send_email
def reset_counters!
self.class.reset_counters!(id)
end
@@ -33,6 +33,11 @@ class Forum < ActiveRecord::Base
self.creator == user || user.admin?
end
+ def send_email
+ Thread.start do
+ Mailer.forum_add(self).deliver if Setting.notified_events.include?('forum_add')
+ end
+ end
# Updates topic_count, memo_count and last_memo_id attributes for +board_id+
def self.reset_counters!(forum_id)
forum_id = forum_id.to_i
diff --git a/app/models/forum_observer.rb b/app/models/forum_observer.rb
new file mode 100644
index 000000000..1c514d6ab
--- /dev/null
+++ b/app/models/forum_observer.rb
@@ -0,0 +1,8 @@
+class ForumObserver < ActiveRecord::Observer
+ def after_create(forum)
+ Thread.start do
+ Mailer.forum_add(forum).deliver if Setting.notified_events.include?('forum_add')
+ end
+
+ end
+end
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index a2e742ee3..23ac36054 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -26,7 +26,37 @@ class Mailer < ActionMailer::Base
def self.default_url_options
{ :host => Setting.host_name, :protocol => Setting.protocol }
end
-
+
+ # 贴吧新建贴吧发送邮件
+ # example Mailer.forum(forum).deliver
+ def forum_add(forum)
+
+ redmine_headers 'Forum' => forum.id
+ @forum = forum
+ @author = forum.creator
+ recipients = forum.creator.mail
+ # cc = wiki_content.page.wiki.watcher_recipients - recipients
+
+ @forum_url = url_for(:controller => 'forums', :action => 'show', :id => forum.id)
+ mail :to => recipients,:subject => "[ #{l(:label_forum)} : #{forum.name} #{l(:notice_successful_create)}]"
+
+ end
+
+ def forum_message_added(memo)
+ @memo = memo
+ redmine_headers 'Memo' => memo.id
+ @forum = memo.forum
+ @author = memo.author
+ recipients ||= []
+ mems = memo.self_and_siblings
+ mems.each do |mem|
+ recipients << mem.author.mail unless recipients.include? mem.author.mail
+ end
+ # cc = wiki_content.page.wiki.watcher_recipients - recipients
+
+ @memo_url = url_for(forum_memo_url(@forum, (@memo.parent_id.nil? ? @memo : @memo.parent_id)))
+ mail :to => recipients,:subject => "[ #{l(:label_message_plural)} : #{memo.subject} #{l(:label_memo_create_succ)}]"
+ end
# Builds a Mail::Message object used to email recipients of the added journals for message.
# 留言分为直接留言,和对留言人留言的回复
@@ -62,7 +92,7 @@ class Mailer < ActionMailer::Base
course = journals_for_message.jour
@author = journals_for_message.user
#课程的教师
- @members = course_member journals_for_message.jour
+ @members = course_all_member journals_for_message.jour
#收件人邮箱
@recipients ||= []
@members.each do |teacher|
@@ -117,8 +147,10 @@ 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 = issue.watcher_recipients - issue.recipients
+ 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,
@@ -167,8 +199,11 @@ class Mailer < ActionMailer::Base
# Watchers in cc
+ cc = nil
+ if recipients == journal.recipients[0]
+ cc = journal.watcher_recipients - journal.recipients
+ end
- cc = journal.watcher_recipients - journal.recipients
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] "
s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
s << issue.subject
@@ -282,7 +317,7 @@ class Mailer < ActionMailer::Base
recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail }
when 'Course'
added_to_url = url_for(:controller => 'files', :action => 'index', :course_id => container)
- added_to = "#{l(:label_course)}: #{container}"
+ added_to = "#{l(:label_course)}: #{container.name}"
recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail }
when 'Version'
added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project)
@@ -323,13 +358,25 @@ class Mailer < ActionMailer::Base
# news_added(news) => Mail::Message object
# Mailer.news_added(news).deliver => sends an email to the news' project recipients
def news_added(news)
- redmine_headers 'Project' => news.project.identifier
- @author = news.author
- message_id news
- @news = news
- @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
- mail :to => news.recipients,
- :subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}"
+
+ if news.project
+ redmine_headers 'Project' => news.project.identifier
+ @author = news.author
+ message_id news
+ @news = news
+ @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
+ mail :to => news.recipients,
+ :subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}"
+ elsif news.course
+ redmine_headers 'Course' => news.course.id
+ @author = news.author
+ message_id news
+ @news = news
+ recipients = news.course.notified_users.select { |user| user.allowed_to?(:view_files, news.course) }.collect { |u| u.mail }
+ @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
+ mail :to => recipients,
+ :subject => "[#{news.course.name}] #{l(:label_news)}: #{news.title}"
+ end
end
# Builds a Mail::Message object used to email recipients of a news' project when a news comment is added.
@@ -339,15 +386,28 @@ class Mailer < ActionMailer::Base
# Mailer.news_comment_added(comment) => sends an email to the news' project recipients
def news_comment_added(comment)
news = comment.commented
- redmine_headers 'Project' => news.project.identifier
- @author = comment.author
- message_id comment
- @news = news
- @comment = comment
- @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
- mail :to => news.recipients,
- :cc => news.watcher_recipients,
- :subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}"
+ if news.project
+ redmine_headers 'Project' => news.project.identifier
+ @author = comment.author
+ message_id comment
+ @news = news
+ @comment = comment
+ @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
+ mail :to => news.recipients,
+ :cc => news.watcher_recipients,
+ :subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}"
+ elsif news.course
+ redmine_headers 'Course' => news.course.id
+ @author = comment.author
+ message_id comment
+ @news = news
+ @comment = comment
+ @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
+ recipients = news.course.notified_users.select { |user| user.allowed_to?(:view_files, news.course) }.collect { |u| u.mail }
+
+ mail :to => recipients,
+ :subject => "[#{news.course.name}] #{l(:label_news)}: #{news.title}"
+ end
end
# Builds a Mail::Message object used to email the recipients of the specified message that was posted.
@@ -356,18 +416,33 @@ class Mailer < ActionMailer::Base
# message_posted(message) => Mail::Message object
# Mailer.message_posted(message).deliver => sends an email to the recipients
def message_posted(message)
- redmine_headers 'Project' => message.project.identifier,
- 'Topic-Id' => (message.parent_id || message.id)
- @author = message.author
- message_id message
- references message.parent unless message.parent.nil?
- recipients = message.recipients
- cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients)
- @message = message
- @message_url = url_for(message.event_url)
- mail :to => recipients,
- :cc => cc,
- :subject => "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}"
+ if message.project
+ redmine_headers 'Project' => message.project.identifier,
+ 'Topic-Id' => (message.parent_id || message.id)
+ @author = message.author
+ message_id message
+ references message.parent unless message.parent.nil?
+ recipients = message.recipients
+ cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients)
+ @message = message
+ @message_url = url_for(message.event_url)
+ mail :to => recipients,
+ :cc => cc,
+ :subject => "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}"
+ elsif message.course
+ redmine_headers 'Course' => message.course.id,
+ 'Topic-Id' => (message.parent_id || message.id)
+ @author = message.author
+ message_id message
+ references message.parent unless message.parent.nil?
+ recipients = message.course.notified_users.select { |user| user.allowed_to?(:view_files, message.course) }.collect { |u| u.mail }
+ cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients)
+ @message = message
+ @message_url = url_for(message.event_url)
+ mail :to => recipients,
+ :cc => cc,
+ :subject => "[#{message.board.course.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}"
+ end
end
# Builds a Mail::Message object used to email the recipients of a project of the specified wiki content was added.
diff --git a/app/models/memo.rb b/app/models/memo.rb
index cfc509923..f9482911a 100644
--- a/app/models/memo.rb
+++ b/app/models/memo.rb
@@ -43,7 +43,7 @@ class Memo < ActiveRecord::Base
"parent_id",
"replies_count"
- after_create :add_author_as_watcher, :reset_counters!#,:be_user_score -- 公共区发帖暂不计入得分
+ after_create :add_author_as_watcher, :reset_counters!, :sendmail#,:be_user_score -- 公共区发帖暂不计入得分
# after_update :update_memos_forum
after_destroy :reset_counters!#,:down_user_score -- 公共区发帖暂不计入得分
# after_create :send_notification
@@ -54,6 +54,12 @@ class Memo < ActiveRecord::Base
# includes(:forum => ).where()
# }
+ def sendmail
+ thread1=Thread.new do
+ Mailer.forum_message_added(self).deliver if Setting.notified_events.include?('forum_message_added')
+ end
+ end
+
def cannot_reply_to_locked_topic
errors.add :base, l(:label_memo_locked) if root.locked? && self != root
end
diff --git a/app/models/memo_observer.rb b/app/models/memo_observer.rb
new file mode 100644
index 000000000..66cabe923
--- /dev/null
+++ b/app/models/memo_observer.rb
@@ -0,0 +1,8 @@
+class MemoObserver < ActiveRecord::Observer
+ def after_create(memo)
+
+ thread1=Thread.new do
+ Mailer.forum_message_added(memo).deliver if Setting.notified_events.include?('forum_message_added')
+ end
+ end
+end
diff --git a/app/views/homework_attach/_addjour.html.erb b/app/views/homework_attach/_addjour.html.erb
index 48beebdf8..78514daca 100644
--- a/app/views/homework_attach/_addjour.html.erb
+++ b/app/views/homework_attach/_addjour.html.erb
@@ -31,7 +31,7 @@
:url => {:controller => 'homework_attach',
:action => 'addjours',
:homework_id => homework_attach.id,
- :cur_page => cur_page,
+ :page => cur_page,
:cur_type => cur_type,
:is_anonymous_comments => @is_anonymous_comments,
:is_teacher => @is_teacher
diff --git a/app/views/homework_attach/_homework.html.erb b/app/views/homework_attach/_homework.html.erb
index c2b87832c..fca25e8ee 100644
--- a/app/views/homework_attach/_homework.html.erb
+++ b/app/views/homework_attach/_homework.html.erb
@@ -19,7 +19,7 @@
<% else %>
<% homework_filename = homework.name %>
<% end %>
- <%= link_to homework_filename , homework_attach_path(homework,:cur_page => @cur_page,:cur_type => @cur_type), :title => homework_filename, :remote => true%>
+ <%= link_to homework_filename , homework_attach_path(homework,:cur_page => @cur_page,:cur_type => @cur_type,:cur_sort => @cur_sort, :cur_direction => @cur_direction), :title => homework_filename, :remote => true%>
提交时间:
<%= format_time homework.created_at%>
@@ -46,7 +46,7 @@
<% if is_teacher %>
- <%= link_to l(:label_work_rating),homework_attach_path(homework,:cur_page => @cur_page,:cur_type => @cur_type),:remote => true %>
+ <%= link_to l(:label_work_rating),homework_attach_path(homework,:cur_page => @cur_page,:cur_type => @cur_type,:cur_sort => @cur_sort, :cur_direction => @cur_direction),:remote => true %>
<% if Time.parse(bid.deadline.to_s).strftime("%Y-%m-%d") < Time.parse(homework.created_at.to_s).strftime("%Y-%m-%d") %>
迟交!
<% end %>
diff --git a/app/views/layouts/_base_feedback.html.erb b/app/views/layouts/_base_feedback.html.erb
index 52006e94d..ae85d9479 100644
--- a/app/views/layouts/_base_feedback.html.erb
+++ b/app/views/layouts/_base_feedback.html.erb
@@ -1,49 +1,122 @@
-
-
-
-
-意见反馈浮窗
+
-
+
+
+
+
+意见反馈
+
+
+
-
-
-
-
-
- <% get_memo %>
- <%= form_for(@new_memo, :url => create_feedback_forum_path(@public_forum)) do |f| %>
-
-
- <%= f.text_area :subject, :class => "opnionText",:placeholder => "有什么想说的,尽管来咆哮吧~~"%>
-
-
- <%= f.hidden_field :content, :required => true ,:value=>'该贴来自用户反馈!'%>
-
- <%#= f.submit :value => l(:label_memo_create), :class => "opnionButton", :id => "button1" %>
-
提 交
- <% end %>
-
-
-
-
-
+
+
+
-
-
-
技术支持:
-
<%= l(:label_course_adcolick) %>黄井泉
- <%= l(:label_course_adcolick) %>白羽
-
-
-
+
+
-
-
-
+
\ No newline at end of file
diff --git a/app/views/layouts/base_courses.html.erb b/app/views/layouts/base_courses.html.erb
index f0204f7ee..466e711c2 100644
--- a/app/views/layouts/base_courses.html.erb
+++ b/app/views/layouts/base_courses.html.erb
@@ -300,13 +300,22 @@
+
-
<%= link_to l(:label_poll), poll_index_path(:polls_type => "Course", :polls_group_id => @course.id)%>
+
+
diff --git a/app/views/mailer/forum_add.html.erb b/app/views/mailer/forum_add.html.erb
new file mode 100644
index 000000000..8da8b7891
--- /dev/null
+++ b/app/views/mailer/forum_add.html.erb
@@ -0,0 +1,4 @@
+<%= link_to(h(@forum.name), @forum_url) %>
+<%=h @forum.creator.name %>
+
+<%= @forum.description.html_safe %>
\ No newline at end of file
diff --git a/app/views/mailer/forum_add.text.erb b/app/views/mailer/forum_add.text.erb
new file mode 100644
index 000000000..ba7246a49
--- /dev/null
+++ b/app/views/mailer/forum_add.text.erb
@@ -0,0 +1,4 @@
+<%= @forum_url %>
+<%= @author.name %>
+
+<%= @forum.description %>
diff --git a/app/views/mailer/forum_message_added.html.erb b/app/views/mailer/forum_message_added.html.erb
new file mode 100644
index 000000000..743c06ae7
--- /dev/null
+++ b/app/views/mailer/forum_message_added.html.erb
@@ -0,0 +1,4 @@
+<%= link_to(h(@memo.subject), @memo_url) %>
+<%=h @memo.author.name %>
+
+<%= @memo.content.html_safe %>
\ No newline at end of file
diff --git a/app/views/mailer/forum_message_added.text.erb b/app/views/mailer/forum_message_added.text.erb
new file mode 100644
index 000000000..bd084cd40
--- /dev/null
+++ b/app/views/mailer/forum_message_added.text.erb
@@ -0,0 +1,5 @@
+<%= @memo_url %>
+<%= @author.name %>
+
+<%= @memo.subject %>
+<%= @memo.content %>
diff --git a/app/views/mailer/issue_edit.html.erb.BASE.erb b/app/views/mailer/issue_edit.html.erb.BASE.erb
new file mode 100644
index 000000000..6fcb0ddb5
--- /dev/null
+++ b/app/views/mailer/issue_edit.html.erb.BASE.erb
@@ -0,0 +1,19 @@
+
+ <%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => h(@journal.user)) %>
+
+
+ <% details_to_strings(@journal.details, false, :only_path => false, :token => @token.value).each do |string| %>
+ <% if (!string.include? l(:label_attachment)) && (!string.include? "attachments") %>
+ <%= string %>
+ <% end %>
+ <% end %>
+
+
+
<%= l(:field_content)%>: <%= @journal.notes %>
+
+
+
+
+<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %>
+
+
diff --git a/app/views/mailer/issue_edit.html.erb.LOCAL.erb b/app/views/mailer/issue_edit.html.erb.LOCAL.erb
new file mode 100644
index 000000000..f7412402c
--- /dev/null
+++ b/app/views/mailer/issue_edit.html.erb.LOCAL.erb
@@ -0,0 +1,11 @@
+
+ <%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => h(@journal.user)) %>
+
+
+
+
+
+
+<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %>
+
+
diff --git a/app/views/mailer/issue_edit.html.erb.REMOTE.erb b/app/views/mailer/issue_edit.html.erb.REMOTE.erb
new file mode 100644
index 000000000..af167cff5
--- /dev/null
+++ b/app/views/mailer/issue_edit.html.erb.REMOTE.erb
@@ -0,0 +1,19 @@
+
+ <%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => h(@journal.user)) %>
+
+
+ <% details_to_strings(@journal.details, false, :only_path => false, :token => @token.value).each do |string| %>
+ <% if (!string.include? l(:label_attachment)) && (!string.include? "attachments") %>
+ <%= string %>
+ <% end %>
+ <% end %>
+
+
+
<%= l(:field_content)%>: <%= @journal.notes %>
+
+
+
+
+<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %>
+
+
diff --git a/app/views/mailer/message_posted.html.erb b/app/views/mailer/message_posted.html.erb
index f43a8cf0f..4bb487405 100644
--- a/app/views/mailer/message_posted.html.erb
+++ b/app/views/mailer/message_posted.html.erb
@@ -1,4 +1,10 @@
-<%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %>
+
+ <% if @message.project %>
+ <%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %>
+ <% elsif @message.course %>
+ <%=h @message.board.course.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %>
+ <% end %>
+
<%=h @message.author %>
<%= textilizable(@message, :content, :only_path => false) %>
diff --git a/app/views/poll/_poll.html.erb b/app/views/poll/_poll.html.erb
index 3290ff2dc..c53f09361 100644
--- a/app/views/poll/_poll.html.erb
+++ b/app/views/poll/_poll.html.erb
@@ -1,20 +1,19 @@
<% has_commit = has_commit_poll?(poll.id ,User.current)%>
+<% poll_name = poll.polls_name.empty? ? l(:label_poll_new) : poll.polls_name%>
<% if @is_teacher %>
<% if has_commit %>
- <%= poll.polls_name.empty? ? l(:label_poll_new) : poll.polls_name%>
+ <%= link_to poll_name, poll_result_poll_path(poll.id), :class => "polls_title polls_title_w fl", :style => "max-width: 550px;width: 550px;" %>
<% else %>
- <%= link_to (poll.polls_name.empty? ? l(:label_poll_new) : poll.polls_name), poll_path(poll.id), :class => "polls_title polls_title_w fl" %>
+ <%= link_to poll_name, poll_path(poll.id), :class => "polls_title polls_title_w fl" %>
<% end %>
<% else %>
<% if has_commit && poll.polls_status == 2 %>
-
- <%= poll.polls_name.empty? ? l(:label_poll_new) : poll.polls_name %>
-
+ <%= link_to poll_name, poll_result_poll_path(poll.id), :class => "polls_title polls_title_w fl", :style => "max-width: 500px;width: auto;" %>
<% elsif !has_commit && poll.polls_status == 2 %>
- <%= link_to (poll.polls_name.empty? ? l(:label_poll_new) : poll.polls_name), poll_path(poll.id), :class => "polls_title polls_title_w fl", :style => "max-width: 550px;width: 550px;" %>
+ <%= link_to poll_name, poll_path(poll.id), :class => "polls_title polls_title_w fl", :style => "max-width: 550px;width: 550px;" %>
<% end %>
<% end %>
diff --git a/app/views/poll/_show_MCQ_result.html.erb b/app/views/poll/_show_MCQ_result.html.erb
new file mode 100644
index 000000000..f46882881
--- /dev/null
+++ b/app/views/poll/_show_MCQ_result.html.erb
@@ -0,0 +1,26 @@
+
+
+
+ 第<%= poll_question.question_number%>题:
+
+ <%= poll_question.question_title %>
+ [多选题]
+ <%if poll_question.is_necessary == 1%>
+ *
+ <%end%>
+
+
+
+
\ No newline at end of file
diff --git a/app/views/poll/_show_MC_result.html.erb b/app/views/poll/_show_MC_result.html.erb
new file mode 100644
index 000000000..7f2cbbd83
--- /dev/null
+++ b/app/views/poll/_show_MC_result.html.erb
@@ -0,0 +1,27 @@
+
+
+
+ 第<%= poll_question.question_number%>题:
+
+ <%= poll_question.question_title %>
+ [单选题]
+ <%if poll_question.is_necessary == 1%>
+ *
+ <%end%>
+
+
+
+
\ No newline at end of file
diff --git a/app/views/poll/_show_mulit_result.html.erb b/app/views/poll/_show_mulit_result.html.erb
new file mode 100644
index 000000000..e54cca505
--- /dev/null
+++ b/app/views/poll/_show_mulit_result.html.erb
@@ -0,0 +1,20 @@
+
+
+
+
+ 第<%= poll_question.question_number%>题:
+
+ <%= poll_question.question_title %>
+ [多行主观]
+ <%if poll_question.is_necessary == 1%>
+ *
+ <%end%>
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/poll/_show_single_result.html.erb b/app/views/poll/_show_single_result.html.erb
new file mode 100644
index 000000000..07559773d
--- /dev/null
+++ b/app/views/poll/_show_single_result.html.erb
@@ -0,0 +1,18 @@
+
+
+
+ 第<%= poll_question.question_number%>题:
+
+ <%= poll_question.question_title %>
+ [单行主观]
+ <%if poll_question.is_necessary == 1%>
+ *
+ <%end%>
+
+
+
+
\ No newline at end of file
diff --git a/app/views/poll/poll_result.html.erb b/app/views/poll/poll_result.html.erb
new file mode 100644
index 000000000..a7cb415b3
--- /dev/null
+++ b/app/views/poll/poll_result.html.erb
@@ -0,0 +1,36 @@
+<%= stylesheet_link_tag 'polls', :media => 'all' %>
+
+
+
+ <%= @poll.polls_name.empty? ? l(:label_poll_new) : @poll.polls_name %>
+
+
+ <%= @poll.polls_description%>
+
+
+
+
+ <% @poll_questions.each do |poll_question|%>
+ <% if poll_question.question_type == 1%>
+ <%= render :partial => 'show_MC_result', :locals => {:poll_question => poll_question} %>
+ <% elsif poll_question.question_type == 2%>
+ <%= render :partial => 'show_MCQ_result', :locals => {:poll_question => poll_question} %>
+ <% elsif poll_question.question_type == 3%>
+ <%= render :partial => 'show_single_result', :locals => {:poll_question => poll_question} %>
+ <% elsif poll_question.question_type == 4%>
+ <%= render :partial => 'show_mulit_result', :locals => {:poll_question => poll_question} %>
+ <% end%>
+ <% end%>
+
+
+
+
+
+
+
+ <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%>
+
+
+
+
+
diff --git a/app/views/projects/_join_project.html.erb b/app/views/projects/_join_project.html.erb
new file mode 100644
index 000000000..c7ce29dae
--- /dev/null
+++ b/app/views/projects/_join_project.html.erb
@@ -0,0 +1,83 @@
+
+
+
+
+ 快速进入项目通道
+
+
+
+
+
+
+
+
+
快速进入项目通道
+
只要持有项目的ID,就可快速申请加入所在项目。项目页面搜索不到的私有项目只能从此通道进入哦!
+
+
+
+
+
+
+
diff --git a/app/views/projects/join_project.js.erb b/app/views/projects/join_project.js.erb
new file mode 100644
index 000000000..f3bdfb50a
--- /dev/null
+++ b/app/views/projects/join_project.js.erb
@@ -0,0 +1,9 @@
+$('#ajax-modal').html('<%= escape_javascript(render :partial => 'projects/join_project') %>');
+showModal('ajax-modal', '510px');
+$('#ajax-modal').css('height','260px');
+$('#ajax-modal').siblings().remove();
+$('#ajax-modal').before("" +
+ " ");
+$('#ajax-modal').parent().removeClass("alert_praise");
+$('#ajax-modal').parent().css("top","").css("left","");
+$('#ajax-modal').parent().addClass("alert_box");
diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb
index 0dc62c6a3..3e341bd27 100644
--- a/app/views/welcome/index.html.erb
+++ b/app/views/welcome/index.html.erb
@@ -66,6 +66,9 @@
:course => 0,
:project_type =>( @project_type||=0)},
:class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %>
+
+ <%= link_to l(:label_join_project), join_project_projects_path ,:remote => true, :class => 'icon icon-add' %>
+
<% end %>
diff --git a/config/configuration.yml b/config/configuration.yml
index 7e5381406..9a9373e45 100644
--- a/config/configuration.yml
+++ b/config/configuration.yml
@@ -87,12 +87,12 @@ default:
- address: smtp.126.com
+ address: smtp.163.com
port: 25
- domain: smtp.126.com
+ domain: smtp.163.com
authentication: :plain
- user_name: "alanlong9278@126.com"
- password: "alanlong8788786"
+ user_name: mcb592@163.com
+ password: 'mcb1989822'
# Absolute path to the directory where attachments are stored.
# The default is the 'files' directory in your Redmine instance.
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 2cb978348..a7d98a21c 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -582,6 +582,8 @@ en:
label_document_new: New document
label_document_plural: Documents
label_document_added: Document added
+ label_forum_message_added: Message added
+ label_forum_add: Forum added
label_document_public_info: "If you don't choose public, only the project's members can see the document."
label_role: Role
label_role_plural: Roles
diff --git a/config/locales/zh.yml b/config/locales/zh.yml
index 28124f969..77a5b4a1b 100644
--- a/config/locales/zh.yml
+++ b/config/locales/zh.yml
@@ -596,6 +596,8 @@ zh:
label_document_new: 新建文档
label_document_plural: 文档
label_document_added: 文档已添加
+ label_forum_message_added: 发帖成功
+ label_forum_add: 贴吧创建成功
label_document_public_info: (打钩为公开,不打钩则不公开,若不公开,仅项目成员可见该文档。)
label_role: 角色
label_role_plural: 角色
@@ -2297,4 +2299,7 @@ zh:
label_answer: 答案:
label_poll_answer_valid_result: 以上为有效问答题答案!
label_answer_total: 总计:
+ label_join_project: 加入项目
+ label_technical_support: 技术支持:
+ label_feedback: 意见反馈
diff --git a/config/routes.rb b/config/routes.rb
index 67b0118b0..65498e4ec 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -66,6 +66,7 @@ RedmineApp::Application.routes.draw do
post 'commit_poll'
get 'publish_poll'
get 'republish_poll'
+ get 'poll_result'
end
collection do
delete 'delete_poll_question'
@@ -376,6 +377,10 @@ RedmineApp::Application.routes.draw do
match 'copy', :via => [:get, :post]
end
+ collection do
+ match 'join_project', :via => [:get, :post]
+ end
+
#by young
match '/member', :to => 'projects#member', :as => 'member', :via => :get
match '/file', :to => 'projects#file', :as => 'file', :via => :get
diff --git a/lib/redmine/notifiable.rb b/lib/redmine/notifiable.rb
index 88ca9d776..42a81980f 100644
--- a/lib/redmine/notifiable.rb
+++ b/lib/redmine/notifiable.rb
@@ -20,6 +20,8 @@ module Redmine
notifications << Notifiable.new('message_posted')
notifications << Notifiable.new('wiki_content_added')
notifications << Notifiable.new('wiki_content_updated')
+ notifications << Notifiable.new('forum_add')
+ notifications << Notifiable.new('forum_message_added', 'forum_add')
notifications
end
end
diff --git a/public/images/blue_line.png b/public/images/blue_line.png
new file mode 100644
index 000000000..4ae87f343
Binary files /dev/null and b/public/images/blue_line.png differ
diff --git a/public/images/sidebar_bg.png b/public/images/sidebar_bg.png
new file mode 100644
index 000000000..e41ea789d
Binary files /dev/null and b/public/images/sidebar_bg.png differ
diff --git a/spec/models/forum_observer_spec.rb b/spec/models/forum_observer_spec.rb
new file mode 100644
index 000000000..76d68fafa
--- /dev/null
+++ b/spec/models/forum_observer_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe ForumObserver do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/models/memo_observer_spec.rb b/spec/models/memo_observer_spec.rb
new file mode 100644
index 000000000..82603ba7a
--- /dev/null
+++ b/spec/models/memo_observer_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe MemoObserver do
+ pending "add some examples to (or delete) #{__FILE__}"
+end