Merge branch 'szzh' into develop
This commit is contained in:
commit
6ae2a0dd5f
24
Gemfile
24
Gemfile
|
@ -1,4 +1,4 @@
|
|||
source 'http://ruby.taobao.org'
|
||||
source 'http://rubygems.org'
|
||||
#source 'http://ruby.sdutlinux.org/'
|
||||
|
||||
unless RUBY_PLATFORM =~ /w32/
|
||||
|
@ -33,21 +33,21 @@ group :test do
|
|||
gem 'selenium-webdriver', '~> 2.42.0'
|
||||
|
||||
|
||||
platforms :mri, :mingw do
|
||||
group :rmagick do
|
||||
# RMagick 2 supports ruby 1.9
|
||||
# RMagick 1 would be fine for ruby 1.8 but Bundler does not support
|
||||
# different requirements for the same gem on different platforms
|
||||
gem "rmagick", ">= 2.0.0"
|
||||
end
|
||||
end
|
||||
# platforms :mri, :mingw do
|
||||
# group :rmagick do
|
||||
# # RMagick 2 supports ruby 1.9
|
||||
# # RMagick 1 would be fine for ruby 1.8 but Bundler does not support
|
||||
# # different requirements for the same gem on different platforms
|
||||
# gem "rmagick", ">= 2.0.0"
|
||||
# end
|
||||
#end
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
gem "guard-rails", '~> 0.5.3'
|
||||
# gem "guard-rails", '~> 0.5.3'
|
||||
gem 'spork-testunit', '~> 0.0.8'
|
||||
gem 'guard-spork', '~> 1.5.1'
|
||||
gem 'guard-test', '~> 1.0.0'
|
||||
# gem 'guard-spork', '~> 1.5.1'
|
||||
# gem 'guard-test', '~> 1.0.0'
|
||||
gem 'ruby-prof', '~> 0.15.1' unless RUBY_PLATFORM =~ /w32/
|
||||
gem 'pry'
|
||||
gem 'pry-nav'
|
||||
|
|
|
@ -156,7 +156,16 @@ class ApplicationController < ActionController::Base
|
|||
user
|
||||
end
|
||||
end
|
||||
def try_to_autologin1
|
||||
|
||||
# auto-login feature starts a new session
|
||||
user = User.try_to_autologin(params[:token])
|
||||
if user
|
||||
start_user_session(user)
|
||||
end
|
||||
user
|
||||
|
||||
end
|
||||
# Sets the logged in user
|
||||
def logged_user=(user)
|
||||
reset_session
|
||||
|
@ -248,6 +257,24 @@ class ApplicationController < ActionController::Base
|
|||
end
|
||||
end
|
||||
end
|
||||
def authorize1(ctrl = params[:controller], action = params[:action],token = params[:token], global = false)
|
||||
|
||||
if(!User.current.logged? && !token.nil?)
|
||||
|
||||
User.current =try_to_autologin1
|
||||
end
|
||||
allowed = authorize_allowed(params[:controller], params[:action],global)
|
||||
|
||||
if allowed
|
||||
true
|
||||
else
|
||||
if @project && @project.archived?
|
||||
render_403 :message => :notice_not_authorized_archived_project
|
||||
else
|
||||
deny_access
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def authorize_allowed(ctrl = params[:controller], action = params[:action], global = false)
|
||||
#modify by NWB
|
||||
|
@ -261,6 +288,7 @@ class ApplicationController < ActionController::Base
|
|||
allowed
|
||||
end
|
||||
def authorize_attachment_download(ctrl = params[:controller], action = params[:action], global = false)
|
||||
|
||||
case @attachment.container_type
|
||||
when "Memo"
|
||||
allowed = User.current.allowed_to?(:memos_attachments_download,nil,:global => true)
|
||||
|
@ -289,6 +317,37 @@ class ApplicationController < ActionController::Base
|
|||
end
|
||||
end
|
||||
|
||||
def authorize_attachment_download1(ctrl = params[:controller], action = params[:action],token = params[:token], global = false)
|
||||
if(!User.current.logged? && !token.nil?)
|
||||
User.current = try_to_autologin1
|
||||
end
|
||||
case @attachment.container_type
|
||||
when "Memo"
|
||||
allowed = User.current.allowed_to?(:memos_attachments_download,nil,:global => true)
|
||||
when "Message"
|
||||
if @project
|
||||
allowed = User.current.allowed_to?(:projects_attachments_download,@project,:global => false)
|
||||
elsif @course
|
||||
allowed = User.current.allowed_to?(:course_attachments_download, @course, :global => false)
|
||||
end
|
||||
when "contest"
|
||||
return true
|
||||
when "Course"
|
||||
allowed = User.current.allowed_to?(:course_attachments_download, @course, :global => false)
|
||||
else
|
||||
return true
|
||||
end
|
||||
|
||||
if allowed
|
||||
true
|
||||
else
|
||||
if @project && @project.archived?
|
||||
render_403 :message => :notice_not_authorized_archived_project
|
||||
else
|
||||
deny_access
|
||||
end
|
||||
end
|
||||
end
|
||||
def authorize_course(ctrl = params[:controller], action = params[:action], global = false)
|
||||
allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @course || @course, :global => global)
|
||||
if allowed
|
||||
|
@ -789,4 +848,29 @@ class ApplicationController < ActionController::Base
|
|||
@organizer = WebFooterOranizer.first
|
||||
@companies = WebFooterCompany.all
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
def password_authentication
|
||||
user, last_login_on = User.try_to_login(params[:user_name], params[:password])
|
||||
|
||||
|
||||
successful_authentication(user, last_login_on)
|
||||
|
||||
end
|
||||
|
||||
|
||||
def successful_authentication(user, last_login_on)
|
||||
logger.info "Successful authentication for '#{user.login}' from #{request.remote_ip} at #{Time.now.utc}"
|
||||
# Valid user
|
||||
self.logged_user = user
|
||||
# generate a key and set cookie if autologin
|
||||
if params[:autologin] && Setting.autologin?
|
||||
set_autologin_cookie(user)
|
||||
end
|
||||
call_hook(:controller_account_success_authentication_after, {:user => user })
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,11 +17,12 @@
|
|||
|
||||
class AttachmentsController < ApplicationController
|
||||
layout "users_base"
|
||||
|
||||
before_filter :find_project, :only => [:show, :download, :thumbnail, :destroy, :delete_homework]#, :except => [:upload, :autocomplete]
|
||||
before_filter :file_readable, :read_authorize, :only => [:show, :thumbnail]#Modified by young
|
||||
before_filter :delete_authorize, :only => :destroy
|
||||
before_filter :authorize_global, :only => :upload
|
||||
before_filter :authorize_attachment_download, :only => :download
|
||||
before_filter :authorize_attachment_download1, :only => :download
|
||||
#before_filter :login_without_softapplication, only: [:download]
|
||||
accept_api_auth :show, :download, :upload
|
||||
require 'iconv'
|
||||
|
|
|
@ -810,9 +810,9 @@ class CoursesController < ApplicationController
|
|||
# modify by nwb
|
||||
# 添加私密性判断
|
||||
if User.current.member_of_course?(@course)|| User.current.admin?
|
||||
events = @activity.events(@date_from, @date_to)
|
||||
events = @activity.events(@days, @course.created_at)
|
||||
else
|
||||
events = @activity.events(@date_from, @date_to, :is_public => 1)
|
||||
events = @activity.events(@days, @course.created_at, :is_public => 1)
|
||||
end
|
||||
|
||||
# 无新动态时,显示老动态
|
||||
|
|
|
@ -19,10 +19,13 @@ class IssuesController < ApplicationController
|
|||
layout 'base_projects'#Added by young
|
||||
default_search_scope :issues
|
||||
|
||||
before_filter :authorize1, :only => [:show]
|
||||
before_filter :find_issue, :only => [:show, :edit, :update]
|
||||
before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :destroy]
|
||||
before_filter :find_project, :only => [:new, :create, :update_form]
|
||||
#before_filter :authorize, :except => [:index, :show]
|
||||
before_filter :authorize, :except => [:index]
|
||||
|
||||
before_filter :find_optional_project, :only => [:index]
|
||||
before_filter :check_for_default_issue_status, :only => [:new, :create]
|
||||
before_filter :build_new_issue_from_params, :only => [:new, :create, :update_form]
|
||||
|
@ -107,7 +110,7 @@ class IssuesController < ApplicationController
|
|||
end
|
||||
|
||||
def show
|
||||
|
||||
|
||||
@journals = @issue.journals.includes(:user, :details).reorder("#{Journal.table_name}.id ASC").all
|
||||
@journals.each_with_index {|j,i| j.indice = i+1}
|
||||
@journals.reject!(&:private_notes?) unless User.current.allowed_to?(:view_private_notes, @issue.project)
|
||||
|
|
|
@ -597,8 +597,8 @@ class ProjectsController < ApplicationController
|
|||
"show_wiki_edits"=>true,
|
||||
"show_journals_for_messages" => true
|
||||
}
|
||||
@date_to ||= Date.today + 1
|
||||
@date_from = @date_to - @days-1.years
|
||||
|
||||
|
||||
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
|
||||
@author = (params[:user_id].blank? ? nil : User.active.find(params[:user_id]))
|
||||
# 决定显示所用用户或单个用户活动
|
||||
|
@ -612,9 +612,9 @@ class ProjectsController < ApplicationController
|
|||
# modify by nwb
|
||||
# 添加私密性判断
|
||||
if User.current.member_of?(@project)|| User.current.admin?
|
||||
events = @activity.events(@date_from, @date_to)
|
||||
events = @activity.events(@days)
|
||||
else
|
||||
events = @activity.events(@date_from, @date_to, :is_public => 1)
|
||||
events = @activity.events(@days,nil, :is_public => 1)
|
||||
end
|
||||
|
||||
@offset, @limit = api_offset_and_limit({:limit => 10})
|
||||
|
|
|
@ -41,7 +41,7 @@ class UsersController < ApplicationController
|
|||
:activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index,
|
||||
:activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index]
|
||||
before_filter :auth_user_extension, only: :show
|
||||
before_filter :rest_user_score, only: :show
|
||||
#before_filter :rest_user_score, only: :show
|
||||
#before_filter :select_entry, only: :user_projects
|
||||
accept_api_auth :index, :show, :create, :update, :destroy,:tag_save , :tag_saveEx
|
||||
|
||||
|
|
|
@ -140,10 +140,12 @@ module ApplicationHelper
|
|||
# * :text - Link text (default to attachment filename)
|
||||
# * :download - Force download (default: false)
|
||||
def link_to_attachment(attachment, options={})
|
||||
token = options[:token] if options[:token]
|
||||
text = options.delete(:text) || attachment.filename
|
||||
route_method = options.delete(:download) ? :download_named_attachment_path : :named_attachment_path
|
||||
html_options = options.slice!(:only_path)
|
||||
url = send(route_method, attachment, attachment.filename, options)
|
||||
url << "?token=#{token}" unless token.nil?
|
||||
link_to text, url, html_options
|
||||
end
|
||||
|
||||
|
|
|
@ -224,6 +224,7 @@ module IssuesHelper
|
|||
# as an array of strings
|
||||
def details_to_strings(details, no_html=false, options={})
|
||||
options[:only_path] = (options[:only_path] == false ? false : true)
|
||||
options[:token] = options[:token] if options[:token]
|
||||
strings = []
|
||||
values_by_field = {}
|
||||
details.each do |detail|
|
||||
|
@ -312,7 +313,11 @@ module IssuesHelper
|
|||
old_value = content_tag("del", old_value) if detail.old_value and detail.value.blank?
|
||||
if detail.property == 'attachment' && !value.blank? && atta = Attachment.find_by_id(detail.prop_key)
|
||||
# Link to the attachment if it has not been removed
|
||||
value = link_to_attachment(atta, :download => true, :only_path => options[:only_path])
|
||||
if options[:token].nil?
|
||||
value = link_to_attachment(atta, :download => true, :only_path => options[:only_path])
|
||||
else
|
||||
value = link_to_attachment(atta, :download => true, :only_path => options[:only_path], :token => options[:token])
|
||||
end
|
||||
if options[:only_path] != false && atta.is_text?
|
||||
value += link_to(
|
||||
image_tag('magnifier.png'),
|
||||
|
|
|
@ -18,8 +18,12 @@
|
|||
class IssueObserver < ActiveRecord::Observer
|
||||
|
||||
def after_create(issue)
|
||||
thread1=Thread.new do
|
||||
Mailer.issue_add(issue).deliver if Setting.notified_events.include?('issue_added')
|
||||
end
|
||||
Thread.start do
|
||||
recipients = issue.recipients
|
||||
recipients.each do |rec|
|
||||
Mailer.issue_add(issue,rec).deliver if Setting.notified_events.include?('issue_added')
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
@ -20,7 +20,11 @@ class IssueOverdue < ActiveRecord::Base
|
|||
#发邮件
|
||||
#puts "11" + issue.id.to_s
|
||||
#Mailer.issue_expire(issue).deliver
|
||||
Mailer.issue_add(issue).deliver
|
||||
recipients = issue.recipients
|
||||
recipients.each do |rec|
|
||||
|
||||
Mailer.issue_edit(issue,rec).deliver
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
|
|
|
@ -23,8 +23,12 @@ class JournalObserver < ActiveRecord::Observer
|
|||
(Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
|
||||
(Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
|
||||
)
|
||||
Thread.new do
|
||||
Mailer.issue_edit(journal).deliver
|
||||
Thread.start do
|
||||
recipients = journal.recipients
|
||||
recipients.each do |rec|
|
||||
|
||||
Mailer.issue_edit(journal,rec).deliver
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -95,29 +95,45 @@ class Mailer < ActionMailer::Base
|
|||
# Example:
|
||||
# issue_add(issue) => Mail::Message object
|
||||
# Mailer.issue_add(issue).deliver => sends an email to issue recipients
|
||||
def issue_add(issue)
|
||||
def issue_add(issue, recipients)
|
||||
issue_id = issue.project_index
|
||||
redmine_headers 'Project' => issue.project.identifier,
|
||||
'Issue-Id' => issue_id,
|
||||
'Issue-Author' => issue.author.login
|
||||
redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
|
||||
message_id issue
|
||||
|
||||
@author = issue.author
|
||||
@issue = issue
|
||||
@issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id)
|
||||
recipients = issue.recipients
|
||||
cc = issue.watcher_recipients - recipients
|
||||
mail :to => recipients,
|
||||
:cc => cc,
|
||||
:subject => "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}"
|
||||
|
||||
|
||||
token = Token.new(:user => User.find_by_mail(recipients), :action => 'autologin')
|
||||
token.save
|
||||
@token = token
|
||||
@issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id, :token => @token.value)
|
||||
|
||||
|
||||
cc = issue.watcher_recipients - issue.recipients
|
||||
subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] (#{issue.status.name}) #{issue.subject}"
|
||||
mail(:to => recipients,
|
||||
:cc => cc,
|
||||
:subject => subject)
|
||||
end
|
||||
# issue.attachments.each do |attach|
|
||||
# attachments["#{attach.filename}"] = File.read("#{attach.disk_filename}")
|
||||
# end
|
||||
# cc = issue.watcher_recipients - recipients
|
||||
#mail.attachments['test'] = File.read("#{RAILS.root}/files/2015/01/150114094010_libegl.dll")
|
||||
|
||||
|
||||
|
||||
|
||||
# Builds a Mail::Message object used to email recipients of the edited issue.
|
||||
#
|
||||
# Example:
|
||||
# issue_edit(journal) => Mail::Message object
|
||||
# Mailer.issue_edit(journal).deliver => sends an email to issue recipients
|
||||
def issue_edit(journal)
|
||||
def issue_edit(journal,recipients)
|
||||
issue = journal.journalized.reload
|
||||
issue_id = issue.project_index
|
||||
redmine_headers 'Project' => issue.project.identifier,
|
||||
|
@ -127,18 +143,34 @@ class Mailer < ActionMailer::Base
|
|||
message_id journal
|
||||
references issue
|
||||
@author = journal.user
|
||||
recipients = journal.recipients
|
||||
|
||||
|
||||
token = Token.new(:user => User.find_by_mail(recipients), :action => 'autologin')
|
||||
token.save
|
||||
@token = token
|
||||
@issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id, :anchor => "change-#{journal.id}", :token => @token.value)
|
||||
|
||||
|
||||
|
||||
|
||||
# Watchers in cc
|
||||
cc = journal.watcher_recipients - recipients
|
||||
|
||||
cc = journal.watcher_recipients - journal.recipients
|
||||
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] "
|
||||
s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
|
||||
s << issue.subject
|
||||
@issue = issue
|
||||
@journal = journal
|
||||
@issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
|
||||
mail :to => recipients,
|
||||
:cc => cc,
|
||||
:subject => s
|
||||
# @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue, :anchor => "change-#{journal.id}")
|
||||
mail(:to => recipients,
|
||||
:cc => cc,
|
||||
:subject => s)
|
||||
end
|
||||
|
||||
def self.deliver_mailer(to,cc, subject)
|
||||
mail :to => to,
|
||||
:cc => cc,
|
||||
:subject => subject
|
||||
end
|
||||
|
||||
# 用户申请加入项目邮件通知
|
||||
|
@ -615,5 +647,15 @@ class Mailer < ActionMailer::Base
|
|||
Rails.logger
|
||||
end
|
||||
|
||||
|
||||
def add_attachments(obj)
|
||||
if email.attachments && email.attachments.any?
|
||||
email.attachments.each do |attachment|
|
||||
obj.attachments << Attachment.create(:container => obj,
|
||||
:file => attachment.decoded,
|
||||
:filename => attachment.filename,
|
||||
:author => user,
|
||||
:content_type => attachment.mime_type)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -380,7 +380,7 @@ class User < Principal
|
|||
raise text
|
||||
end
|
||||
|
||||
# Returns the user who matches the given autologin +key+ or nil
|
||||
|
||||
def self.try_to_autologin(key)
|
||||
user = Token.find_active_user('autologin', key, Setting.autologin.to_i)
|
||||
if user
|
||||
|
@ -466,7 +466,11 @@ class User < Principal
|
|||
User.hash_password("#{salt}#{User.hash_password clear_password}") == hashed_password
|
||||
end
|
||||
end
|
||||
def check_password1?(clear_password)
|
||||
|
||||
clear_password == hashed_password
|
||||
|
||||
end
|
||||
# Generates a random salt and computes hashed_password for +clear_password+
|
||||
# The hashed password is stored in the following form: SHA1(salt + SHA1(password))
|
||||
def salt_password(clear_password)
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'homework_attach/praise_alert') %>');
|
||||
showModal('ajax-modal', '480px');
|
||||
$('#ajax-modal').css('height','240px');
|
||||
$('#ajax-modal').siblings().remove();
|
||||
$('#ajax-modal').before("<span style='float: right;cursor:pointer;'>" +
|
||||
"<a href='#' onclick='hiddent_alert_model();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
|
||||
$('#ajax-modal').parent().css("top","").css("left","").css("width","511");
|
||||
|
|
|
@ -62,7 +62,7 @@ function f_submit()
|
|||
<style type="text/css">
|
||||
/*浮窗*/
|
||||
body{ height:3000px; font-family:'微软雅黑';}
|
||||
div,ul,li,body,h3,p{margin:0; padding:0;}
|
||||
|
||||
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; }
|
||||
|
@ -101,10 +101,10 @@ a:hover.opnionButton{ text-decoration:underline;}
|
|||
<% get_memo %>
|
||||
<%= form_for(@new_memo, :url => create_feedback_forum_path(@public_forum)) do |f| %>
|
||||
<div class="actions" style="max-width:680px">
|
||||
<p>
|
||||
<p style="margin:0; padding:0;">
|
||||
<%= f.text_area :subject, :class => "opnionText",:placeholder => "有什么想说的,尽管来咆哮吧~~"%>
|
||||
</p>
|
||||
<p>
|
||||
<p style="margin:0; padding:0;">
|
||||
<%= f.hidden_field :content, :required => true ,:value=>'该贴来自用户反馈!'%>
|
||||
</p>
|
||||
<%#= f.submit :value => l(:label_memo_create), :class => "opnionButton", :id => "button1" %>
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
|
||||
|
||||
<%= l(:text_issue_added, :id => "##{@issue.project_index}", :author => h(@issue.author)) %>
|
||||
<ul>
|
||||
|
||||
<% unless @issue.attachments.nil? %>
|
||||
<% @issue.attachments.each do |attach| %>
|
||||
<li> <%= l(:label_attachment) %><%= link_to_attachment(attach, :download => true, :token => @token.value, :only_path => false) %><%= l(:label_added) %></li>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
</ul>
|
||||
<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 } %>
|
|
@ -1,4 +1,11 @@
|
|||
<%= l(:text_issue_added, :id => "##{@issue.project_index}", :author => @issue.author) %>
|
||||
|
||||
<% @issue.attachments.each do |attach| %>
|
||||
<%= l(:label_attachment) %>
|
||||
<%= link_to_attachment(attach, :download => true, :token => @token.value, :only_path => false) %> <%= l(:label_added) %>
|
||||
<% end %>
|
||||
|
||||
----------------------------------------
|
||||
|
||||
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :issue_url => @issue_url } %>
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => h(@journal.user)) %>
|
||||
|
||||
<ul>
|
||||
<% details_to_strings(@journal.details, false, :only_path => false).each do |string| %>
|
||||
<% details_to_strings(@journal.details, false, :only_path => false, :token => @token.value).each do |string| %>
|
||||
<li><%= string %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<%= l(:text_issue_updated, :id => "##{@issue.project_index}", :author => @journal.user) %>
|
||||
|
||||
<% details_to_strings(@journal.details, true).each do |string| -%>
|
||||
<% details_to_strings(@journal.details, true, :token => @token.value).each do |string| -%>
|
||||
<%= string %>
|
||||
<% end -%>
|
||||
|
||||
|
|
|
@ -123,7 +123,7 @@
|
|||
<br/>
|
||||
</p>
|
||||
|
||||
<p style="width:400px;padding-left: 52px;">
|
||||
<p style="width:400px;padding-left: 50px;">
|
||||
<label style="margin-right: 1px;">
|
||||
<%= l(:label_identity) %><span style="color: #bb0000;"> *</span></label>
|
||||
<select onchange="showtechnical_title(this.value, $('#userTechnical_title'));" name="identity" id="userIdentity" class="location" style="margin: 0px;">
|
||||
|
@ -187,13 +187,13 @@
|
|||
<!-- added by bai 增加账户里的性别-->
|
||||
<span id='gender' style='display:none'>
|
||||
<% if @user.user_extensions.nil? %>
|
||||
<p style="width:400px;padding-left: 54px;">
|
||||
<p style="width:400px;padding-left: 52px;">
|
||||
<%= l(:label_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>
|
||||
<% else %>
|
||||
<% if @user.user_extensions.gender == 0 %><!-- label_gender_male -->
|
||||
<p style="width:400px;padding-left: 54px;">
|
||||
<p style="width:400px;padding-left: 52px;">
|
||||
<%= l(:label_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>
|
||||
|
@ -318,7 +318,7 @@
|
|||
});
|
||||
</script>
|
||||
|
||||
<p style="width:400px;padding-left: 57px;"><label style="margin-right: 5px;"><%= l(:label_location) %></label>
|
||||
<p style="width:400px;padding-left: 55px;"><label style="margin-right: 5px;"><%= l(:label_location) %></label>
|
||||
<select onchange="showcity(this.value, document.getElementById('userCity'));" name="province" id="userProvince" class="location">
|
||||
<option value="">--请选择省份--</option>
|
||||
<option value="北京">北京</option>
|
||||
|
@ -382,7 +382,7 @@
|
|||
<legend onclick="toggleFieldset(this);">
|
||||
<%= l(:field_mail_notification) %>
|
||||
</legend>
|
||||
<div style="padding-left: 26px;"> <!-- modified by ming -->
|
||||
<div style="padding-left: 8px;"> <!-- modified by ming -->
|
||||
<p style="width:380px;">
|
||||
<%= render :partial => 'users/mail_notifications' %>
|
||||
</p></div>
|
||||
|
|
|
@ -49,7 +49,7 @@ form #search_type{
|
|||
<%= form_tag({controller: :welcome, action: :search }, method: :get) do %>
|
||||
<div class="project-search" style="float: right">
|
||||
<div class='search_widget'>
|
||||
<%= text_field_tag :q, nil, placeholder:'请输入要搜索的关键字', :size => 27, %>
|
||||
<%= text_field_tag :q, nil, placeholder:'请输入要搜索的关键字', :size => 27, style: "float:left" %>
|
||||
<%= select_tag(:search_type, options_for_select(select_option), :style => "float:right" ) %>
|
||||
</div>
|
||||
<%#= hidden_field_tag 'project_type', project_type %>
|
||||
|
|
|
@ -89,7 +89,7 @@ form #search_by
|
|||
<div class="project-search" style="float: right">
|
||||
<div class='search_widget' >
|
||||
|
||||
<%= text_field_tag :q, nil, placeholder:'请输入要搜索的关键字' %>
|
||||
<%= text_field_tag :q, nil, placeholder:'请输入要搜索的关键字', style:"float:left" %>
|
||||
<input type="text" name="search_by_input" style="display: none" id="search_by_input" value="0">
|
||||
<%= select_tag(:search_type, options_for_select(select_option), :onchange => "searchTypeChange();", :style => "float:right" ) %>
|
||||
<%= select_tag(:search_by,options_for_select([["昵称","0"],["姓名","1"],["邮箱","2"]]), :onchange => "searchByChange();",:style => "float:right" ) %>
|
||||
|
|
|
@ -87,12 +87,12 @@ default:
|
|||
|
||||
|
||||
|
||||
address: smtp.qq.com
|
||||
port: 587
|
||||
domain: smtp.qq.com
|
||||
address: smtp.126.com
|
||||
port: 25
|
||||
domain: smtp.126.com
|
||||
authentication: :plain
|
||||
user_name: 939547590@qq.com
|
||||
password: 'suwen11223344'
|
||||
user_name: "alanlong9278@126.com"
|
||||
password: "alanlong8788786"
|
||||
|
||||
# Absolute path to the directory where attachments are stored.
|
||||
# The default is the 'files' directory in your Redmine instance.
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
class AddDataForMembers < ActiveRecord::Migration
|
||||
def change
|
||||
StudentsForCourse.all.each do |stu|
|
||||
if Member.where(:user_id => stu.student_id, :course_id => stu.course_id).first.nil?
|
||||
mem = Member.new(:user_id => stu.student_id, :course_id => stu.course_id, :course_group_id => 0, :project_id => -1, :mail_notification => 0, :role_ids => [10])
|
||||
mem.save!
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20150108035338) do
|
||||
ActiveRecord::Schema.define(:version => 20150112024820) do
|
||||
|
||||
create_table "activities", :force => true do |t|
|
||||
t.integer "act_id", :null => false
|
||||
|
@ -831,8 +831,9 @@ ActiveRecord::Schema.define(:version => 20150108035338) do
|
|||
t.integer "user_id"
|
||||
t.datetime "published_at"
|
||||
t.datetime "closed_at"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.text "polls_description"
|
||||
end
|
||||
|
||||
create_table "praise_tread_caches", :force => true do |t|
|
||||
|
|
|
@ -50,15 +50,13 @@ module Redmine
|
|||
|
||||
module ClassMethods
|
||||
# Returns events of type event_type visible by user that occured between from and to
|
||||
def find_events(event_type, user, from, to, options)
|
||||
def find_events(event_type, user, days, created_time, options)
|
||||
provider_options = activity_provider_options[event_type]
|
||||
raise "#{self.name} can not provide #{event_type} events." if provider_options.nil?
|
||||
|
||||
scope = self
|
||||
|
||||
if from && to
|
||||
scope = scope.scoped(:conditions => ["#{provider_options[:timestamp]} BETWEEN ? AND ?", from, to])
|
||||
end
|
||||
|
||||
|
||||
if options[:author]
|
||||
return [] if provider_options[:author_key].nil?
|
||||
|
@ -93,7 +91,22 @@ module Redmine
|
|||
ActiveSupport::Deprecation.warn "acts_as_activity_provider with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option."
|
||||
scope = scope.scoped(:conditions => Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options))
|
||||
end
|
||||
unless scope.all(provider_options[:find_options].dup).first.nil?
|
||||
if provider_options[:timestamp].include? "updated_on"
|
||||
to = scope.scoped(:order => "#{provider_options[:timestamp]} desc").all(provider_options[:find_options].dup).first.updated_on
|
||||
else
|
||||
to = scope.scoped(:order => "#{provider_options[:timestamp]} desc").all(provider_options[:find_options].dup).first.created_on
|
||||
end
|
||||
if options[:course]
|
||||
from = (to - days.days) > created_time ? (to - days.days) : created_time.to_date
|
||||
else
|
||||
from = to - days.days - 1.years
|
||||
end
|
||||
end
|
||||
|
||||
if from && to
|
||||
scope = scope.scoped(:conditions => ["#{provider_options[:timestamp]} BETWEEN ? AND ?", from, to])
|
||||
end
|
||||
scope.all(provider_options[:find_options].dup)
|
||||
end
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ module Redmine
|
|||
|
||||
# Returns an array of events for the given date range
|
||||
# sorted in reverse chronological order
|
||||
def events(from = nil, to = nil, options={})
|
||||
def events(days = nil, created_time = nil, options={})
|
||||
e = []
|
||||
@options[:limit] = options[:limit]
|
||||
# modify by nwb
|
||||
|
@ -87,7 +87,7 @@ module Redmine
|
|||
|
||||
@scope.each do |event_type|
|
||||
constantized_providers(event_type).each do |provider|
|
||||
e += provider.find_events(event_type, @user, from, to, @options)
|
||||
e += provider.find_events(event_type, @user, days, created_time, @options)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ a.yellowBtn{ display:inline-block;color:#0d90c3; height:22px;}
|
|||
.upload_con { }
|
||||
.upload_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; margin-top:25px; padding-left:20px; padding-top:5px;}
|
||||
.upload_box{ width:430px; margin:15px auto;}
|
||||
a.upload_btn{ display:block; float:left; margin-top:15px; width:80px; height:30px; text-align: center; color:#fff; font-size:14px; background:#15bccf; margin-right:15px;}
|
||||
a.upload_btn{ display:block; float:left; margin-top:15px; width:80px; height:30px; text-align: center; color:#fff; font-size:14px; background:#15bccf; margin-right:15px;padding-top: 10px;}
|
||||
a:hover.upload_btn{ background:#55a1b9;}
|
||||
a.upload_btn_grey{background:#a3a3a3;}
|
||||
a:hover.upload_btn_grey{background:#8a8a8a;}
|
||||
|
|
Loading…
Reference in New Issue