This commit is contained in:
alan 2015-01-23 23:12:51 +08:00
commit 472ccc45bf
94 changed files with 1557 additions and 471 deletions

2
.gitignore vendored
View File

@ -4,6 +4,7 @@
/.bundle /.bundle
*.swp *.swp
/config/database.yml /config/database.yml
/config/configuration.yml
/files/* /files/*
/log/* /log/*
/tmp/* /tmp/*
@ -14,5 +15,4 @@
/db/schema.rb /db/schema.rb
/Gemfile.lock /Gemfile.lock
/lib/plugins/acts_as_versioned/test/debug.log /lib/plugins/acts_as_versioned/test/debug.log
/config/configuration.yml
.rbenv-gemsets .rbenv-gemsets

2
.rspec Normal file
View File

@ -0,0 +1,2 @@
--format documentation
--color

View File

@ -18,6 +18,7 @@ gem "builder", "3.0.0"
gem 'acts-as-taggable-on', '2.4.1' gem 'acts-as-taggable-on', '2.4.1'
gem 'spreadsheet' gem 'spreadsheet'
gem 'ruby-ole' gem 'ruby-ole'
#gem 'email_verifier'
group :development do group :development do
gem 'better_errors', path: 'lib/better_errors' gem 'better_errors', path: 'lib/better_errors'
@ -51,7 +52,8 @@ group :development, :test do
gem 'ruby-prof', '~> 0.15.1' unless RUBY_PLATFORM =~ /w32/ gem 'ruby-prof', '~> 0.15.1' unless RUBY_PLATFORM =~ /w32/
gem 'pry' gem 'pry'
gem 'pry-nav' gem 'pry-nav'
gem 'rspec-rails' , '2.13.1'
gem 'guard-rspec','2.5.0'
end end

View File

@ -345,7 +345,10 @@ class AccountController < ApplicationController
if user.save and token.save if user.save and token.save
UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0) UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0)
Mailer.register(token).deliver Mailer.register(token).deliver
flash[:notice] = l(:notice_account_register_done) flash[:notice] = l(:notice_account_register_done)
render action: 'email_valid', locals: {:mail => user.mail} render action: 'email_valid', locals: {:mail => user.mail}
else else
yield if block_given? yield if block_given?

View File

@ -9,6 +9,8 @@ class BidsController < ApplicationController
menu_item :homework_statistics, :only => :homework_statistics menu_item :homework_statistics, :only => :homework_statistics
menu_item :edit, :only => :edit menu_item :edit, :only => :edit
before_filter :can_show_course,only: [] before_filter :can_show_course,only: []
before_filter :can_show_contest,only: [] before_filter :can_show_contest,only: []
#Ended by young #Ended by young

View File

@ -273,6 +273,7 @@ class CoursesController < ApplicationController
if valid_attr.eql?('name') if valid_attr.eql?('name')
faker.name = valid_value faker.name = valid_value
faker.course_id = params[:course_id]
faker.valid? faker.valid?
req[:valid] = faker.errors[:name].blank? req[:valid] = faker.errors[:name].blank?
req[:message] = faker.errors[:name] req[:message] = faker.errors[:name]

View File

@ -160,12 +160,15 @@ class ForumsController < ApplicationController
def create def create
@forum = Forum.new(params[:forum]) @forum = Forum.new(params[:forum])
@forum.creator_id = User.current.id @forum.creator_id = User.current.id
if @forum.save
respond_to do |format|
respond_to do |format| format.html { redirect_to @forum, notice: l(:label_forum_create_succ) }
if @forum.save format.json { render json: @forum, status: :created, location: @forum }
format.html { redirect_to @forum, notice: l(:label_forum_create_succ) } end
format.json { render json: @forum, status: :created, location: @forum }
else else
respond_to do |format|
flash.now[:error] = "#{l :label_forum_create_fail}: #{@forum.errors.full_messages[0]}" flash.now[:error] = "#{l :label_forum_create_fail}: #{@forum.errors.full_messages[0]}"
format.html { render action: "new" } format.html { render action: "new" }
format.json { render json: @forum.errors, status: :unprocessable_entity } format.json { render json: @forum.errors, status: :unprocessable_entity }

View File

@ -26,6 +26,7 @@ class HomeworkAttachController < ApplicationController
get_not_batch_homework_list sort,direction, @bid.id get_not_batch_homework_list sort,direction, @bid.id
@cur_page = params[:page] || 1 @cur_page = params[:page] || 1
@cur_type = 1 @cur_type = 1
@cur_sort,@cur_direction = params[:sort] || "s_socre", params[:direction] || "desc"
@direction = direction == 'asc'? 'desc' : 'asc' @direction = direction == 'asc'? 'desc' : 'asc'
respond_to do |format| respond_to do |format|
format.js format.js
@ -433,7 +434,7 @@ class HomeworkAttachController < ApplicationController
#添加留言 #添加留言
def addjours def addjours
@is_teacher,@is_anonymous_comments,@m_score = params[:is_teacher]=="true",params[:is_anonymous_comments]=="true",params[:stars_value] @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]) @homework = HomeworkAttach.find(params[:homework_id])
@stars_reates = @homework.rates(:quality) @stars_reates = @homework.rates(:quality)
homework = @homework homework = @homework
@ -479,7 +480,7 @@ class HomeworkAttachController < ApplicationController
if @cur_type == "1" #如果当前是老师未批列表,需要刷新整个作业列表界面 if @cur_type == "1" #如果当前是老师未批列表,需要刷新整个作业列表界面
@bid = @homework.bid @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" #老师已批列表 elsif @cur_type == "2" #老师已批列表
@result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, @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, (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,

View File

@ -1,8 +1,8 @@
class PollController < ApplicationController 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] 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 :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] before_filter :is_course_teacher, :only => [:new,:create,:edit,:update,:destroy,:publish_poll,:republish_poll]
include PollHelper include PollHelper
def index def index
if @course if @course
@ -40,13 +40,14 @@ class PollController < ApplicationController
def new def new
if @course if @course
option = { option = {
:polls_name => l(:label_poll_new), :polls_name => "",
:polls_type => @course.class.to_s, :polls_type => @course.class.to_s,
:polls_group_id => @course.id, :polls_group_id => @course.id,
:polls_status => 1, :polls_status => 1,
:user_id => User.current.id, :user_id => User.current.id,
:published_at => Time.now, :published_at => Time.now,
:closed_at => Time.now, :closed_at => Time.now,
:show_result => 1,
:polls_description => "" :polls_description => ""
} }
@poll = Poll.create option @poll = Poll.create option
@ -69,8 +70,8 @@ class PollController < ApplicationController
end end
def update def update
@poll.polls_name = params[:polls_name].empty? ? l(:label_poll_title) : params[:polls_name] @poll.polls_name = params[:polls_name]
@poll.polls_description = params[:polls_description].empty? ? l(:label_poll_description) : params[:polls_description] @poll.polls_description = params[:polls_description]
if @poll.save if @poll.save
respond_to do |format| respond_to do |format|
format.js format.js
@ -187,7 +188,13 @@ class PollController < ApplicationController
@poll.polls_status = 2 @poll.polls_status = 2
@poll.published_at = Time.now @poll.published_at = Time.now
if @poll.save if @poll.save
redirect_to poll_index_url(:polls_type => "Course", :polls_group_id => @course.id) if params[:is_remote]
redirect_to poll_index_url(:polls_type => "Course", :polls_group_id => @course.id)
else
respond_to do |format|
format.js
end
end
end end
end end
@ -311,6 +318,27 @@ class PollController < ApplicationController
end end
end end
#重新发布问卷
def republish_poll
@poll.poll_questions.each do |poll_question|
poll_question.poll_votes.destroy_all
end
@poll.poll_users.destroy_all
@poll.polls_status = 1
@poll.save
respond_to do |format|
format.js
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 private
def find_poll_and_course def find_poll_and_course
@poll = Poll.find params[:id] @poll = Poll.find params[:id]
@ -337,7 +365,8 @@ class PollController < ApplicationController
end end
def is_course_teacher def is_course_teacher
render_403 unless(@course && User.current.allowed_to?(:as_teacher,@course)) @is_teacher = User.current.allowed_to?(:as_teacher,@course)
render_403 unless(@course && @is_teacher)
end end
#获取未完成的题目 #获取未完成的题目

View File

@ -35,7 +35,7 @@ class ProjectsController < ApplicationController
# edit # edit
before_filter :authorize1, :only => [:show] 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, # 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, # :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] # :show_projects_score, :issue_score_index, :news_score_index, :file_score_index, :code_submit_score_index, :projects_topic_score_index]
@ -558,6 +558,11 @@ class ProjectsController < ApplicationController
# Show @project # Show @project
def show def show
if(@project && !@project.is_public && !User.current.member_of?(@project))
render_403
return
end
@project_type = params[:project_type] @project_type = params[:project_type]
# try to redirect to the requested menu item # try to redirect to the requested menu item
@ -912,6 +917,14 @@ class ProjectsController < ApplicationController
end end
end end
end end
#加入私有项目
def join_project
respond_to do |format|
format.js
end
end
private private
def memberAccess def memberAccess

View File

@ -494,7 +494,7 @@ module ApplicationHelper
def principals_check_box_tags_ex(name, principals) def principals_check_box_tags_ex(name, principals)
s = '' s = ''
principals.each do |principal| principals.each do |principal|
s << "<label>#{ check_box_tag name, principal.id, false, :id => nil } #{h principal.userInfo }</label>\n" s << "<label>#{ check_box_tag name, principal.id, false, :id => nil } #{h link_to principal.userInfo, user_path( principal.id)}</label>\n"
end end
s.html_safe s.html_safe
end end

View File

@ -111,6 +111,10 @@ module CoursesHelper
#garble count #garble count
# end # end
#获取课程所有成员
def course_all_member course
course.members
end
# 学生人数计算 # 学生人数计算
# add by nwb # add by nwb
def studentCount course def studentCount course
@ -561,12 +565,13 @@ module CoursesHelper
def course_in_current_or_next_term course def course_in_current_or_next_term course
is_current_term = false is_current_term = false
is_next_term = false is_next_term = false
if course.time == Time.now.year && course.term == cur_course_term year_now = Time.now.month < 3 ? Time.now.year - 1:Time.now.year
if course.time == year_now && course.term == cur_course_term
is_current_term = true is_current_term = true
end end
if cur_course_term == "秋季学期" && course.time == (Time.now.year + 1) && course.term == "春季学期" if cur_course_term == "秋季学期" && course.time == (year_now + 1) && course.term == "春季学期"
is_next_term = true is_next_term = true
elsif cur_course_term == "春季学期" && course.time == Time.now.year && course.term == "秋季学期" elsif cur_course_term == "春季学期" && course.time == year_now && course.term == "秋季学期"
is_next_term = true is_next_term = true
end end
is_current_term || is_next_term is_current_term || is_next_term

View File

@ -73,5 +73,5 @@ module PollHelper
"多行主观题" "多行主观题"
end end
end end
end end

View File

@ -15,7 +15,8 @@ class Contest < ActiveRecord::Base
has_many :praise_tread, as: :praise_tread_object, dependent: :destroy has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
has_many :contestnotifications, :dependent => :destroy, :include => :author has_many :contestnotifications, :dependent => :destroy, :include => :author
acts_as_attachable acts_as_attachable

View File

@ -12,11 +12,20 @@ class CourseGroup < ActiveRecord::Base
before_destroy :set_member_nil before_destroy :set_member_nil
attr_accessible :name attr_accessible :name
validates :name, :presence => true, :length => {:maximum => 20}, validates :name, :presence => true, :length => {:maximum => 20}
:uniqueness => {case_sensitive: false} validate :unique_name_and_course
def set_member_nil def set_member_nil
if self.members && self.members.count > 0 if self.members && self.members.count > 0
self.members.update_all("course_group_id = 0") self.members.update_all("course_group_id = 0")
end end
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 end

View File

@ -18,7 +18,7 @@ class Forum < ActiveRecord::Base
acts_as_taggable acts_as_taggable
scope :by_join_date, order("created_at DESC") scope :by_join_date, order("created_at DESC")
after_create :send_email
def reset_counters! def reset_counters!
self.class.reset_counters!(id) self.class.reset_counters!(id)
end end
@ -33,6 +33,11 @@ class Forum < ActiveRecord::Base
self.creator == user || user.admin? self.creator == user || user.admin?
end 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+ # Updates topic_count, memo_count and last_memo_id attributes for +board_id+
def self.reset_counters!(forum_id) def self.reset_counters!(forum_id)
forum_id = forum_id.to_i forum_id = forum_id.to_i

View File

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

View File

@ -19,7 +19,8 @@ class IssueObserver < ActiveRecord::Observer
def after_create(issue) def after_create(issue)
Thread.start do Thread.start do
recipients = issue.recipients # 将跟踪者与本项目的其他成员都设为收件方,并去重,不在进行抄送,
recipients = issue.recipients - issue.watcher_recipients + issue.watcher_recipients
recipients.each do |rec| recipients.each do |rec|
Mailer.issue_add(issue,rec).deliver if Setting.notified_events.include?('issue_added') Mailer.issue_add(issue,rec).deliver if Setting.notified_events.include?('issue_added')
end end

View File

@ -24,7 +24,8 @@ class JournalObserver < ActiveRecord::Observer
(Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?) (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
) )
Thread.start do Thread.start do
recipients = journal.recipients # 将跟踪者与本项目的其他成员都设为收件方,并去重,不在进行抄送,
recipients = journal.recipients - journal.watcher_recipients + journal.watcher_recipients
recipients.each do |rec| recipients.each do |rec|
Mailer.issue_edit(journal,rec).deliver Mailer.issue_edit(journal,rec).deliver

View File

@ -1,7 +1,9 @@
# Added by young # Added by young
class JournalsForMessageObserver < ActiveRecord::Observer class JournalsForMessageObserver < ActiveRecord::Observer
def after_create(journals_for_message) def after_create(journals_for_message)
thread1 = Thread.start do
Mailer.journals_for_message_add(User.current, journals_for_message).deliver Mailer.journals_for_message_add(User.current, journals_for_message).deliver
end
end end
end end

View File

@ -26,7 +26,39 @@ class Mailer < ActionMailer::Base
def self.default_url_options def self.default_url_options
{ :host => Setting.host_name, :protocol => Setting.protocol } { :host => Setting.host_name, :protocol => Setting.protocol }
end 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
@issue_author_url = url_for(user_activities_url(@author))
@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
@forum_url = url_for(:controller => 'forums', :action => 'show', :id => @forum.id)
@issue_author_url = url_for(user_activities_url(@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. # Builds a Mail::Message object used to email recipients of the added journals for message.
# 留言分为直接留言,和对留言人留言的回复 # 留言分为直接留言,和对留言人留言的回复
@ -39,7 +71,7 @@ class Mailer < ActionMailer::Base
@mail = journals_for_message.at_user if journals_for_message.at_user @mail = journals_for_message.at_user if journals_for_message.at_user
@message = journals_for_message.notes @message = journals_for_message.notes
@title = "#@user #{t(:label_leave_your_message, :locale => 'zh')}" @title = "#@user #{t(:label_leave_your_message, :locale => 'zh')}"
@issue_author_url = url_for(user_activities_url(@user))
@url = case journals_for_message.jour.class.to_s.to_sym # 判断留言的对象所属类型 @url = case journals_for_message.jour.class.to_s.to_sym # 判断留言的对象所属类型
when :Bid when :Bid
course_for_bid_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}") course_for_bid_url(journals_for_message.jour, anchor: "word_li_#{journals_for_message.id}")
@ -62,13 +94,13 @@ class Mailer < ActionMailer::Base
course = journals_for_message.jour course = journals_for_message.jour
@author = journals_for_message.user @author = journals_for_message.user
#课程的教师 #课程的教师
@teachers = searchTeacherAndAssistant journals_for_message.jour @members = course_all_member journals_for_message.jour
#收件人邮箱 #收件人邮箱
@recipients ||= [] @recipients ||= []
@teachers.each do |teacher| @members.each do |teacher|
if teacher.user.notify_about? journals_for_message
@recipients << teacher.user.mail @recipients << teacher.user.mail
end
end end
mail :to => @recipients, mail :to => @recipients,
@ -118,10 +150,10 @@ class Mailer < ActionMailer::Base
@user_url = url_for(my_account_url(user,:token => @token.value)) @user_url = url_for(my_account_url(user,:token => @token.value))
cc = issue.watcher_recipients - issue.recipients
subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}" subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}"
mail(:to => recipients, mail(:to => recipients,
:cc => cc,
:subject => subject) :subject => subject)
end end
# issue.attachments.each do |attach| # issue.attachments.each do |attach|
@ -166,9 +198,8 @@ class Mailer < ActionMailer::Base
# Watchers in cc
cc = journal.watcher_recipients - journal.recipients
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] " s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] "
s << "(#{issue.status.name}) " if journal.new_value_for('status_id') s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
s << issue.subject s << issue.subject
@ -176,7 +207,7 @@ class Mailer < ActionMailer::Base
@journal = journal @journal = journal
# @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}") # @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
mail(:to => recipients, mail(:to => recipients,
:cc => cc,
:subject => s) :subject => s)
end end
@ -260,6 +291,7 @@ class Mailer < ActionMailer::Base
redmine_headers 'Project' => document.project.identifier redmine_headers 'Project' => document.project.identifier
@author = User.current @author = User.current
@document = document @document = document
@issue_author_url = url_for(user_activities_url(@author))
@document_url = url_for(:controller => 'documents', :action => 'show', :id => document) @document_url = url_for(:controller => 'documents', :action => 'show', :id => document)
mail :to => document.recipients, mail :to => document.recipients,
:subject => "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}" :subject => "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}"
@ -275,6 +307,7 @@ class Mailer < ActionMailer::Base
added_to = '' added_to = ''
added_to_url = '' added_to_url = ''
@author = attachments.first.author @author = attachments.first.author
@issue_author_url = url_for(user_activities_url(@author))
case container.class.name case container.class.name
when 'Project' when 'Project'
added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container) added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container)
@ -282,7 +315,7 @@ class Mailer < ActionMailer::Base
recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail } recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail }
when 'Course' when 'Course'
added_to_url = url_for(:controller => 'files', :action => 'index', :course_id => container) 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 } recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail }
when 'Version' when 'Version'
added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project) added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project)
@ -323,13 +356,27 @@ class Mailer < ActionMailer::Base
# news_added(news) => Mail::Message object # news_added(news) => Mail::Message object
# Mailer.news_added(news).deliver => sends an email to the news' project recipients # Mailer.news_added(news).deliver => sends an email to the news' project recipients
def news_added(news) def news_added(news)
redmine_headers 'Project' => news.project.identifier
@author = news.author if news.project
message_id news redmine_headers 'Project' => news.project.identifier
@news = news @author = news.author
@news_url = url_for(:controller => 'news', :action => 'show', :id => news) @issue_author_url = url_for(user_activities_url(@author))
mail :to => news.recipients, message_id news
:subject => "[#{news.project.name}] #{l(:label_news)}: #{news.title}" @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
@issue_author_url = url_for(user_activities_url(@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 end
# Builds a Mail::Message object used to email recipients of a news' project when a news comment is added. # Builds a Mail::Message object used to email recipients of a news' project when a news comment is added.
@ -339,15 +386,30 @@ class Mailer < ActionMailer::Base
# Mailer.news_comment_added(comment) => sends an email to the news' project recipients # Mailer.news_comment_added(comment) => sends an email to the news' project recipients
def news_comment_added(comment) def news_comment_added(comment)
news = comment.commented news = comment.commented
redmine_headers 'Project' => news.project.identifier if news.project
@author = comment.author redmine_headers 'Project' => news.project.identifier
message_id comment @author = comment.author
@news = news @issue_author_url = url_for(user_activities_url(@author))
@comment = comment message_id comment
@news_url = url_for(:controller => 'news', :action => 'show', :id => news) @news = news
mail :to => news.recipients, @comment = comment
:cc => news.watcher_recipients, @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
:subject => "Re: [#{news.project.name}] #{l(:label_news)}: #{news.title}" 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
@issue_author_url = url_for(user_activities_url(@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 end
# Builds a Mail::Message object used to email the recipients of the specified message that was posted. # Builds a Mail::Message object used to email the recipients of the specified message that was posted.
@ -356,18 +418,35 @@ class Mailer < ActionMailer::Base
# message_posted(message) => Mail::Message object # message_posted(message) => Mail::Message object
# Mailer.message_posted(message).deliver => sends an email to the recipients # Mailer.message_posted(message).deliver => sends an email to the recipients
def message_posted(message) def message_posted(message)
redmine_headers 'Project' => message.project.identifier, if message.project
'Topic-Id' => (message.parent_id || message.id) redmine_headers 'Project' => message.project.identifier,
@author = message.author 'Topic-Id' => (message.parent_id || message.id)
message_id message @author = message.author
references message.parent unless message.parent.nil? @issue_author_url = url_for(user_activities_url(@author))
recipients = message.recipients message_id message
cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients) references message.parent unless message.parent.nil?
@message = message recipients = message.recipients
@message_url = url_for(message.event_url) cc = ((message.root.watcher_recipients + message.board.watcher_recipients).uniq - recipients)
mail :to => recipients, @message = message
:cc => cc, @message_url = url_for(message.event_url)
:subject => "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}" 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
@issue_author_url = url_for(user_activities_url(@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 end
# Builds a Mail::Message object used to email the recipients of a project of the specified wiki content was added. # Builds a Mail::Message object used to email the recipients of a project of the specified wiki content was added.

View File

@ -43,7 +43,7 @@ class Memo < ActiveRecord::Base
"parent_id", "parent_id",
"replies_count" "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_update :update_memos_forum
after_destroy :reset_counters!#,:down_user_score -- 公共区发帖暂不计入得分 after_destroy :reset_counters!#,:down_user_score -- 公共区发帖暂不计入得分
# after_create :send_notification # after_create :send_notification
@ -54,6 +54,12 @@ class Memo < ActiveRecord::Base
# includes(:forum => ).where() # 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 def cannot_reply_to_locked_topic
errors.add :base, l(:label_memo_locked) if root.locked? && self != root errors.add :base, l(:label_memo_locked) if root.locked? && self != root
end end

View File

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

View File

@ -188,7 +188,7 @@ class User < Principal
validates_confirmation_of :password, :allow_nil => true validates_confirmation_of :password, :allow_nil => true
validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true
validate :validate_password_length validate :validate_password_length
#validates_email_realness_of :mail
before_create :set_mail_notification before_create :set_mail_notification
before_save :update_hashed_password before_save :update_hashed_password
before_destroy :remove_references_before_destroy before_destroy :remove_references_before_destroy

View File

@ -56,18 +56,30 @@
<%= link_to(bid.name, course_for_bid_path(bid), :class => 'bid_path') %> <%= link_to(bid.name, course_for_bid_path(bid), :class => 'bid_path') %>
</span> </span>
</td> </td>
<td style="width: 110px;"> <td style="width: 150px;">
<span style="float: right"> <span style="float: right">
<% if User.current.logged? && is_cur_course_student(@course) %> <% if User.current.logged? && is_cur_course_student(@course) %>
<% cur_user_homework = cur_user_homework_for_bid(bid) %> <% cur_user_homework = cur_user_homework_for_bid(bid) %>
<span class="span_wping">
<% if bid.open_anonymous_evaluation == 1 %>
<% case bid.comment_status %>
<% when 0 %>
<a>未开启匿评</a>
<% when 1 %>
<a>&nbsp;&nbsp;匿评中..&nbsp;&nbsp;</a>
<% when 2 %>
<a>&nbsp;&nbsp;匿评结束&nbsp;&nbsp;</a>
<% end %>
<% end%>
</span>
<% if cur_user_homework && cur_user_homework.empty? %> <% if cur_user_homework && cur_user_homework.empty? %>
<span class="span_wping"> <span class="span_wping">
<%= link_to l(:label_commit_homework),new_exercise_book_path(bid) %> <%= link_to l(:label_commit_homework),new_exercise_book_path(bid) %>
</span> </span>
<% else %> <% else %>
<span style="color: green; float: right"> <span class="span_wping">
<%= l(:lable_has_commit_homework)%> <a>已&nbsp;提&nbsp;交</a>
</span> </span>
<% end %> <% end %>
<% end %> <% end %>
<% if (User.current.admin?||User.current.allowed_to?(:as_teacher,@course)) %> <% if (User.current.admin?||User.current.allowed_to?(:as_teacher,@course)) %>

View File

@ -29,7 +29,7 @@
<%= l(:label_tags_course_name) %> <%= l(:label_tags_course_name) %>
<span class="required">*&nbsp;&nbsp;</span> <span class="required">*&nbsp;&nbsp;</span>
</label> </label>
<input id="course_name" type="text" value="<%= @course.name %>" style="width:490px;size:60;" name = "course[name]" maxlength="100"> <input id="course_name" type="text" value="<%= @course.name %>" style="width:490px; size:60;" name = "course[name]" maxlength="100">
</p> </p>
<%= f.fields_for @course do |m| %> <%= f.fields_for @course do |m| %>
@ -38,7 +38,7 @@
<table> <table>
<tr> <tr>
<td> <td>
<span class="info" align="right" style="width: 90px; font-weight: bold ;margin-left:22px"> <span class="info" align="right" style="width: 90px; font-weight: bold ; margin-left:19px">
<%= l(:label_class_period) %> <%= l(:label_class_period) %>
<span class="required"> *&nbsp;&nbsp;</span> <span class="required"> *&nbsp;&nbsp;</span>
</span> </span>
@ -118,7 +118,7 @@
</label> </label>
<input id="course_course_password" type="text" style="width:488px;margin-left: 10px;" value="<%= @course.password %>" size="60" name="course[password]"/> <input id="course_course_password" type="text" style="width:488px;margin-left: 10px;" value="<%= @course.password %>" size="60" name="course[password]"/>
</p> </p>
<em class="info" style="margin-left:95px;"> <em class="info" style="margin-left:95px; padding-left: 5px;">
<%= l(:text_command) %> <%= l(:text_command) %>
</em> </em>
<% end %> <% end %>
@ -127,9 +127,7 @@
<%= l(:label_new_course_description) %>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <%= l(:label_new_course_description) %>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</label> </label>
<span class="jstEditor"> <span class="jstEditor">
<textarea id="course_description" class="wiki-edit" style="font-size:small;width:490px;margin-left:10px;" rows="8" name="course[description]" cols="40"> <textarea id="course_description" class="wiki-edit" style="font-size:small;width:490px;margin-left:10px;" rows="8" name="course[description]" cols="40"><%= @course.description %></textarea>
<%= @course.description %>
</textarea>
</span> </span>
</p> </p>
<p style="margin-left:-10px;"> <p style="margin-left:-10px;">

View File

@ -56,24 +56,36 @@
</a> </a>
<ul style="margin-left: 15px"> <ul style="margin-left: 15px">
<% if @canShowCode %> <% if @canShowCode %>
<li> <% if member.user.show_name == '' && member.user.user_extensions.student_id == '' %>
<%= l(:label_bidding_user_studentname) %> : <li>
<%= link_to member.user.show_name, user_path(member.user) %> <%= l(:label_username)%>
</li> <%= link_to(member.user.name, user_path(member.user)) %>
</br> </li>
<% else %>
<% unless member.user.show_name == ''%>
<li>
<%= l(:label_bidding_user_studentname) %> :
<%= link_to member.user.show_name, user_path(member.user) %>
</li>
</br>
<% end %>
<% unless member.user.user_extensions.student_id == '' %>
<li>
<%= l(:label_bidding_user_studentcode) %> :
<%= link_to member.user.user_extensions.student_id, user_path(member.user) %>
</li>
<% end %>
<% end %>
<%#= content_tag "li", "#{l(:label_bidding_user_studentname)}#{' : '}"link_to(member.user.show_name, user_path(member.user)) %> <%#= content_tag "li", "#{l(:label_bidding_user_studentname)}#{' : '}"link_to(member.user.show_name, user_path(member.user)) %>
<% else %> <% else %>
<%= content_tag "li", link_to(member.user.name, user_path(member.user)) %> <li>
<% end %> <%= l(:label_username)%>
<%= link_to(member.user.name, user_path(member.user)) %>
</li>
<% end %>
<!--teacher's code disapeared moified by huang--> <!--teacher's code disapeared moified by huang-->
<% if @canShowCode %>
<li>
<%= l(:label_bidding_user_studentcode) %> :
<%= link_to member.user.user_extensions.student_id, user_path(member.user) %>
</li>
<%#= content_tag "li", "#{l(:label_bidding_user_studentcode)}#{' : '}#{member.user.user_extensions.student_id}", :style=> "color:#1c9ec7;" %>
<% end %>
</ul> </ul>
<% if @subPage_title == l(:label_student_list) %> <% if @subPage_title == l(:label_student_list) %>
<%= link_to format("%0.2f",member.score.nil? ? 0 : member.score.to_s), { <%= link_to format("%0.2f",member.score.nil? ? 0 : member.score.to_s), {

View File

@ -7,24 +7,36 @@
<a href="#" class="st_img" style="float:left;"> <%= member.user.nil? ? '' : (image_tag(url_to_avatar(member.user), :width => 40, :height => 40)) %></a> <a href="#" class="st_img" style="float:left;"> <%= member.user.nil? ? '' : (image_tag(url_to_avatar(member.user), :width => 40, :height => 40)) %></a>
<ul style="margin-left: 15px"> <ul style="margin-left: 15px">
<% if @canShowCode %> <% if @canShowCode %>
<li> <% if member.user.show_name == '' && member.user.user_extensions.student_id == '' %>
<%= l(:label_bidding_user_studentname) %> : <li>
<%= link_to member.user.show_name, user_path(member.user) %> <%= l(:label_username)%>
<%= link_to(member.user.name, user_path(member.user)) %>
</li> </br> </li>
<% else %>
<% unless member.user.show_name == ''%>
<li>
<%= l(:label_bidding_user_studentname) %> :
<%= link_to member.user.show_name, user_path(member.user) %>
</li>
</br>
<% end %>
<% unless member.user.user_extensions.student_id == '' %>
<li>
<%= l(:label_bidding_user_studentcode) %> :
<%= link_to member.user.user_extensions.student_id, user_path(member.user) %>
</li>
<% end %>
<% end %>
<%#= content_tag "li", "#{l(:label_bidding_user_studentname)}#{' : '}"link_to(member.user.show_name, user_path(member.user)) %> <%#= content_tag "li", "#{l(:label_bidding_user_studentname)}#{' : '}"link_to(member.user.show_name, user_path(member.user)) %>
<% else %> <% else %>
<%= content_tag "li", link_to(member.user.name, user_path(member.user)) %> <li>
<%= l(:label_username)%>
<%= link_to(member.user.name, user_path(member.user)) %>
</li>
<% end %> <% end %>
<!--teacher's code disapeared moified by huang--> <!--teacher's code disapeared moified by huang-->
<% if @canShowCode %>
<li>
<%= l(:label_bidding_user_studentcode) %> :
<%= link_to member.user.user_extensions.student_id, user_path(member.user) %>
</li>
<%#= content_tag "li", "#{l(:label_bidding_user_studentcode)}#{' : '}#{member.user.user_extensions.student_id}", :style=> "color:#1c9ec7;" %>
<% end %>
</ul> </ul>
<% if @subPage_title == l(:label_student_list) %> <% if @subPage_title == l(:label_student_list) %>
<%= link_to format("%0.2f",member.score.to_s), { <%= link_to format("%0.2f",member.score.to_s), {

View File

@ -6,7 +6,8 @@
$.get( $.get(
'<%=valid_ajax_course_path%>', '<%=valid_ajax_course_path%>',
{ valid: "name", { valid: "name",
value: document.getElementById('group_name').value }, value: document.getElementById('group_name').value,
course_id: <%= @course.id %> },
function (data) { function (data) {
if (!data.valid) { if (!data.valid) {
alert(data.message); alert(data.message);
@ -56,7 +57,7 @@
</script> </script>
<%= stylesheet_link_tag 'course_group', :media => 'all' %> <%= stylesheet_link_tag 'course_group', :media => 'all' %>
<script type="text/javascript" src="javascripts/jquery-1.8.3-ui-1.9.2-ujs-2.0.3.js"></script> <script type="text/javascript" src="javascripts/jquery-1.8.3-ui-1.9.2-ujs-2.0.3.js"></script>
<div class="st_list"> <div class="st_list" id="member_of_course">
<div class="st_search" style="margin-left: 14px" > <div class="st_search" style="margin-left: 14px" >
<span class="f_l"><%= @subPage_title %></span> <span class="f_l"><%= @subPage_title %></span>
<span id = "search_members"> <span id = "search_members">

View File

@ -6,7 +6,7 @@
<%= labelled_form_for @course do |f| %> <%= labelled_form_for @course do |f| %>
<div class="box tabular"> <div class="box tabular">
<%= render :partial => 'course_form', :locals => { :f => f } %> <%= render :partial => 'course_form', :locals => { :f => f } %>
<span style="padding-left: 60px"> <span style="padding-left: 60px; margin-left: 36px">
<%= submit_tag l(:button_create), :class => "enterprise"%> <%= submit_tag l(:button_create), :class => "enterprise"%>
</span> </span>
<!-- <%#= submit_tag l(:button_create_and_continue), :name => 'course_continue' %> --> <!-- <%#= submit_tag l(:button_create_and_continue), :name => 'course_continue' %> -->

View File

@ -22,7 +22,7 @@
</span> </span>
</div> </div>
<button name="button" class="f_l ml10" onclick="_file.click()" onmouseover="this.focus()" type="button" style="width:80px; height:26px;">上传文件</button> <button name="button" class="f_l ml10" onclick="_file.click()" onmouseover="this.focus()" type="button" style="width:20%; height:26%;"><%= l(:label_browse)%></button>
<%= file_field_tag 'attachments[dummy][file]', <%= file_field_tag 'attachments[dummy][file]',
:id => '_file', :id => '_file',
:class => 'file_selector', :class => 'file_selector',

View File

@ -1,15 +1,15 @@
<div id="popbox_upload" style="margin-top: -30px;margin-left: -20px;margin-right: -10px;"> <div id="popbox_upload" style="margin-top: -30px;margin-left: -20px;margin-right: -10px;">
<div class="upload_con"> <div class="upload_con">
<h2>上传资源</h2> <h2><%= l(:label_upload_files)%></h2>
<div class="upload_box"> <div class="upload_box">
<%= error_messages_for 'attachment' %> <%= error_messages_for 'attachment' %>
<div id="network_issue" style="color: red; display: none;">上传出现错误,请您检查您的网络环境,并刷新页面重新上传。</div> <div id="network_issue" style="color: red; display: none;"><%= l(:label_file_upload_error_messages)%></div>
<%= form_tag(course_files_path(course), :multipart => true,:remote => true,:method => :post,:name=>"upload_form") do %> <%= form_tag(course_files_path(course), :multipart => true,:remote => true,:method => :post,:name=>"upload_form") do %>
<label style="margin-top:3px;">文件浏览:</label> <label style="margin-top:3px;"><%= l(:label_file_upload)%></label>
<%= render :partial => 'attachement_list',:locals => {:course => course} %> <%= render :partial => 'attachement_list',:locals => {:course => course} %>
<div class="cl"></div> <div class="cl"></div>
<a id="submit_resource" href="javascript:void(0);" class="upload_btn" onclick="submit_resource();">确&nbsp;&nbsp;认</a> <a id="submit_resource" href="javascript:void(0);" class="upload_btn" onclick="submit_resource();"><%= l(:button_confirm)%></a>
<a href="javascript:void(0);" class="upload_btn upload_btn_grey" onclick="closeModal();">取&nbsp;&nbsp;消</a> <a href="javascript:void(0);" class="upload_btn upload_btn_grey" onclick="closeModal();"><%= l(:button_cancel)%></a>
<% end %> <% end %>
</div> </div>

View File

@ -31,7 +31,7 @@
:url => {:controller => 'homework_attach', :url => {:controller => 'homework_attach',
:action => 'addjours', :action => 'addjours',
:homework_id => homework_attach.id, :homework_id => homework_attach.id,
:cur_page => cur_page, :page => cur_page,
:cur_type => cur_type, :cur_type => cur_type,
:is_anonymous_comments => @is_anonymous_comments, :is_anonymous_comments => @is_anonymous_comments,
:is_teacher => @is_teacher :is_teacher => @is_teacher

View File

@ -19,7 +19,7 @@
<% else %> <% else %>
<% homework_filename = homework.name %> <% homework_filename = homework.name %>
<% end %> <% 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%>
<span class="c_grey "> <span class="c_grey ">
提交时间: 提交时间:
<%= format_time homework.created_at%> <%= format_time homework.created_at%>
@ -46,7 +46,7 @@
<% if is_teacher %> <% if is_teacher %>
<!-- 是老师,所有列表正常显示 --> <!-- 是老师,所有列表正常显示 -->
<li class="wping"> <li class="wping">
<%= 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") %> <% if Time.parse(bid.deadline.to_s).strftime("%Y-%m-%d") < Time.parse(homework.created_at.to_s).strftime("%Y-%m-%d") %>
<span class="c_red">&nbsp;&nbsp;迟交!</span> <span class="c_red">&nbsp;&nbsp;迟交!</span>
<% end %> <% end %>

View File

@ -1,49 +1,122 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <style type="text/css">
<html xmlns="http://www.w3.org/1999/xhtml"> #scrollsidebar{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal;}
<head> #scrollsidebar div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,ol{ }
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> #scrollsidebar div,img,tr,td,table{ border:0;}
<title>意见反馈浮窗</title> #scrollsidebar ol,ul,li{ list-style-type:none}
#scrollsidebar .cl{ clear:both; overflow:hidden; }
#scrollsidebar a{ text-decoration:none;}
html{ overflow-x:hidden;}
.custom_service p img {display: inline; margin-top:-5px; vertical-align:middle;}
.scrollsidebar{position:absolute; z-index:999; top:150px;}
.side_content{width:154px; height:auto; overflow:hidden; float:left; }
.side_content .side_list {width:154px;overflow:hidden;}
.show_btn{ width:0; height:112px; overflow:hidden; margin-top:50px; float:left; cursor:pointer;}
.show_btn span { display:none;}
.close_btn{width:24px;height:24px;cursor:pointer;}
.side_title,.side_bottom,.close_btn,.show_btn {background:url(/images/sidebar_bg.png) no-repeat;}
.side_title {height:46px;}
.side_bottom { height:8px;}
.side_center {font-family:Verdana, Geneva, sans-serif; padding:5px 12px; font-size:12px;}
.close_btn { float:right; display:block; width:21px; height:16px; margin:16px 10px 0 0; _margin:16px 5px 0 0;}
.close_btn span { display:none;}
.side_center .custom_service p { text-align:center; padding:6px 0; margin:0; vertical-align:middle;}
.msgserver { margin:10px 0 4px 4px;}
.msgserver a { background:url(/images/sidebar_bg.png) no-repeat -119px -115px; padding-left:22px;}
.opnionText{ width:120px; height:180px; border-color:#cecece; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; color:#999; padding:3px;}
a.opnionButton{ display:block; font-weight: bold; margin:-25px auto 0; text-align:center;}
a:hover.opnionButton{ text-decoration:underline;}
/* blue skin as the default skin */
.side_title {background-position:-195px 0;}
.side_center {background:url(/images/blue_line.png) repeat-y center;}
.side_bottom {background-position:-195px -50px;}
.close_btn {background-position:-44px 0;}
.close_btn:hover {background-position:-66px 0;}
.show_btn {background-position:-119px 0;}
.msgserver a {color:#15bccf; }
.msgserver a:hover { text-decoration:underline; }
</style>
<script> <script>
function mypostion(o){ /* =================================================
var width=$(window).width(); //
var height=$(window).height(); // jQuery Fixed Plugins 1.3.1
var divW=$(o).outerWidth(); // author :
var divH=$(o).outerHeight(); // Url:
var left=(width-divW)/2+$(window).scrollLeft(); // Data : 2012-03-30
var top=(height-divH)/2+$(window).scrollTop(); //
return {"left":left,"top":top}; // ???? : float --> ????[left or right]
}; // minStatue --> ??С???????show_btn
// skin --> ???????
// durationTime --> ??????
//???? :
$("#scrollsidebar2").fix({
float : 'right', //default.left or right
minStatue : true, //default.false or true
skin : 'green', //default.gray or yellow ??blue ??green ??orange ??white
durationTime : 1000 //
});
//
// =================================================*/
function myTips(msg,status){ (function($){
if(status!="success" && status!="error"){status="error";}; $.fn.fix = function(options){
if (status=="success") { var defaults = {
$("body").append('<div class="ui-mask" id="ui-mask"></div><div class="change_success" id="change_success"><!--span class="send_close" onclick="$(this).parent().remove();$("#ui-mask").remove();"></span--><i></i>'+msg+'</div>'); float : 'left',
var my=mypostion("#change_success"); minStatue : false,
$("#change_success").css({"position":"absolute","z-index":"9999999","top":my.top+"px","left":my.left+"px"}); skin : 'blue',
$("#ui-mask").show(); durationTime : 1000
$("#change_success").show(); }
setTimeout(function(){ var options = $.extend(defaults, options);
$("#change_success,#ui-mask").fadeOut("slow",function(){
$("#ui-mask").remove(); this.each(function(){
$("#change_success").remove(); //???????
var thisBox = $(this),
closeBtn = thisBox.find('.close_btn' ),
show_btn = thisBox.find('.show_btn' ),
sideContent = thisBox.find('.side_content'),
sideList = thisBox.find('.side_list')
;
var defaultTop = thisBox.offset().top; //????????top
thisBox.css(options.float, 0);
if(options.minStatue){
$(".show_btn").css("float", options.float);
sideContent.css('width', 0);
show_btn.css('width', 25);
}
//???????
if(options.skin) thisBox.addClass('side_'+options.skin);
//????scroll???
$(window).bind("scroll",function(){
var offsetTop = defaultTop + $(window).scrollTop() + "px";
thisBox.animate({
top: offsetTop
},
{
duration: options.durationTime,
queue: false //???????????????????
});
}); });
},2500); //close???
} closeBtn.bind("click",function(){
else{ sideContent.animate({width: '0px'},"fast");
$("body").append('<div class="ui-mask" id="ui-mask"></div><div class="change_error" id="change_error"><!--span class="send_close" onclick="$(this).parent().remove();$("#ui-mask").remove();"></span--><i></i>'+msg+'</div>'); show_btn.stop(true, true).delay(300).animate({ width: '25px'},"fast");
var my=mypostion("#change_error");
$("#change_error").css({"position":"absolute","z-index":"9999999","top":my.top+"px","left":my.left+"px"});
$("#ui-mask").show();
$("#change_error").show();
setTimeout(function(){
$("#change_error,#ui-mask").fadeOut("slow",function(){
$("#ui-mask").remove();
$("#change_error").remove();
}); });
},1000); //show???
}; show_btn.click(function() {
}; $(this).animate({width: '0px'},"fast");
sideContent.stop(true, true).delay(200).animate({ width: '154px'},"fast");
});
}); //end this.each
};
})(jQuery);
$(function(){ $(function(){
@ -59,92 +132,51 @@ function f_submit()
} }
</script> </script>
<style type="text/css">
/*浮窗*/ <html xmlns="http://www.w3.org/1999/xhtml">
/*body{ height:3000px; font-family:'微软雅黑';}*/ <head>
/*div,ul,li,body,h3,p{margin:0; padding:0;}*/ <title>意见反馈</title>
#roll a{ text-decoration:none;}
#roll{ background:url(/images/f_opnion.jpg) 0 0 no-repeat;width:157px; height:332px; position:absolute;}
.opnionBox{ width: 130px; height:146px; margin:76px auto 20px; }
.opnionText{ width: 120px !important; height:130px; outline:none; border:none !important;padding: 0 5px !important; color: #03a8bb;line-height:1.5; font-size:12px; }
a.opnionButton{ width:40px; height:20px; display:block; margin:0 auto;font-size:14px; color:#fd6e2a; font-weight: bold; }
a:hover.opnionButton{ text-decoration:underline;}
.opnionCall{ color:#03a8bb; font-size:12px; width:105px; margin:0 auto;}
.opnionCall .tectitle{ font-size:14px; alignment-adjust: central; color:#03a8bb; margin-bottom:8px,}
/*提示框*/
.ui-mask{background-color:#000;opacity:0.5;filter:alpha(opacity=50);width:100%;height:100%;position:fixed;_position:absolute;left:0;top:0;z-index:9999998;display:none;}
.change_success{
display:block;
height:60px;
width:300px;
line-height:1.9;
font-size:14px;
font-weight:500;
background:#fff;
color:#1395a4;
border:5px solid #1395a4;
font-size:14px;
padding:30px 20px;
position: absolute;
_position: absolute;
left:0;
top:0;
z-index:9999999;
}
</style>
</head> </head>
<body style="height:auto">
<body> <!-- ?ú?? ???? -->
<div id="roll"> <div class="scrollsidebar" id="scrollsidebar">
<div class="opnionBox"> <div class="side_content">
<div class="side_list">
<% get_memo %> <div class="side_title"><a title="意见反馈" class="close_btn"><span><%= l(:label_feedback) %></span></a></div>
<%= form_for(@new_memo, :url => create_feedback_forum_path(@public_forum)) do |f| %> <div class="side_center">
<div class="actions" style="max-width:680px;"> <div class="custom_service">
<p style="margin:0; padding:0;"> <% get_memo %>
<%= f.text_area :subject, :class => "opnionText",:placeholder => "有什么想说的,尽管来咆哮吧~~"%> <%= form_for(@new_memo, :url => create_feedback_forum_path(@public_forum)) do |f| %>
</p> <%= f.text_area :subject, :class => "opnionText",:placeholder => "有什么想说的,尽管来咆哮吧~~"%>
<p style="margin:0; padding:0;"> <%= f.hidden_field :content, :required => true ,:value=>'该贴来自用户反馈!'%>
<%= f.hidden_field :content, :required => true ,:value=>'该贴来自用户反馈!'%> <%#= f.submit :value => l(:label_memo_create), :class => "opnionButton", :id => "button1" %>
</p> <a href="javascript:void(0);" class="opnionButton" style=" color:#fd6e2a;" id="" onclick="f_submit();">提&nbsp;&nbsp;交</a>
<%#= f.submit :value => l(:label_memo_create), :class => "opnionButton", :id => "button1" %> <% end %>
<a href="javascript:void(0);" class="opnionButton" id="" onclick="f_submit();">提&nbsp;&nbsp;交</a> </div>
<% end %> <div class="msgserver">
</div> <p>
<a href="http://user.trustie.net/users/12/user_newfeedback" style="color: #15BCCF;"><%= l(:label_technical_support) %>黄井泉</a></br>
<a href="http://user.trustie.net/users/34/user_newfeedback" style="color: #15BCCF;"><%= l(:label_technical_support) %>白&nbsp;&nbsp;&nbsp;羽</a>
</form> </p>
<div class="clear"></div> </div>
</div>
<div class="side_bottom"></div>
</div>
</div>
<div class="show_btn"><span>提交</span></div>
</div> </div>
<!-- ?ú?? ?á?? -->
<div class="opnionCall"> <script type="text/javascript">
<div class="tectitle">技术支持:</div> $(function() {
<p style="margin:0; padding:0;" ><%= l(:label_course_adcolick) %><a href="http://user.trustie.net/users/12/user_newfeedback">黄井泉</a><br> $("#scrollsidebar").fix({
<%= l(:label_course_adcolick) %><a href="http://user.trustie.net/users/34/user_newfeedback">白羽</a></p> float : 'right', //default.left or right
</div> //minStatue : true,
skin : 'green', //default.gray or blue
</div> durationTime : 600
});
</body> });
</html>
<script>
var roll=document.getElementById('roll'),
initX=0,
initY,
compY,
sp=15,
//可调整时间间隔步进值不宜过大不然IE下有点闪屏
timeGap=5,
doc=document.documentElement,
docBody=document.body;
compY=initY=100;
roll.style.right=initX+"px";
;(function(){
var curScrollTop=(doc.scrollTop||docBody.scrollTop||0)-(doc.clientTop||docBody.clientTop||0);
//每次comP的值都不一样直到roll.style.top===doc.scrollTop+initY
compY+=(curScrollTop+initY-compY)/sp;
roll.style.top=Math.ceil(compY)+"px";
setTimeout(arguments.callee,timeGap);
})();
</script> </script>
</body>
</html>

View File

@ -47,12 +47,36 @@
</td> </td>
<td rowspan="2" width="250px"> <td rowspan="2" width="250px">
<div class="top-content-search"> <div class="top-content-search">
<script type="text/javascript">
function regexName()
{
var name = $.trim($("#name").val());
if(name.length == 0)
{
$("#project_name_span").text("<%= l(:label_search_conditions_not_null) %>");
$("#project_name_span").css('color','#ff0000');
$("#project_name_span").focus();
return false;
}
else
{
$("#project_name_span").text("");
return true;
}
}
function submitSerch()
{
if(regexName()){$("#course_search_form").submit();}
}
</script>
<%= form_tag({:controller => 'courses', :action => 'search'},:id => "course_search_form", :method => :get) do %> <%= form_tag({:controller => 'courses', :action => 'search'},:id => "course_search_form", :method => :get) do %>
<%= text_field_tag 'name', params[:name], :size => 20, :style => "float:left" %> <%= text_field_tag 'name', params[:name], :size => 20, :style => "float:left" %>
<a href="#" onclick="$('#course_search_form').submit();" class="ButtonColor m3p10" style="float:left;padding-top: 3px; margin: 0px;padding-bottom:0px;" > <a href="#" onclick="submitSerch();" class="ButtonColor m3p10" style="float:left;padding-top: 3px; margin: 0px;padding-bottom:0px;" >
<%= l(:label_search)%> <%= l(:label_search)%>
</a> </a>
<br />
<span id="project_name_span" style="float: left"></span>
<%#= submit_tag l(:label_search), :class => "ButtonColor m3p10", :name => nil, :style => "float:left;padding-top: 3px; margin: 0px;padding-bottom:0px;" %> <%#= submit_tag l(:label_search), :class => "ButtonColor m3p10", :name => nil, :style => "float:left;padding-top: 3px; margin: 0px;padding-bottom:0px;" %>
<% end %> <% end %>
</div> </div>
@ -276,13 +300,22 @@
<div class="user_underline"></div> <div class="user_underline"></div>
<style type="text/css">
.polls_btn{ height:33px;border-top:0 solid #15bed1; border-bottom:1px solid #15bed1;border-right:1px solid #cee6e6; width:224px; 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 a{ float:left;}
.polls_n{float: left;background: #ff5d31;color: #fff;width: 32px;padding-left: 2px;height: 7px;padding-bottom: 5px;padding-top: 3px;margin-top: -4px;margin-left: 3px; }
.polls_n p{ margin-top:-4px;}
.cl{ clear:both; overflow:hidden; }
</style>
<div class="polls_btn"> <div class="polls_btn">
<!--<a href="#">问卷调查<span >12</span></a>--> <!--<a href="#">问卷调查<span >12</span></a>-->
<style type="text/css">
.polls_btn{ height:33px;border-top:1px solid #15bed1; border-bottom:1px solid #15bed1;border-right:1px solid #cee6e6; width:224px !important; padding:7px 0 0 15px; }
.polls_btn a{font-size:14px; color:#444444;font-weight:bold;}
</style>
<%= link_to l(:label_poll), poll_index_path(:polls_type => "Course", :polls_group_id => @course.id)%> <%= link_to l(:label_poll), poll_index_path(:polls_type => "Course", :polls_group_id => @course.id)%>
<div class="polls_n">
<p>NEW</p>
</div>
<div class="cl"></div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -70,7 +70,7 @@
<%= l(:label_search)%> <%= l(:label_search)%>
</a> </a>
<br /> <br />
<span id="contest_name_span_head"></span> <span id="contest_name_span_head" style="float: left"></span>
<% end %> <% end %>
</div> </div>
</td> </td>

View File

@ -71,7 +71,7 @@
<%= l(:label_search)%> <%= l(:label_search)%>
</a> </a>
<br /> <br />
<span id="project_name_span"></span> <span id="project_name_span" style="float: left"></span>
<% end %> <% end %>
</div> </div>
</td> </td>

View File

@ -10,37 +10,43 @@ body{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; back
div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,ol{ margin:0; padding:0;} div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,ol{ margin:0; padding:0;}
div,img,tr,td,table{ border:0;} div,img,tr,td,table{ border:0;}
table,tr,td{border:0;cellspacing:0; cellpadding:0;} table,tr,td{border:0;cellspacing:0; cellpadding:0;}
ol,ul,li{ list-style-type:none}
.cl{ clear:both; overflow:hidden; }
a{ text-decoration:none; }
a:hover{ text-decoration:underline; }
.mail_box,ul,li{ list-style-type:none}
.mail{ width:600px; margin:20px; height:auto; color:#4b4b4b; font-size:14px; } .mail{ width:600px; margin:20px; height:auto; color:#4b4b4b; font-size:14px; }
ol,ul,li{ list-style-type:none}
.cl{ clear:both; overflow:hidden; margin-top: 30px;}
.mail_box,ul,li{ list-style-type:none}
.mail a{color:#1b55a7; font-weight: bold; } .mail a{color:#1b55a7; font-weight: bold; }
.mail_content{ margin-top:30px;} .mail_content{ margin-top:30px;}
.c_blue{ color:#1b55a7;} .c_blue{ color:#1b55a7;}
.mail_box{ border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;} .mail_box{ border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;}
.mail_box_p{ float:left; display: block; width:527px;} .mail_box_p{ float:left; display: block; width:527px;}
a.mail_reply{ display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px;}
a:hover.mail_reply{ background:#06a9bc; text-decoration:none;}
.mail_fujian{ float:left; width:527px; display: block; } .mail_fujian{ float:left; width:527px; display: block; }
.mail_fujian a{ font-weight:normal; font-size:12px;} .mail_fujian a{ font-weight:normal; font-size:12px;}
.mail_foot a{ font-size:12px; font-weight:normal;} .mail_foot a{ font-size:12px; font-weight:normal;}
a{ text-decoration:none; }
a:hover{ text-decoration:underline; }
a.mail_reply{ display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px;}
a:hover.mail_reply{ background:#06a9bc; text-decoration:none;}
</style> </style>
</head> </head>
<body>
<div class="container"> <body style="font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal; margin:0; padding:0; border:0;">
<div class="mail"> <div class="container" style="margin:0; padding:0; border:0;">
<div class="mail_head"> <div class="mail" style="width:600px; margin:20px; height:auto; color:#4b4b4b; font-size:14px; margin:0; padding:0; border:0;">
<p>亲爱的Trustie用户您好</p> <div class="mail_head" style="margin:0; padding:0; border:0;">
<p><%= l(:mail_issue_greetings)%></p>
</div><!--mail_head end--> </div><!--mail_head end-->
<%= yield %> <%= yield %>
<hr /> <hr />
<div class="mail_foot"><%= link_to("退订该邮件?", @user_url) %> </div><!--mail_foot end--> <span class="footer" style="margin:0; padding:0;"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_footer).html_safe %></span><!--mail_foot end-->
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -1,32 +1,40 @@
<!-- <h1><%#= link_to(h("#{issue.tracker.name} ##{issue.project_index}: #{issue.subject}"), issue_url) %></h1> --> <!-- <h1><%#= link_to(h("#{issue.tracker.name} ##{issue.project_index}: #{issue.subject}"), issue_url) %></h1> -->
<p> <p>
<span class="c_blue"> <span class="c_blue" style="color:#1b55a7;">
<%= link_to(h("#{@issue.author}(#{@issue.author.show_name})"), @issue_author_url) %> <%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
</span>在 </span><%= l(:mail_issue_title_userin)%>
<span class="c_blue"><%= link_to(h("#{@issue.project.name}"),@project_url) %></span>中有了一个与您相关的最新活动,请您关注!</p> <span class="c_blue" style="color:#1b55a7;"><%= link_to(h("#{@issue.project.name}"), @project_url, :style=>'color:#1b55a7; font-weight:bold;') %></span><%= l(:mail_issue_title_active)%></p>
<div class="mail_box"> <div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
<ul> <ul style="list-style-type:none; margin:0; padding:0;">
<li style="list-style-type:none"><span style="float: left"><strong>标题:</strong></span><span style="float: left; width: 500px"><%= link_to(issue.subject, issue_url) %></span></li> <li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span><span style="float: left; width: 526px"><%= link_to(issue.subject, issue_url, :style=>'color:#1b55a7; font-weight:bold;') %></span></li>
<li style="list-style-type:none"><span style="float: left"> <strong>来源:</strong></span><span style="float: left; width: 500px"><%= issue.project.name %><b>|&nbsp;</b>项目<%= issue.tracker.name%></span></li> <li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_sent_from)%></strong></span><span style="float: left; width: 526px"><%= issue.project.name %><b>|&nbsp;</b><%= l(:mail_issue_from_project)%></span></li>
<li style="list-style-type:none"><span style="float: left"> <strong >内容:</strong></span><span style="float: left; width: 500px"> <li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
<%= issue.description %></span> <span style="float: left; width: 526px">
<% if @journal.nil? %>
<%= issue.description %>
<% else %>
<%= @journal.notes %>
<% end%>
</span>
</li> </li>
<li style="list-style-type:none"> <li style="list-style-type:none; margin:0; padding:0;">
<% unless @issue.attachments.nil? %> <% unless @issue.attachments.nil? %>
<span style="float: left"> <strong>附件:</strong> <span style="float: left"> <strong><%= l(:mail_issue_attachments)%></strong></span>
</span><span style="float: left; width: 500px"> <span style="float: left; width: 526px; margin:0; padding:0;">
<% @issue.attachments.each do |attach| %> <% @issue.attachments.each do |attach| %>
<p><%= link_to_attachment(attach, :download => true, :token => @token.value, :only_path => false) %></p> <p style="float: left; width: 526px; margin:0; padding:0;"><%= link_to_attachment(attach, :download => true, :token => @token.value, :only_path => false, :style=>'color:#1b55a7; font-weight:bold;')%></p>
<% end %></span> <% end %></span>
<% end %> <% end %>
</li> </li>
</ul> </ul>
<div class="cl"></div> <div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
<label class="mail_reply"><%= link_to( "我要回复", issue_url, :class => "mail_reply") %></label> <label class="mail_reply">
<div class="cl"></div> <%= link_to( l(:mail_issue_reply), issue_url, :class => "mail_reply", :style =>'display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px; line-height: 30px;') %>
</label>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
</div> </div>
<!-- <li><%#=l(:field_author)%>: <%#=h issue.author %></li> <!-- <li><%#=l(:field_author)%>: <%#=h issue.author %></li>

View File

@ -1,13 +1,17 @@
<%= 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) %>中有了一个与您相关的最新活动,请您关注! <%= link_to(h("#{@issue.project.name}"),@project_url) %><%= l(:mail_issue_title_active)%>
标题:<%= link_to(issue.subject, issue_url) %> <%= l(:mail_issue_subject)%><%= link_to(issue.subject, issue_url) %>
来源:<%= issue.project.name %>|&nbsp;项目缺陷< <%= l(:mail_issue_sent_from)%>|&nbsp;<%= l(:mail_issue_from_project)%>
内容: <%= l(:mail_issue_content)%>
<% if @journal.nil? %>
<%= issue.description %> <%= issue.description %>
<% else %>
<%= @journal.notes %>
<% end%>
<% unless @issue.attachments.nil? %> <% unless @issue.attachments.nil? %>
附件: <%= l(:mail_issue_attachments)%>
<% @issue.attachments.each do |attach| %> <% @issue.attachments.each do |attach| %>
@ -16,4 +20,4 @@
<% end %> <% end %>
<%= link_to( "我要回复", issue_url) %> <%= link_to( l(:mail_issue_reply), issue_url) %>

View File

@ -0,0 +1,29 @@
<p>
<span class="c_blue" style="color:#1b55a7;">
<%= link_to(h("#{@forum.creator.login}(#{@forum.creator.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
</span><%= l(:label_forum_new)%>
<%= link_to(h(@forum.name), @forum_url,:style=>'color:#1b55a7; font-weight:bold;') %>
</p>
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
<ul style="list-style-type:none; margin:0; padding:0;">
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span>
<span style="float: left; width: 526px"> <%= link_to(h(@forum.name), @forum_url,:style=>'color:#1b55a7; font-weight:bold;') %></span></li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
<span style="float: left; width: 526px">
<%= @forum.description.html_safe %>
</span>
</li>
</ul>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
<label class="mail_reply">
<%= link_to(l(:mail_issue_reply), @forum_url, :class => "mail_reply", :style =>'display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px; line-height: 30px;') %>
</label>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
</div>

View File

@ -0,0 +1,4 @@
<%= @forum_url %>
<%= @author.name %>
<%= @forum.description %>

View File

@ -0,0 +1,32 @@
<p>
<span class="c_blue" style="color:#1b55a7;">
<%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
</span><%= l(:mail_issue_title_userin)%>
<span class="c_blue" style="color:#1b55a7;">
<%= link_to(h(@forum.name), @forum_url,:style=>'color:#1b55a7; font-weight:bold;') %>
</span><%= l(:mail_issue_title_active)%></p>
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
<ul style="list-style-type:none; margin:0; padding:0;">
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span>
<span style="float: left; width: 526px"> <%= link_to(h(@memo.subject), @memo_url,:style=>'color:#1b55a7; font-weight:bold;') %></span></li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_sent_from)%></strong></span>
<%= link_to(h(@forum.name), @forum_url,:style=>'color:#1b55a7; font-weight:bold;') %>
</li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
<span style="float: left; width: 526px">
<%= @memo.content.html_safe %>
</span>
</li>
</ul>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
<label class="mail_reply">
<%= link_to(l(:mail_issue_reply), @memo_url, :class => "mail_reply", :style =>'display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px; line-height: 30px;') %>
</label>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
</div>

View File

@ -0,0 +1,5 @@
<%= @memo_url %>
<%= @author.name %>
<%= @memo.subject %>
<%= @memo.content %>

View File

@ -1,8 +1,9 @@
<div class="mail_content"> <div class="mail_content" style="margin-top:30px; margin:0; padding:0; border:0;">
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %> <%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %>
</div> </div>
<div class="mail_foot" style="margin:0; padding:0; border:0;"><%= link_to( l(:mail_issue_footer), @user_url , :style=>'font-size:12px; font-weight:normal; color:#1b55a7;') %> </div>

View File

@ -1,2 +1,3 @@
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :issue_url => @issue_url } %> <%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :issue_url => @issue_url } %>
<%= link_to( l(:mail_issue_footer), @user_url) %>

View File

@ -1,13 +1,11 @@
<%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => h(@journal.user)) %> <div>
<%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => h(@journal.user)) %>
<ul>
<% details_to_strings(@journal.details, false, :only_path => false, :token => @token.value).each do |string| %> </div>
<% if (!string.include? l(:label_attachment)) && (!string.include? "attachments") %> <div class="cl" style="margin-top: 15px; clear:both; overflow:hidden;"></div>
<li><%= string %></li> <hr/>
<% end %>
<% end %>
</ul>
<span style="float: left"><strong><%= l(:field_content)%></strong></span><span style="float: left; width: 540px"><%= @journal.notes %></span>
<hr />
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %> <%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %>
<div class="mail_foot"><%= link_to( l(:mail_issue_footer), @user_url, :style=>'font-size:12px; font-weight:normal; color:#1b55a7;') %> </div>

View File

@ -1,14 +1,8 @@
<%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => @journal.user) %> <%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => @journal.user) %>
<% details_to_strings(@journal.details, true, :token => @token.value).each do |string| -%>
<% if (!string.include? l(:label_attachment)) && (!string.include? "attachments") %>
<li><%= string %></li>
<% end %>
<% end -%>
<% if @journal.notes? -%>
<%= l(:field_content)%><%= @journal.notes %>
<% end -%> --------------------------------------------------------------------------------
----------------------------------------
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :issue_url => @issue_url } %> <%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :issue_url => @issue_url } %>
<%= link_to( l(:mail_issue_footer), @user_url) %>

View File

@ -1,5 +1,25 @@
<em>尊敬的用户,<%= @user %>给你留言了:</em>
<div><%= @message %></div> <p>
<h1>点击链接查看最新回复<%= link_to(@url, @url) %></h1> <span class="c_blue" style="color:#1b55a7;">
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<h4><%= link_to(l(:lable_not_receive_mail),"http://" + Setting.host_name + "/my/account")%></h4>
<%= link_to(h("#{@user.login}(#{@user.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
</span>给你留言了
</p>
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
<ul style="list-style-type:none; margin:0; padding:0;">
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
<span style="float: left; width: 526px">
<%= @message %>
</span>
</li>
</ul>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
<label class="mail_reply">
<%= link_to(l(:mail_issue_reply), @url, :class => "mail_reply", :style =>'display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px; line-height: 30px;') %>
</label>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
</div>

View File

@ -1,4 +1,38 @@
<h1><%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %></h1>
<em><%=h @message.author %></em>
<%= textilizable(@message, :content, :only_path => false) %> <p>
<span class="c_blue" style="color:#1b55a7;">
<%= link_to(h("#{@message.author.login}(#{@message.author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
</span><%= l(:mail_issue_title_userin)%>
<span class="c_blue" style="color:#1b55a7;">
<% 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,:style=>'color:#1b55a7; font-weight:bold;') %>
<% end %>
</span><%= l(:mail_issue_title_active)%></p>
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
<ul style="list-style-type:none; margin:0; padding:0;">
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span><span style="float: left; width: 526px"> <%= link_to(h(@message.subject), @message_url, :style=>'color:#1b55a7; font-weight:bold;') %></span></li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_sent_from)%></strong></span>
<% if @message.project %>
<span style="float: left; width: 526px"><%=h @message.board.project.name %> - <%=h @message.board.name %></span>
<% elsif @message.course %>
<span style="float: left; width: 526px"><%=h @message.board.course.name %> - <%=h @message.board.name %></span>
<% end %>
</li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
<span style="float: left; width: 526px">
<%= @message.content %>
</span>
</li>
</ul>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
<label class="mail_reply">
<%= link_to(l(:mail_issue_reply), @message_url, :class => "mail_reply", :style =>'display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px; line-height: 30px;') %>
</label>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
</div>

View File

@ -1,4 +1,41 @@
<h1><%= link_to(h(@news.title), @news_url) %></h1>
<em><%=h @news.author.name %></em>
<%= textilizable(@news, :description, :only_path => false) %> <p>
<span class="c_blue" style="color:#1b55a7;">
<%= link_to(h("#{@news.author.login}(#{@news.author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
</span><%= l(:mail_issue_title_userin)%>
<span class="c_blue" style="color:#1b55a7;">
<% if @news.project %>
<%=h @news.project.name %> : <%= link_to(h(@news.title), @news_url,:style=>'color:#1b55a7; font-weight:bold;') %>
<% elsif @news.course %>
<%=h @news.course.name %> : <%= link_to(h(@news.title), @news_url,:style=>'color:#1b55a7; font-weight:bold;') %>
<% end %>
</span><%= l(:mail_issue_title_active)%></p>
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
<ul style="list-style-type:none; margin:0; padding:0;">
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span>
<span style="float: left; width: 526px"> <%= link_to(h(@news.title), @news_url,:style=>'color:#1b55a7; font-weight:bold;') %></span></li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_sent_from)%></strong></span>
<% if @news.project %>
<span style="float: left; width: 526px"><%=h @news.project.name %></span>
<% elsif @news.course %>
<span style="float: left; width: 526px"><%=h @news.course.name %></span>
<% end %>
</li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
<span style="float: left; width: 526px">
<%= @news.description %>
</span>
</li>
</ul>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
<label class="mail_reply">
<%= link_to(l(:mail_issue_reply), @news_url, :class => "mail_reply", :style =>'display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px; line-height: 30px;') %>
</label>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
</div>

View File

@ -1,5 +1,40 @@
<h1><%= link_to(h(@news.title), @news_url) %></h1>
<p><%= l(:text_user_wrote, :value => h(@comment.author)) %></p> <p>
<span class="c_blue" style="color:#1b55a7;">
<%= link_to(h("#{@comment.author.login}(#{@comment.author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
</span><%= l(:mail_issue_title_userin)%>
<span class="c_blue" style="color:#1b55a7;">
<% if @news.project %>
<%=h @news.project.name %> : <%= link_to(h(@news.title), @news_url,:style=>'color:#1b55a7; font-weight:bold;') %>
<% elsif @news.course %>
<%=h @news.course.name %> : <%= link_to(h(@news.title), @news_url,:style=>'color:#1b55a7; font-weight:bold;') %>
<% end %>
</span><%= l(:mail_issue_title_active)%></p>
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
<ul style="list-style-type:none; margin:0; padding:0;">
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span>
<span style="float: left; width: 526px"> <%= link_to(h(@news.title), @news_url,:style=>'color:#1b55a7; font-weight:bold;') %></span></li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_sent_from)%></strong></span>
<% if @news.project %>
<span style="float: left; width: 526px"><%=h @news.project.name %></span>
<% elsif @news.course %>
<span style="float: left; width: 526px"><%=h @news.course.name %></span>
<% end %>
</li>
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
<span style="float: left; width: 526px">
<%= @news.description %>
</span>
</li>
</ul>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
<label class="mail_reply">
<%= link_to(l(:mail_issue_reply), @news_url, :class => "mail_reply", :style =>'display:block; float:right; width:80px; text-align:center; height:30px; background:#15bccf; color:#fff; font-weight:normal; font-size:14px; line-height: 30px;') %>
</label>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
</div>
<%= textilizable @comment, :comments, :only_path => false %>

View File

@ -123,10 +123,10 @@
<br/> <br/>
</p> </p>
<p style="width:400px;padding-left: 50px;"> <p style="width:400px;padding-left: 53px;">
<label style="margin-right: 1px;"> <label for="userIdentity">
<%= l(:label_identity) %><span style="color: #bb0000;"> *</span></label> <%= l(:label_identity) %><span class="required"> *</span></label>
<select onchange="showtechnical_title(this.value, $('#userTechnical_title'));" name="identity" id="userIdentity" class="location" style="margin: 0px;"> <select onchange="showtechnical_title(this.value, $('#userTechnical_title'));" name="identity" id="userIdentity" class="location" style="margin: -4px;">
<option value=""> <option value="">
<%= l(:label_account_identity_choose) %> <%= l(:label_account_identity_choose) %>
</option> </option>
@ -187,19 +187,19 @@
<!-- added by bai 增加账户里的性别--> <!-- added by bai 增加账户里的性别-->
<span id='gender' style='display:none'> <span id='gender' style='display:none'>
<% if @user.user_extensions.nil? %> <% if @user.user_extensions.nil? %>
<p style="width:400px;padding-left: 52px;"> <p style="width:400px;padding-left: 53px;">
<%= l(:label_gender) %>&nbsp;&nbsp; <label for="gender"><%= l(:label_gender) %>&nbsp;&nbsp;</label>
<%= select_tag 'gender', "<option value = '0'>#{l(:label_gender_male)}</option><option value = '1'>#{l(:label_gender_female)}</option>".html_safe, :class => 'gender' %> <%= select_tag 'gender', "<option value = '0'>#{l(:label_gender_male)}</option><option value = '1'>#{l(:label_gender_female)}</option>".html_safe, :class => 'gender' %>
</p> </p>
<% else %> <% else %>
<% if @user.user_extensions.gender == 0 %><!-- label_gender_male --> <% if @user.user_extensions.gender == 0 %><!-- label_gender_male -->
<p style="width:400px;padding-left: 52px;"> <p style="width:400px;padding-left: 53px;">
<%= l(:label_gender) %>&nbsp;&nbsp; <label for="gender"><%= l(:label_gender) %>&nbsp;&nbsp;</label>
<%= select_tag 'gender', "<option value = '0'>#{l(:label_gender_male)}</option><option value = '1'>#{l(:label_gender_female)}</option>".html_safe, :class => 'gender' %> <%= select_tag 'gender', "<option value = '0'>#{l(:label_gender_male)}</option><option value = '1'>#{l(:label_gender_female)}</option>".html_safe, :class => 'gender' %>
</p> </p>
<% else %> <% else %>
<p style="width:400px;padding-left: 54px;"> <p style="width:400px;padding-left: 54px;">
<%= l(:label_gender) %>&nbsp;&nbsp; <label for="gender"><%= l(:label_gender) %>&nbsp;&nbsp;</label>
<%= select_tag 'gender', "<option value = '0'>#{l(:label_gender_male)}</option><option value = '1' selected='selected'>#{l(:label_gender_female)}</option>".html_safe, :class => 'gender' %> <%= select_tag 'gender', "<option value = '0'>#{l(:label_gender_male)}</option><option value = '1' selected='selected'>#{l(:label_gender_female)}</option>".html_safe, :class => 'gender' %>
</p> </p>
<% end %> <% end %>
@ -212,9 +212,9 @@
<!-- added by Wen --> <!-- added by Wen -->
<p id="occupation_detail" style="padding-left: 24px; display: none"> <p id="occupation_detail" style="padding-left: 25px; display: none">
<%= l(:field_occupation) %> <label for="occupation_name"><%= l(:field_occupation) %></label>
<span class="required">&nbsp;</span> <span class="required">&nbsp;</span>
<% if User.current.user_extensions.nil? %> <% if User.current.user_extensions.nil? %>
<input id="province" name="province" style="display: none" type="text" value="请单击选择省份及学校" readonly> <input id="province" name="province" style="display: none" type="text" value="请单击选择省份及学校" readonly>
@ -242,7 +242,7 @@
<div id="WOpenWindow"> <div id="WOpenWindow">
<a class="modal_close" href="#"></a> <a class="modal_close" href="#"></a>
<h2><%= l(:lable_school_list)%></h2> <h2 style="margin: 10px"><%= l(:lable_school_list)%></h2>
&nbsp;&nbsp; &nbsp;&nbsp;
<div class="pcontent"> <div class="pcontent">
<ul id="provincelist" class="school_list"> <ul id="provincelist" class="school_list">
@ -318,7 +318,7 @@
}); });
</script> </script>
<p style="width:400px;padding-left: 55px;"><label style="margin-right: 5px;"><%= l(:label_location) %></label> <p style="width:400px;padding-left: 55px;"><label style="margin-right: 5px;" for="userProvince"><%= l(:label_location) %></label>
<select onchange="showcity(this.value, document.getElementById('userCity'));" name="province" id="userProvince" class="location"> <select onchange="showcity(this.value, document.getElementById('userCity'));" name="province" id="userProvince" class="location">
<option value="">--请选择省份--</option> <option value="">--请选择省份--</option>
<option value="北京">北京</option> <option value="北京">北京</option>
@ -382,7 +382,7 @@
<legend onclick="toggleFieldset(this);"> <legend onclick="toggleFieldset(this);">
<%= l(:field_mail_notification) %> <%= l(:field_mail_notification) %>
</legend> </legend>
<div style="padding-left: 8px;"> <!-- modified by ming --> <div style="padding-left: 3px;"> <!-- modified by ming -->
<p style="width:380px;"> <p style="width:380px;">
<%= render :partial => 'users/mail_notifications' %> <%= render :partial => 'users/mail_notifications' %>
</p></div> </p></div>

View File

@ -18,7 +18,7 @@
<div class="ur_editor checkbox"> <div class="ur_editor checkbox">
<div class="ur_editor_title"> <div class="ur_editor_title">
<input type="hidden" name="question_type" value="<%= poll_question.question_type%>"/> <input type="hidden" name="question_type" value="<%= poll_question.question_type%>"/>
<input maxlength="250" class="ur_question_title" type="text" name="poll_questions_title" id="poll_questions_title_<%=poll_question.id%>" placeholder="请输入选题标题" value="<%= poll_question.question_title%>"/> <input maxlength="250" class="ur_question_title" type="text" name="poll_questions_title" id="poll_questions_title_<%=poll_question.id%>" placeholder="请输入选题标题" value="<%= poll_question.question_title%>"/>
<input type="checkbox" name="is_necessary" id="is_necessary_<%=poll_question.id%>" value="true" <%= poll_question.is_necessary == 1 ? "checked" : ""%>/> <input type="checkbox" name="is_necessary" id="is_necessary_<%=poll_question.id%>" value="true" <%= poll_question.is_necessary == 1 ? "checked" : ""%>/>
<label>必答</label> <label>必答</label>
</div> </div>

View File

@ -7,7 +7,7 @@
<textarea name="polls_description" maxlength="300" id="polls_description" class="textarea_editor"><%= @poll.polls_description%></textarea> <textarea name="polls_description" maxlength="300" id="polls_description" class="textarea_editor"><%= @poll.polls_description%></textarea>
</div> </div>
<div class="ur_editor_footer"> <div class="ur_editor_footer">
<a class="btn_submit" data-button="ok" onclick="$(this).parent().parent().parent().submit();">确定</a> <a class="btn_submit" data-button="ok" onclick="pollsSubmit($(this));">确定</a>
<a class="btn_cancel" data-button="cancel" onclick="pollsCancel();">取消</a> <a class="btn_cancel" data-button="cancel" onclick="pollsCancel();">取消</a>
</div> </div>
<div class="cl"></div> <div class="cl"></div>

View File

@ -3,7 +3,7 @@
<div class="ur_editor_title"> <div class="ur_editor_title">
<label>问题:&nbsp;&nbsp;</label> <label>问题:&nbsp;&nbsp;</label>
<input type="hidden" name="question_type" value="2"/> <input type="hidden" name="question_type" value="2"/>
<input maxlength="250" class="ur_question_title" type="text" name="poll_questions_title" id="poll_questions_title" placeholder="请输入多选题标题"/> <input maxlength="250" class="ur_question_title" type="text" name="poll_questions_title" id="poll_questions_title" placeholder="请输入多选题标题"/>
<input type="checkbox" name="is_necessary" value="true" checked/> <input type="checkbox" name="is_necessary" value="true" checked/>
<label>必答</label> <label>必答</label>
</div> </div>

View File

@ -0,0 +1,68 @@
<% has_commit = has_commit_poll?(poll.id ,User.current)%>
<% poll_name = poll.polls_name.empty? ? l(:label_poll_new) : poll.polls_name%>
<li title="<%= poll.polls_name %>">
<% if @is_teacher %>
<% if has_commit %>
<sapn class="polls_title fl">
<%= link_to poll_name, poll_result_poll_path(poll.id), :class => "polls_title polls_title_w fl", :style => "max-width: 550px;width: 550px;" %>
</sapn>
<% else %>
<%= link_to poll_name, poll_path(poll.id), :class => "polls_title polls_title_w fl" %>
<% end %>
<% else %>
<% if has_commit && poll.polls_status == 2 %>
<%= 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_name, poll_path(poll.id), :class => "polls_title polls_title_w fl", :style => "max-width: 550px;width: 550px;" %>
<% end %>
<% end %>
</li>
<% if !@is_teacher && has_commit && poll.polls_status == 2%>
<li class="pollsbtn_tip fl ml5">已答</li>
<% end %>
<%if @is_teacher%>
<% if poll.polls_status == 1 %>
<li class="pollsbtn fl ml10 pollsbtn_grey">统计结果</li>
<% elsif poll.polls_status == 2%>
<li>
<%= link_to l(:label_statistical_results), statistics_result_poll_path(poll.id), :class => "pollsbtn fl ml10"%>
</li>
<% end%>
<% end%>
<li>
<%if @is_teacher %>
<% if poll.polls_status == 1 %>
<a href="#" class="pollsbtn btn_pu fl ml5" onclick="poll_submit(<%= poll.id%>,<%= poll.polls_name.length %>);">发布问卷</a>
<% elsif poll.polls_status == 2%>
<a href="#" class="pollsbtn btn_de fl ml5" onclick="republish_poll(<%= poll.id%>);">取消发布</a>
<% end%>
<% end%>
</li>
<li>
<% if @is_teacher %>
<!--新建状态的问卷可删除-->
<%= link_to(l(:button_delete), poll,
method: :delete, :confirm => l(:text_are_you_sure), :remote => true, :class => "polls_de fr ml20 mr10") %>
<% end%>
</li>
<li>
<% if @is_teacher%>
<% if poll.polls_status == 1 %>
<%= link_to l(:button_edit), edit_poll_path(poll.id), :class => "polls_de fr ml20"%>
<% elsif poll.polls_status == 2%>
<li class="polls_de_grey fr ml20">编辑</li>
<% end%>
<% end%>
</li>
<!--<li>-->
<!--<% if @is_teacher && poll.polls_status == 2%>-->
<!--<a class="polls_de fr ml20" onclick="republish_poll(<%= poll.id%>);">-->
<!--取消发布-->
<!--</a>-->
<!--<% end %>-->
<!--</li>-->
<li class="polls_date fr mr10">
<%= format_time poll.created_at%>
</li>

View File

@ -25,6 +25,10 @@
} }
//问卷头 //问卷头
function pollsCancel(){$("#polls_head_edit").hide();$("#polls_head_show").show();} function pollsCancel(){$("#polls_head_edit").hide();$("#polls_head_show").show();}
function pollsSubmit(doc){
var title = $.trim($("#polls_title").val());
if(title.length == 0){alert("问卷标题不能为空");}else{doc.parent().parent().parent().submit();}
}
function pollsEdit(){$("#polls_head_edit").show();$("#polls_head_show").hide();} function pollsEdit(){$("#polls_head_edit").show();$("#polls_head_show").hide();}
// //
function pollQuestionCancel(question_id){ function pollQuestionCancel(question_id){
@ -57,15 +61,22 @@
function poll_submit() function poll_submit()
{ {
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'poll_submit', locals: { poll: @poll}) %>'); var title = $.trim($("#polls_name_h").html());
showModal('ajax-modal', '310px'); if(title.length == 0)
$('#ajax-modal').css('height','110px'); {
$('#ajax-modal').siblings().remove(); alert("问卷标题不能为空");
$('#ajax-modal').before("<span style='float: right;cursor:pointer;'>" + }
"<a href='#' onclick='clickCanel();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>"); else{
$('#ajax-modal').parent().removeClass("alert_praise"); $('#ajax-modal').html('<%= escape_javascript(render :partial => 'poll_submit', locals: { :poll => @poll,:is_remote => false}) %>');
$('#ajax-modal').parent().css("top","").css("left",""); showModal('ajax-modal', '310px');
$('#ajax-modal').parent().addClass("popbox_polls"); $('#ajax-modal').css('height','115px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;'>" +
"<a href='#' onclick='clickCanel();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
$('#ajax-modal').parent().removeClass("alert_praise");
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("popbox_polls");
}
} }
</script> </script>
</head> </head>

View File

@ -0,0 +1,32 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function clickCanel(){hideModal("#popbox02");}
</script>
</head>
<body>
<div id="popbox02">
<div class="upload_con">
<div class="upload_box">
<p class="polls_box_p">
问卷取消发布后学生提交的问卷答案将会被清空,
<br />
是否确定取消发布该问卷?
</p>
<div class="polls_btn_box">
<%= link_to "确 定",republish_poll_poll_path(poll.id), :class => "upload_btn", :onclick => "clickCanel();" %>
<a class="upload_btn upload_btn_grey" onclick="clickCanel();">
取&nbsp;&nbsp;消
</a>
</div>
<div class="cl"></div>
</div>
</div>
</div>
</body>
</html>

View File

@ -2,18 +2,6 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript"> <script type="text/javascript">
function clickPublishPoll()
{
hideModal("#popbox02");
$.ajax({
type: "GET",
url: "<%= publish_poll_poll_path(poll.id)%>",
data: 'text',
success: function (data) {
}
});
}
function clickCanel(){hideModal("#popbox02");} function clickCanel(){hideModal("#popbox02");}
</script> </script>
</head> </head>
@ -27,16 +15,14 @@
是否确定发布该问卷? 是否确定发布该问卷?
</p> </p>
<div class="polls_btn_box"> <div class="polls_btn_box">
<%= link_to "确 定",publish_poll_poll_path(poll.id), :class => "upload_btn", :onclick => "clickCanel();" %> <%= link_to "确 定",publish_poll_poll_path(poll.id,:is_remote => is_remote), :class => "upload_btn", :onclick => "clickCanel();" %>
<a class="upload_btn upload_btn_grey" onclick="clickCanel();"> <a class="upload_btn upload_btn_grey" onclick="clickCanel();">
取&nbsp;&nbsp;消 取&nbsp;&nbsp;消
</a> </a>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -0,0 +1,26 @@
<li class="ur_question_item checkbox">
<div class="ur_title">
<span class="title_index">
第<%= poll_question.question_number%>题:
</span>
<%= poll_question.question_title %>
<span class="title_index">[多选题]</span>
<%if poll_question.is_necessary == 1%>
<span class="ur_required" title="必答">*</span>
<%end%>
</div>
<div class="cl"></div>
<div class="ur_inputs">
<table class="ur_table">
<tbody>
<% poll_question.poll_votes.where("user_id = #{User.current.id}").each do |answer|%>
<tr>
<td>
<%= answer.poll_answer.answer_text %>
</td>
</tr>
<% end%>
</tbody>
</table>
</div>
</li><!--多选题 end-->

View File

@ -0,0 +1,27 @@
<li class="ur_question_item radio">
<div class="ur_title">
<span class="title_index">
第<%= poll_question.question_number%>题:
</span>
<%= poll_question.question_title %>
<span class="title_index">[单选题]</span>
<%if poll_question.is_necessary == 1%>
<span class="ur_required" title="必答">*</span>
<%end%>
</div>
<div class="cl"></div>
<div class="ur_inputs">
<table class="ur_table" >
<tbody>
<% poll_question.poll_votes.where("user_id = #{User.current.id}").each do |answer|%>
<tr>
<td>
<%= answer.poll_answer.answer_text %>
</td>
</tr>
<% end%>
</tbody>
</table>
</div>
</li><!--单选题 end-->

View File

@ -0,0 +1,20 @@
<li class="ur_question_item textarea">
<div class="ur_preview">
<div class="ur_title">
<span class="title_index">
第<%= poll_question.question_number%>题:
</span>
<%= poll_question.question_title %>
<span class="title_index">[多行主观]</span>
<%if poll_question.is_necessary == 1%>
<span class="ur_required" title="必答">*</span>
<%end%>
</div>
<div class="cl"></div>
<div class="ur_inputs">
<p>
<%= get_anwser_vote_text(poll_question.id,User.current.id).html_safe%>
</p>
</div>
</div>
</li><!--多行输入 end-->

View File

@ -0,0 +1,18 @@
<li class="ur_question_item text">
<div class="ur_title">
<span class="title_index">
第<%= poll_question.question_number%>题:
</span>
<%= poll_question.question_title %>
<span class="title_index">[单行主观]</span>
<%if poll_question.is_necessary == 1%>
<span class="ur_required" title="必答">*</span>
<%end%>
</div>
<div class="cl"></div>
<div class="ur_inputs">
<p>
<%= get_anwser_vote_text poll_question.id,User.current.id%>
</p>
</div>
</li><!--当行输入 end-->

View File

@ -1,4 +1,62 @@
<%= stylesheet_link_tag 'polls', :media => 'all' %> <%= stylesheet_link_tag 'polls', :media => 'all' %>
<script type="text/javascript">
function republish_poll(poll_id)
{
$('#ajax-modal').html("<div id='popbox02'>" +
"<div class='upload_con'>" +
"<div class='upload_box'>" +
"<p class='polls_box_p'>取消发布后问卷统计结果将会被清空<br />是否确定取消发布该问卷?</p>" +
"<div class='polls_btn_box'>" +
"<a href='/poll/"+ poll_id +"/republish_poll' class='upload_btn' onclick='clickCanel();' data-remote='true'>确&nbsp;&nbsp;定</a>" +
"<a class='upload_btn upload_btn_grey' onclick='clickCanel();'>取&nbsp;&nbsp;消</a>" +
"</div>" +
"<div class='cl'></div>" +
"</div>" +
"</div>" +
"</div>");
showModal('ajax-modal', '310px');
$('#ajax-modal').css('height','115px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;'>" +
"<a onclick='clickCanel();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
$('#ajax-modal').parent().removeClass("alert_praise");
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("popbox_polls");
}
function clickCanel(){hideModal("#popbox02");}
function poll_submit(poll_id,poll_name)
{
if(poll_name == 0)
{
alert("问卷标题不能为空");
}
else
{
$('#ajax-modal').html("<div id='popbox02'>" +
"<div class='upload_con'>" +
"<div class='upload_box'>" +
"<p class='polls_box_p'>问卷发布后将不能对问卷进行修改,<br />是否确定发布该问卷?</p>" +
"<div class='polls_btn_box'>" +
"<a href='/poll/"+ poll_id +"/publish_poll' class='upload_btn' onclick='clickCanel();' data-remote='true'>确&nbsp;&nbsp;定</a>" +
"<a class='upload_btn upload_btn_grey' onclick='clickCanel();'>取&nbsp;&nbsp;消</a>" +
"</div>" +
"<div class='cl'></div>" +
"</div>" +
"</div>" +
"</div>");
showModal('ajax-modal', '310px');
$('#ajax-modal').css('height','115px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;'>" +
"<a href='#' onclick='clickCanel();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
$('#ajax-modal').parent().removeClass("alert_praise");
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("popbox_polls");
}
}
</script>
<div class="polls_content" id="polls" style="width:677px;"> <div class="polls_content" id="polls" style="width:677px;">
<div class="polls_head"> <div class="polls_head">
<h2>所有问卷 <h2>所有问卷
@ -12,44 +70,7 @@
<div class="polls_list"> <div class="polls_list">
<% @polls.each do |poll|%> <% @polls.each do |poll|%>
<ul id="polls_<%= poll.id %>"> <ul id="polls_<%= poll.id %>">
<li title="<%= poll.polls_name %>"> <%= render :partial => 'poll', :locals => {:poll => poll} %>
<% if @is_teacher %>
<% if has_commit_poll?(poll.id ,User.current) %>
<sapn class="polls_title fl"> <%= poll.polls_name %></sapn>
<% else %>
<%= link_to poll.polls_name, poll_path(poll.id), :class => "polls_title fl" %>
<% end %>
<% else %>
<% if has_commit_poll?(poll.id ,User.current) && poll.polls_status == 2 %>
<sapn class="polls_title fl" >
<%= poll.polls_name %>
</sapn>
<% elsif (!has_commit_poll?(poll.id ,User.current)) && poll.polls_status == 2 %>
<%= link_to poll.polls_name, poll_path(poll.id), :class => "polls_title fl" %>
<% end %>
<% end %>
</li>
<li>
<%if @is_teacher && poll.polls_status == 2%>
<%= link_to l(:label_statistical_results), statistics_result_poll_path(poll.id), :class => "pollsbtn fl ml10"%>
<% end%>
</li>
<li>
<% if @is_teacher %>
<!--新建状态的问卷可删除-->
<%= link_to(l(:button_delete), poll,
method: :delete, :confirm => l(:text_are_you_sure), :remote => true, :class => "polls_de fr ml20 mr10") %>
<% end%>
</li>
<li>
<% if @is_teacher && poll.polls_status == 1%>
<!--新建状态的问卷可编辑-->
<%= link_to l(:button_edit), edit_poll_path(poll.id), :class => "polls_de fr ml20"%>
<% end%>
</li>
<li class="polls_date fr">
<%= format_time poll.created_at%>
</li>
</ul> </ul>
<div class="cl"></div> <div class="cl"></div>
<% end%> <% end%>

View File

@ -0,0 +1,36 @@
<%= stylesheet_link_tag 'polls', :media => 'all' %>
<div class="polls_content polls_box">
<div class="ur_page_head" >
<h1 class="ur_page_title">
<%= @poll.polls_name.empty? ? l(:label_poll_new) : @poll.polls_name %>
</h1>
<p class="ur_prefix_content">
<%= @poll.polls_description%>
</p>
</div>
<div class="ur_card">
<ol class="ur_questions">
<% @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%>
</ol>
</div> <!--ur_cards end-->
<div class="cl"></div>
<!-- 分页 -->
<div class="polls_content" id="polls">
<ul class="wlist">
<%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%>
</ul>
<div class="cl"></div>
</div>
</div><!--问卷内容end-->

View File

@ -0,0 +1,2 @@
$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
alert("发布成功");

View File

@ -0,0 +1,2 @@
$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
alert("取消成功");

View File

@ -2,34 +2,43 @@
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><%= l(:label_poll_result) %></title> <title>
<%= l(:label_poll_result) %>
</title>
<%= stylesheet_link_tag 'polls', :media => 'all' %> <%= stylesheet_link_tag 'polls', :media => 'all' %>
</head> </head>
<body> <body>
<div class="polls_content polls_box" id="polls"> <div class="polls_content polls_box" id="polls">
<div class="ur_page_head" > <div class="ur_page_head" >
<h1 class="ur_page_title"><%= @poll.polls_name %> <%= l(:label_poll) %></h1> <h1 class="ur_page_title">
<%= @poll.polls_name %>
<%= l(:label_poll) %>
</h1>
</div> </div>
<div class=""> <div>
<% @poll_questions.each do |poll_question| %> <% @poll_questions.each do |poll_question| %>
<ol> <ol style="margin-left: -40px;">
<li class="ur_question_item"> <li class="ur_question_item">
<div class="ur_title_result"> <div class="ur_title_result">
<span class="title_index">第<%= poll_question.question_number %>题:</span><%= poll_question.question_title %> <span class="title_index">[<%= options_show(poll_question.question_type) %>]</span> <span class="title_index">
</div> 第<%= poll_question.question_number %>题:
<% if poll_question.question_type == 1 || poll_question.question_type == 2 %> </span>
<%= render :partial =>'choice_show', :locals =>{ :poll_question => poll_question } %> <%= poll_question.question_title %>
<% else %> <span class="title_index">
<%= render :partial =>'quiz_answers', :locals =>{ :poll_question => poll_question } %> [<%= options_show(poll_question.question_type) %>]
<% end %> </span>
</li> </div>
</ol> <% if poll_question.question_type == 1 || poll_question.question_type == 2 %>
<% end %> <%= render :partial =>'choice_show', :locals =>{ :poll_question => poll_question } %>
<ul class="wlist"> <% else %>
<%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%> <%= render :partial =>'quiz_answers', :locals =>{ :poll_question => poll_question } %>
</ul> <% end %>
<div class="cl"></div> </li>
<div class="ur_buttons"></div> </ol>
<% end %>
<ul class="wlist">
<%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%>
</ul>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
</div> </div>

View File

@ -0,0 +1,83 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>快速进入项目通道</title>
<style>
#popbox{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal;}
#popbox div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span{ margin:0; padding:0;}
#popbox div,img,tr,td{ border:0;}
#popbox table,tr,td{border:0; cellspacing:0; cellpadding:0;}
#popbox ul,li{ list-style-type:none}
#popbox .cl{ clear:both; overflow:hidden; }
#popbox a{ text-decoration:none; }
#popbox a:hover{ }
.alert_box {width:400px;height:200px;position:fixed;z-index:1002;left:50%;top:40%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; padding:5px; overflow:auto; }
#popbox{width:400px;height:200px;}
.alert .C{width:388px;height:200px;position:absolute;left:5px;top:5px; }
.C_top{ margin-top:20px; width:368px; height:100px; background:#e9e9e9; padding:0px 60px !important; }
.C_top h2{ color:#1c1d1d; font-size:24px; font-style:normal; font-weight:normal;}
.C_top p{ color:#a9aaaa; line-height:22px;}
.C_form{ margin:20px 0 0 60px;}
.C_form ul li{ font-size:14px; color:#3f3a39; line-height:30px; padding-left: 60px;}
.C_form ul li input{ margin-left:20px; border:0px; border:1px solid #e1e1e1; color:#898989; padding-left:5px; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; padding: 0 !important; }
.C_form ul li.mB5{ color:#898989; font-size:12px; padding-left:150px;}
.width190{ width:190px; height:26px; border-color:#e1e1e1;}
.C_form a{ font-size:12px; color:#15bccf; float:left; display:block; height:40px; width:200px; margin-top:25px;}
.C_form a:hover{ text-decoration:underline;}
.C_form a.btn{ display:block; width:100px; height:36px; padding-top:4px; text-align: center; background:#15bccf; color:#fff; font-size:14px; margin:20px 20px 0 95px;}
.C_form a.btn:hover{ background:#ff821d;}
</style>
<script type="text/javascript">
function submit_form(obj)
{
hideModal(obj);
$("#new-watcher-form").submit();
alert("申请成功");
}
function hidden_join_course_form()
{
hideModal($("#popbox"));
}
</script>
</head>
<body>
<div id="popbox">
<div class="C" >
<div class="C_top">
<h2>快速进入项目通道</h2>
<p>只要持有项目的ID就可快速申请加入所在项目。项目页面搜索不到的私有项目只能从此通道进入哦</p>
</div>
<div class="C_form">
<%= form_tag({:controller => 'applied_project',
:action => 'applied_join_project'},
:remote => true,
:method => :post,
:id => 'new-watcher-form') do %>
<ul>
<li style="padding-top: 15px;">
<span class="tips">项&nbsp;目&nbsp;ID</span>
<input type="hidden" name="user_id" value="<%= User.current.id%>">
<input class=" width190" name="project_id" id="project_id" type="text" value="" >
<input type="text" style="display: none"/>
</li>
<li class="mB5">项目ID是所在项目网址中显示的序号</li>
<li>
<a href="#" class="btn" style="margin-left: 50px;" onclick="submit_form(this);">
<%= l(:label_new_join) %>
</a>
<a href="#" class="btn" style="margin-left: 20px;" onclick="hideModal(this);">
<%= l(:button_cancel)%>
</a>
</li>
</ul>
<% end%>
</div>
</div><!---- C end---->
</div>
</body>
</html>

View File

@ -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("<span style='float: right;cursor:pointer;padding-left: 513px;'>" +
"<a href='#' onclick='hidden_join_course_form();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
$('#ajax-modal').parent().removeClass("alert_praise");
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("alert_box");

View File

@ -1,5 +1,5 @@
<p> <p>
<%= label_tag "user_mail_notification", l(:description_user_mail_notification), :class => "hidden-for-sighted_bak" %> <%= label_tag "user_mail_notification", l(:description_user_mail_notification), :class => "hidden-for-sighted_bak" , :style=> 'margin-right: 5px;'%>
<%= select_tag( <%= select_tag(
'user[mail_notification]', 'user[mail_notification]',
options_for_select( options_for_select(

View File

@ -122,6 +122,7 @@
else else
course_term = "春季学期" course_term = "春季学期"
end%> end%>
<%break if Time.new.strftime("%Y").to_i - year_now >= 2%>
<% all_new_hot_course += find_all_new_hot_course(course_count-all_new_hot_course.count, @school_id, year_now, course_term)%> <% all_new_hot_course += find_all_new_hot_course(course_count-all_new_hot_course.count, @school_id, year_now, course_term)%>
<% end%> <% end%>
<%= render :partial => 'course_list', :locals => {:course_list => all_new_hot_course} %> <%= render :partial => 'course_list', :locals => {:course_list => all_new_hot_course} %>
@ -152,6 +153,7 @@
else else
course_term = "春季学期" course_term = "春季学期"
end%> end%>
<%break if Time.new.strftime("%Y").to_i - year_now >= 2%>
<% all_new_hot_course += find_all_new_hot_course(9-(all_new_hot_course.count + cur_school_course.count), @school_id, year_now, course_term)%> <% all_new_hot_course += find_all_new_hot_course(9-(all_new_hot_course.count + cur_school_course.count), @school_id, year_now, course_term)%>
<% end%> <% end%>
<%= render :partial => 'course_list', :locals => {:course_list => all_new_hot_course} %> <%= render :partial => 'course_list', :locals => {:course_list => all_new_hot_course} %>

View File

@ -66,6 +66,9 @@
:course => 0, :course => 0,
:project_type =>( @project_type||=0)}, :project_type =>( @project_type||=0)},
:class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %> :class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %>
&nbsp;&nbsp;&nbsp;&nbsp;
<%= link_to l(:label_join_project), join_project_projects_path ,:remote => true, :class => 'icon icon-add' %>
&nbsp;&nbsp;&nbsp;&nbsp;
<% end %> <% end %>
</span> </span>
<div class="d-p-projectlist-box"> <div class="d-p-projectlist-box">

View File

@ -16,6 +16,21 @@ module RedmineApp
# Application configuration should go into files in config/initializers # Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded. # -- all .rb files in that directory are automatically loaded.
# verifier if email is real
# EmailVerifier.config do |config|
# config.verifier_email = "lizanle521@126.com"
# end
config.generators do |g|
g.test_framework :rspec,
fixtures: true,
view_specs: false,
helper_specs: false,
routing_specs: false,
controller_specs: true,
request_specs: false
g.fixture_replacement :factory_girl, dir: "spec/factories"
end
# Custom directories with classes and modules you want to be autoloadable. # Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/lib) config.autoload_paths += %W(#{config.root}/lib)

View File

@ -92,7 +92,7 @@ default:
domain: smtp.126.com domain: smtp.126.com
authentication: :plain authentication: :plain
user_name: "alanlong9278@126.com" user_name: "alanlong9278@126.com"
password: "alanlong8788786" password: 'alanlong8788786'
# Absolute path to the directory where attachments are stored. # Absolute path to the directory where attachments are stored.
# The default is the 'files' directory in your Redmine instance. # The default is the 'files' directory in your Redmine instance.

View File

@ -13,7 +13,7 @@ RedmineApp::Application.configure do
config.action_controller.perform_caching = false config.action_controller.perform_caching = false
# Don't care if the mailer can't send # Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false config.action_mailer.raise_delivery_errors = true
config.active_support.deprecation = :log config.active_support.deprecation = :log
end end

View File

@ -71,6 +71,14 @@ en:
one: "almost 1 year" one: "almost 1 year"
other: "almost %{count} years" other: "almost %{count} years"
errors:
messages:
email_verifier:
email_not_real: must point to a real mail account
out_of_mail_server: appears to point to dead mail server
no_mail_server: appears to point to domain which doesn't handle e-mail
failure: could not be checked if is real
exception: could not be sent
number: number:
format: format:
separator: "." separator: "."
@ -130,6 +138,9 @@ en:
circular_dependency: "This relation would create a circular dependency" circular_dependency: "This relation would create a circular dependency"
cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks" cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
actionview_instancetag_blank_option: Please select actionview_instancetag_blank_option: Please select
attachment_all: "All" attachment_all: "All"
@ -224,7 +235,25 @@ en:
mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}." mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}." mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
# edit by meng
# emailer
mail_issue_greetings: "Dear user , Greetings from Trustie"
mail_issue_footer: "Unsubscribe this message?"
mail_issue_title_userin: "in"
mail_issue_title_active: "has a new activity which relevants to you , please pay more attention to this!"
mail_issue_subject: "Title"
mail_issue_content: "Content"
mail_issue_sent_from: "From"
mail_issue_from_project: "project issue"
mail_issue_attachments: "Attachments"
mail_issue_reply: "Want reply"
#end
# modified by meng
label_file_upload: Resource files
label_file_upload_error_messages: "Upload error, please check your network environment, and refresh the page to upload."
button_confirm: Confirm
# end
field_name: Name field_name: Name
field_description: Description field_description: Description
field_summary: Summary field_summary: Summary
@ -320,7 +349,7 @@ en:
field_identity_url: OpenID URL field_identity_url: OpenID URL
field_content: Content field_content: Content
field_group_by: Group results by field_group_by: Group results by
field_sharing: Sharing field_sharing: Sharinglable_hot_course
field_parent_issue: Parent task field_parent_issue: Parent task
field_member_of_group: "Assignee's group" field_member_of_group: "Assignee's group"
field_assigned_to_role: "Assignee's role" field_assigned_to_role: "Assignee's role"
@ -511,6 +540,70 @@ en:
project_module_boards: Forums project_module_boards: Forums
project_module_calendar: Calendar project_module_calendar: Calendar
project_module_gantt: Gantt project_module_gantt: Gantt
#edit by meng
lable_hot_course: Hot projects
lable_hot_projects: Active courses
lable_user_active: User movements
lable_bar_active: Bar posts
label_project_score: Score
label_course_join_student: Join a course
label_join_project: Join a project
label_contest_modify_settings: Configuration
bale_news_notice: Add a notification
label_field_correct: correct input
label_work_description_lengthlimit: less than 500 characters
label_create_new_projects: Create a project
label_work_scores_people: The total number of users given scores
label_project_new_description: A project can be used to do anything that requires distributed collaboration
label_project_grade: Score
label_user_for_project_grade: Score
label_relation_files: Select an existing resource
label_my_brief_introduction: How are feeling today? Leave your footprints ~
label_submit: Submit
label_tags_course_name: Course Title
label_new_course_password: Password
label_new_course_description: Description
field_open_student: Student list is public?
label_course_board: Forum
label_course_open_student_info: (Tick as "open list of students," if not open, the external person couldn't see the list of students)
label_teacher_list: Teacher list
label_student_list: Student list
label_export_excel: Export list
label_course_organizers: Institute
label_poll: Questionnaire
field_open_anonymous_evaluation: Use anonymous mutual-evaluation
field_evaluation_num: Number of anonymous works sent to each student
label_edit_homework: Update homework
label_homework_list: Work list
label_teacher_score: Teacher's score
label_time: Commit time
label_student_score: Student's score
label_without_score: No evaluated
label_homework_description: Description
label_responses: Messages
lable_has_commit_homework: You have submitted your work
label_user_create_project_homework: created the task
label_commit_limit: Expired but can submit your work
label_current_group: Current group
project_module_dts: DTS Test tool
label_module_share: DTS Test tool
field_dts_test: DTS Test tool
label_technical_support: Support
label_feedback: Feedback
#end
label_user: User label_user: User
label_user_plural: Users label_user_plural: Users
@ -557,6 +650,8 @@ en:
label_document_new: New document label_document_new: New document
label_document_plural: Documents label_document_plural: Documents
label_document_added: Document added 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_document_public_info: "If you don't choose public, only the project's members can see the document."
label_role: Role label_role: Role
label_role_plural: Roles label_role_plural: Roles
@ -591,7 +686,7 @@ en:
label_home: Home label_home: Home
label_my_page: My page label_my_page: My page
label_my_account: My account label_my_account: My account
label_my_message: My messages label_my_message: Msgs
label_my_projects: My projects label_my_projects: My projects
label_my_page_block: My page block label_my_page_block: My page block
label_administration: Administration label_administration: Administration
@ -1222,6 +1317,7 @@ en:
#fq #fq
button_leave_meassge: Submit button_leave_meassge: Submit
button_clear_meassge: Reset
label_leave_message_to: leave %{name} a message label_leave_message_to: leave %{name} a message
label_leave_message: Message content label_leave_message: Message content
label_message: message board label_message: message board
@ -1323,9 +1419,9 @@ en:
label_leave_others_message: leave message to him/her label_leave_others_message: leave message to him/her
label_leave_a_message: Leave him/her a message label_leave_a_message: Leave him/her a message
label_leave_your_message: Leave a message to you label_leave_your_message: Leave a message to you
label_new_activities: ' has new activity in' # modified by bai label_new_activities: ' has a new activity in' # modified by bai
label_new_activity: ' has new activity in' label_new_activity: ' has a new activity in'
label_i_new_activity: ' have new activity in' label_i_new_activity: ' have a new activity in'
label_create_project: had participated in label_create_project: had participated in
label_praise: praise label_praise: praise
label_cancel_praise: cancel praise label_cancel_praise: cancel praise
@ -1604,7 +1700,7 @@ en:
label_bids_form_contest_new_description: Enterprise or college can release a contest here. label_bids_form_contest_new_description: Enterprise or college can release a contest here.
label_contest_name: Input the name of the contest label_contest_name: Input the name of the contest
label_contest_description: Contentdescription your contest label_contest_description: Contentdescription your contest
label_main_teacher: Main teacher label_main_teacher: Lecturer
label_main_term: Term label_main_term: Term
label_teacher_work_unit: Position label_teacher_work_unit: Position
label_course_overview: Status label_course_overview: Status
@ -1671,7 +1767,7 @@ en:
label_reply_empty: Reply Cann't Empty. label_reply_empty: Reply Cann't Empty.
label_setup_time: Start date label_setup_time: Start date
label_endup_time: Over date label_endup_time: Over date
label_class_period: Class hour label_class_period: Lessons
label_class_hour: period label_class_hour: period
label_activity_time: publish date label_activity_time: publish date

View File

@ -2,6 +2,10 @@
# Chinese (China) translations for Ruby on Rails # Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho) # by tsechingho (http://github.com/tsechingho)
zh: zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl) # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr direction: ltr
jquery: jquery:
@ -30,6 +34,17 @@ zh:
- :month - :month
- :day - :day
errors:
messages:
email_verifier:
email_not_real: 必须指定一个真实的邮箱地址
out_of_mail_server: 指向了一个已停用的邮箱服务器
no_mail_server: 域名地址没有邮件功能
failure: 邮箱地址不能被验证
exception: 邮箱不能发送成功
time: time:
formats: formats:
default: "%Y年%b%d日 %A %H:%M:%S" default: "%Y年%b%d日 %A %H:%M:%S"
@ -137,6 +152,8 @@ zh:
not_same_project: "不属于同一个项目" not_same_project: "不属于同一个项目"
circular_dependency: "此关联将导致循环依赖" circular_dependency: "此关联将导致循环依赖"
cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务" cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务"
groupname_repeat: "该班名已存在"
actionview_instancetag_blank_option: 请选择 actionview_instancetag_blank_option: 请选择
@ -233,6 +250,25 @@ zh:
mail_body_wiki_content_added: "'%{id}' wiki页面已由 %{author} 添加。" mail_body_wiki_content_added: "'%{id}' wiki页面已由 %{author} 添加。"
mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新。" mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新。"
mail_body_wiki_content_updated: "'%{id}' wiki页面已由 %{author} 更新。" mail_body_wiki_content_updated: "'%{id}' wiki页面已由 %{author} 更新。"
# edit by meng
# emailer
mail_issue_greetings: "亲爱的Trustie用户您好"
mail_issue_footer: "退订该邮件!"
mail_issue_title_userin: "在"
mail_issue_title_active: "中有了一个与您相关的最新活动,请您关注!"
mail_issue_subject: "标题:"
mail_issue_content: "内容:"
mail_issue_sent_from: "来源:"
mail_issue_from_project: "项目问题跟踪"
mail_issue_attachments: "附件:"
mail_issue_reply: "我要回复"
#end
# modified by meng
label_file_upload: 资源文件
label_file_upload_error_messages: "上传出现错误,请您检查您的网络环境,并刷新页面重新上传。"
button_confirm: 确认
# end
field_name: 名称 field_name: 名称
#added by huang #added by huang
field_tea_name: 教师 field_tea_name: 教师
@ -564,6 +600,9 @@ zh:
label_document_new: 新建文档 label_document_new: 新建文档
label_document_plural: 文档 label_document_plural: 文档
label_document_added: 文档已添加 label_document_added: 文档已添加
label_forum_message_added: 发帖成功
label_forum_add: 贴吧创建成功
label_message_reply: 回帖人
label_document_public_info: (打钩为公开,不打钩则不公开,若不公开,仅项目成员可见该文档。) label_document_public_info: (打钩为公开,不打钩则不公开,若不公开,仅项目成员可见该文档。)
label_role: 角色 label_role: 角色
label_role_plural: 角色 label_role_plural: 角色
@ -748,7 +787,7 @@ zh:
label_news_view_all: 查看所有新闻 label_news_view_all: 查看所有新闻
label_news_added: 新闻已添加 label_news_added: 新闻已添加
label_settings: 配置 label_settings: 配置
label_overview: 项目动态 label_overview: 近期动态
label_course_overview: "课程动态" label_course_overview: "课程动态"
label_question_student: 作业交流 #bai label_question_student: 作业交流 #bai
label_homework_commit: 提交作业 #huang label_homework_commit: 提交作业 #huang
@ -2110,7 +2149,7 @@ zh:
excel_homework_list: 作品列表 excel_homework_list: 作品列表
excel_been_rated: 已评 excel_been_rated: 已评
excel_not_rated: 未评 excel_not_rated: 未评
label_export_excel: 导出Excel label_export_excel: 导出列表
label_softapplication: 应用软件 label_softapplication: 应用软件
label_attending_contest: 参加竞赛 label_attending_contest: 参加竞赛
@ -2265,4 +2304,7 @@ zh:
label_answer: 答案: label_answer: 答案:
label_poll_answer_valid_result: 以上为有效问答题答案! label_poll_answer_valid_result: 以上为有效问答题答案!
label_answer_total: 总计: label_answer_total: 总计:
label_join_project: 加入项目
label_technical_support: 技术支持:
label_feedback: 意见反馈

View File

@ -65,6 +65,8 @@ RedmineApp::Application.routes.draw do
post 'create_poll_question' post 'create_poll_question'
post 'commit_poll' post 'commit_poll'
get 'publish_poll' get 'publish_poll'
get 'republish_poll'
get 'poll_result'
end end
collection do collection do
delete 'delete_poll_question' delete 'delete_poll_question'
@ -375,6 +377,10 @@ RedmineApp::Application.routes.draw do
match 'copy', :via => [:get, :post] match 'copy', :via => [:get, :post]
end end
collection do
match 'join_project', :via => [:get, :post]
end
#by young #by young
match '/member', :to => 'projects#member', :as => 'member', :via => :get match '/member', :to => 'projects#member', :as => 'member', :via => :get
match '/file', :to => 'projects#file', :as => 'file', :via => :get match '/file', :to => 'projects#file', :as => 'file', :via => :get

View File

@ -0,0 +1,11 @@
class AddInitialProducts < ActiveRecord::Migration
def up
Forum.create(:name =>"new forum", :description => "", :topic_count => "0",
:memo_count => "0", :last_memo_id =>"0", :creator_id =>"2",
:sticky =>"0", :locked =>"0")
end
def down
end
end

View File

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

View File

@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20150114022710) do ActiveRecord::Schema.define(:version => 20150123020615) do
create_table "activities", :force => true do |t| create_table "activities", :force => true do |t|
t.integer "act_id", :null => false t.integer "act_id", :null => false
@ -832,9 +832,10 @@ ActiveRecord::Schema.define(:version => 20150114022710) do
t.integer "user_id" t.integer "user_id"
t.datetime "published_at" t.datetime "published_at"
t.datetime "closed_at" t.datetime "closed_at"
t.datetime "created_at", :null => false t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
t.text "polls_description" t.text "polls_description"
t.integer "show_result", :default => 1
end end
create_table "praise_tread_caches", :force => true do |t| create_table "praise_tread_caches", :force => true do |t|

View File

@ -20,6 +20,8 @@ module Redmine
notifications << Notifiable.new('message_posted') notifications << Notifiable.new('message_posted')
notifications << Notifiable.new('wiki_content_added') notifications << Notifiable.new('wiki_content_added')
notifications << Notifiable.new('wiki_content_updated') notifications << Notifiable.new('wiki_content_updated')
notifications << Notifiable.new('forum_add')
notifications << Notifiable.new('forum_message_added', 'forum_add')
notifications notifications
end end
end end

BIN
public/images/blue_line.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -1,4 +1,4 @@
body{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal;} #member_of_course{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal;}
div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,textarea,form{ margin:0; padding:0;} div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,textarea,form{ margin:0; padding:0;}
div,img,tr,td,textarea,form{ border:0;} div,img,tr,td,textarea,form{ border:0;}
table,tr,td{border:0; cellspacing:0; cellpadding:0;} table,tr,td{border:0; cellspacing:0; cellpadding:0;}
@ -41,8 +41,9 @@ input.f_2 {
.st_search{ margin:10px 0;} .st_search{ margin:10px 0;}
.st_search span{ font-size:14px; font-weight:bold; color:#606060; margin-right:35px;} .st_search span{ font-size:14px; font-weight:bold; color:#606060; margin-right:35px;}
.st_search input{ border:1px solid #1c9ec7; height:20px; width:200px;} .st_search input{ border:1px solid #1c9ec7; height:20px; width:200px;}
a:hover.xls{ background: url('../images/icon_excel.gif') no-repeat scroll 1px 50% transparent !important; a:hover.xls{ /*background: url('../images/icon_excel.gif') no-repeat scroll 1px 50% transparent !important;*/
padding: 2px 0px 3px 16px; /*padding: 2px 0px 3px 16px;*/
background:#ffffff !important;
font-family:微软雅黑 !important; font-family:微软雅黑 !important;
font-size: 12px !important; font-size: 12px !important;
color: #136b3b !important; color: #136b3b !important;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1433,8 +1433,8 @@ ul.contest-notification-list li span{
} }
.xls { .xls {
background: url('../images/icon_excel.gif') no-repeat scroll 1px 50% transparent; /*background: url('../images/icon_excel.gif') no-repeat scroll 1px 50% transparent;*/
padding: 2px 0px 3px 16px; /*padding: 2px 0px 3px 16px;*/
font-family:微软雅黑 !important; font-family:微软雅黑 !important;
font-size: 12px !important; font-size: 12px !important;
color: #136b3b !important; color: #136b3b !important;

View File

@ -1,33 +1,33 @@
/* CSS Document */ /* CSS Document */
#polls{ font-size:12px; font-family:"微软雅黑","宋体" !important; line-height:1.9; background:#fff; font-style:normal;} #polls{ font-size:12px; font-family:"微软雅黑","宋体" !important; line-height:1.9; background:#fff; font-style:normal;}
div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span{ margin:0; padding:0;} div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span{ margin:0; padding:0;}
#polls div,img,tr,td{ border:0;} div,img,tr,td{ border:0;}
#polls table,tr,td{border:0; cellspacing:0; cellpadding:0;} table,tr,td{border:0; cellspacing:0; cellpadding:0;}
#polls ul,li{ list-style-type:none} ul,li{ list-style-type:none}
#polls .cl{ clear:both; overflow:hidden; } .cl{ clear:both; overflow:hidden; }
#polls a{ text-decoration:none; } a{ text-decoration:none; }
#polls a:hover{ text-decoration:underline; } a:hover{ text-decoration:underline; }
#polls .ml10{ margin-left:10px;} .ml10{ margin-left:10px;}
#polls .ml20{ margin-left:20px;} .ml20{ margin-left:20px;}
#polls .mr10{ margin-right:10px;} .mr10{ margin-right:10px;}
#polls .fl{ float: left;} .fl{ float: left;}
#polls .fr{ float:right;} .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{ 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 a{font-size:14px; color:#444444;font-weight:bold;}*/
.polls_btn span{ color:#15bed1; font-size:12px; font-weight:normal;} /*.polls_btn span{ color:#15bed1; font-size:12px; font-weight:normal;}*/
/*问卷列表*/ /*问卷列表*/
.polls_content{ width:615px;} .polls_content{ width:615px;padding-left: 6px;}
.polls_head{ width:677px; height:48px; background:#eaeaea;} .polls_head{ width:677px; height:48px; background:#eaeaea;}
.polls_head h2{ float:left; font-size:14px; color:#585858; margin:11px 0 0 10px;} .polls_head h2{ float:left; font-size:14px; color:#585858; margin:11px 0 0 10px;}
.polls_head span{ font-weight:normal; color:#15bccf;} .polls_head span{ font-weight:normal; color:#15bccf;}
a.newbtn{ float:right; display:block; width:80px; height:30px; background:#64bdd9; color:#fff; font-size:14px; margin:10px; text-align:center;} a.newbtn{ float:right; display:block; width:80px; height:30px; background:#64bdd9; color:#fff; font-size:14px; margin:10px; text-align:center;}
a:hover.newbtn{ background:#55a1b9; text-decoration:none;} a:hover.newbtn{ background:#55a1b9; text-decoration:none;}
.polls_list ul{ padding-left:10px; border-bottom:1px dashed #c9c9c9; height:32px; padding-top:8px;} .polls_list ul{ padding-left:10px; border-bottom:1px dashed #c9c9c9; height:32px; padding-top:8px;}
a.polls_title{ font-weight:bold; color:#3e6d8e;max-width: 350px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;} a.polls_title{ font-weight:bold; color:#3e6d8e;max-width: 300px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}
.polls_title{ font-weight:bold; color:#3e6d8e;} .polls_title{ font-weight:bold; color:#3e6d8e;max-width: 300px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}
a.pollsbtn{ display:block; width:66px; height:22px; text-align:center; border:1px solid #64bdd9; color:#64bdd9;} a.pollsbtn{ display:block; width:66px; height:22px; text-align:center; border:1px solid #64bdd9; color:#64bdd9;}
a:hover.pollsbtn{ background:#64bdd9; color:#fff; text-decoration:none;} a:hover.pollsbtn{ background:#64bdd9; color:#fff; text-decoration:none;}
.polls_date{ color:#666666;} .polls_date{ color:#666666;}
@ -41,7 +41,7 @@ ul.wlist li a:hover{ background:#15bccf; color:#fff; text-decoration:none;}
/*问卷页面*/ /*问卷页面*/
.polls_box{ border:1px solid #dcdcdc; padding:15px 30px;} .polls_box{ border:1px solid #dcdcdc; padding:15px 30px;margin-left: 7px;}
.ur_page_title{ font-size:16px; text-align:center; color:#353535; word-break:break-all; word-wrap:break-word;} .ur_page_title{ font-size:16px; text-align:center; color:#353535; word-break:break-all; word-wrap:break-word;}
.ur_prefix_content{ color:#656565; text-indent:30px; margin-top:10px; } .ur_prefix_content{ color:#656565; text-indent:30px; margin-top:10px; }
.ur_card{border-top:1px solid #dcdcdc;margin-top:20px; color:#3a3a3a;} .ur_card{border-top:1px solid #dcdcdc;margin-top:20px; color:#3a3a3a;}
@ -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 label{ padding-left:10px;word-break: break-all; word-wrap: break-word;}
.ur_inputs input{ margin-right:5px;} .ur_inputs input{ margin-right:5px;}
.ur_text{ height:30px;} .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;} .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.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;} a:hover.ur_button{ background:#0fa9bb; text-decoration:none;}
@ -113,7 +113,7 @@ a:hover.icon_add{background:url(images/icons.png) -20px -310px no-repeat;}
a:hover.icon_remove{background:url(images/icons.png) -20px -338px no-repeat;} a:hover.icon_remove{background:url(images/icons.png) -20px -338px no-repeat;}
.ur_editor_toolbar{ margin-bottom:10px;} .ur_editor_toolbar{ margin-bottom:10px;}
.ur_editor_toolbar input{ width:40px; height:20px;} .ur_editor_toolbar input{ width:40px; height:20px;}
.ur_editor02{width:655px; border:1px solid #cbcbcb; padding:10px; margin-bottom:10px;} .ur_editor02{width:655px; padding:10px; margin-bottom:10px;}
a.ur_button_submit{ display:block; width:106px; height:37px; margin:0 auto; background:#15bccf; color:#fff; font-size:16px; text-align:center; padding-top:3px; margin-bottom:10px; } a.ur_button_submit{ display:block; width:106px; height:37px; margin:0 auto; background:#15bccf; color:#fff; font-size:16px; text-align:center; padding-top:3px; margin-bottom:10px; }
a:hover.ur_button_submit{ background:#0fa9bb; text-decoration:none;} a:hover.ur_button_submit{ background:#0fa9bb; text-decoration:none;}
a.ur_icon_de{ background:url(images/icons.png) 0px -338px no-repeat; width:16px; height:27px; display:block;float:right; margin-top:15px;} a.ur_icon_de{ background:url(images/icons.png) 0px -338px no-repeat; width:16px; height:27px; display:block;float:right; margin-top:15px;}
@ -134,3 +134,14 @@ a:hover.upload_btn_grey{background:#8a8a8a;}
.upload_con a:hover{ text-decoration:none;} .upload_con a:hover{ text-decoration:none;}
.polls_btn_box{ width:145px; margin:0 auto; padding-left:10px;} .polls_btn_box{ width:145px; margin:0 auto; padding-left:10px;}
.polls_btn_box02{ width:80px; margin:0 auto; padding-left:10px;} .polls_btn_box02{ width:80px; margin:0 auto; padding-left:10px;}
/***新增20150120***/
.pollsbtn_tip{ width:30px; height:17px; display:block;background:url(images/icons.png) 0 -372px no-repeat;padding-left:7px; color:#fff;}
a.btn_de{ border:1px solid #ff5d31; color:#ff5d31; }
a:hover.btn_de{ background:#ff5d31;}
a.btn_pu{ border:1px solid #3cb761; color:#3cb761; }
a:hover.btn_pu{ background:#3cb761;}
.pollsbtn_grey{ border:1px solid #b1b1b1; color:#b1b1b1; padding:0px 9px; }
.polls_title_w { width:330px; overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
.polls_de_grey{ color:#b1b1b1;}
.ml5{ margin-left:5px;}

View File

@ -0,0 +1,5 @@
require 'spec_helper'
describe ForumObserver do
pending "add some examples to (or delete) #{__FILE__}"
end

View File

@ -0,0 +1,5 @@
require 'spec_helper'
describe MemoObserver do
pending "add some examples to (or delete) #{__FILE__}"
end

38
spec/spec_helper.rb Normal file
View File

@ -0,0 +1,38 @@
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
RSpec.configure do |config|
# ## Mock Framework
#
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
#
# config.mock_with :mocha
# config.mock_with :flexmock
# config.mock_with :rr
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
# If true, the base class of anonymous controllers will be inferred
# automatically. This will be the default behavior in future versions of
# rspec-rails.
config.infer_base_class_for_anonymous_controllers = false
# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = "random"
end