diff --git a/app/controllers/applied_project_controller.rb b/app/controllers/applied_project_controller.rb index fdb45b030..3d061ef74 100644 --- a/app/controllers/applied_project_controller.rb +++ b/app/controllers/applied_project_controller.rb @@ -6,7 +6,8 @@ class AppliedProjectController < ApplicationController @project = Project.find(params[:project_id]) @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id]) if @applieds.count == 0 - AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id]) + appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id]) + Mailer.applied_project(appliedproject).deliver end #redirect_to project_path(params[:project_id]) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 0b2ae02b3..7c1c10325 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -23,6 +23,7 @@ class AttachmentsController < ApplicationController before_filter :login_without_softapplication, only: [:download] accept_api_auth :show, :download, :upload + require 'iconv' def show respond_to do |format| @@ -75,6 +76,25 @@ class AttachmentsController < ApplicationController end end + # 更新文件密级 + def updateFileDense + @attachment = Attachment.find(params[:attachmentid]) + if @attachment != nil + filedense = params[:newtype].to_s + # d = Iconv.conv("unicodebig","utf-8",filedense) + if filedense == "%E5%85%AC%E5%BC%80" #l(:field_is_public) + @attachment.is_public = 1 + else + @attachment.is_public = 0 + end + @attachment.save + @newfiledense = filedense + end + respond_to do |format| + format.js + end + end + def thumbnail if @attachment.thumbnailable? && thumbnail = @attachment.thumbnail(:size => params[:size]) if stale?(:etag => thumbnail) @@ -89,6 +109,7 @@ class AttachmentsController < ApplicationController end end + def upload # Make sure that API users get used to set this content type # as it won't trigger Rails' automatic parsing of the request body for parameters diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb index 76872d783..2cf82217d 100644 --- a/app/controllers/bids_controller.rb +++ b/app/controllers/bids_controller.rb @@ -375,11 +375,14 @@ class BidsController < ApplicationController @option = [] @membership.each do |membership| unless(membership.project.project_type==1) - membership.member_roles.each{|role| - if(role.role_id == 3) - @option << membership.project - end - } + if membership.user.allowed_to?(:quote_project,membership.project) + @option << membership.project + end + #membership.member_roles.each{|role| + # if(role.role_id == 3) + # @option << membership.project + # end + #} end end @@ -454,14 +457,14 @@ class BidsController < ApplicationController if (User.current.logged? && User.current.member_of_course?(@bid.courses.first)) # flash[:notice] = "" @membership = User.current.coursememberships.all(:conditions => Course.visible_condition(User.current)) - @option = [] - @membership.each do |membership| - membership.member_roles.each{|role| - if(role.role_id == 3) - @option << membership.course - end - } - end + #@option = [] + #@membership.each do |membership| + # membership.member_roles.each{|role| + # if(role.role_id == 3) + # @option << membership.course + # end + # } + #end @user = @bid.author @bidding_project = @bid.biding_projects.all @@ -990,7 +993,7 @@ class BidsController < ApplicationController return true if current_user.admin? #return 0 if @bid.courses.first.project_type == Project::ProjectType_project currentUser = User.current - render_403 unless currentUser.member_of_cousrse?(@bid.courses.first) + render_403 unless currentUser.member_of_course?(@bid.courses.first) end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 9639c9d00..24e157df1 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -734,7 +734,7 @@ class ProjectsController < ApplicationController #Added by young # @course_tag = params[:course] # if @course_tag == '1' - @course = Course.find_by_extra(@project.identifier) + #@course = Course.find_by_extra(@project.identifier) # if @project.project_type == 1 # render :layout => 'base_courses' # else diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 3b97802f5..e91f9c0a9 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -239,7 +239,7 @@ class RepositoriesController < ApplicationController @repositories = @project.repositories @course_tag = params[:course] project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT - ip = RepositoriesHelper::REPO_IP_ADDRESS + ip = RepositoriesHelper::REPO_IP_ADDRESS @repos_url = "http://"+@repository.login.to_s+"_"+@repository.identifier.to_s+"@"+ip+ @repository.url.slice(project_path_cut, @repository.url.length).to_s if @course_tag == 1 diff --git a/app/controllers/stores_controller.rb b/app/controllers/stores_controller.rb index 0ed12d76d..fd0d3cf53 100644 --- a/app/controllers/stores_controller.rb +++ b/app/controllers/stores_controller.rb @@ -20,25 +20,27 @@ class StoresController < ApplicationController resultSet = Attachment.where("attachments.container_type IS NOT NULL AND filename LIKE :like ", like: "%#{keywords}%"). reorder("created_on DESC") - result = resultSet.to_a.dup + # result = resultSet.to_a.dup - resultSet.to_a.map { |res| - if(res.container.nil? || - (res.container.class.to_s=="Project" && res.container.is_public == false) || - (res.container.has_attribute?(:project) && res.container.project.is_public == false) || - (res.container.class.to_s=="HomeworkAttach" && res.container.bid.reward_type == 3) || - false - ) - result.delete(res) - end - } - result + # resultSet.to_a.map { |res| + # if(res.container.nil? || + # (res.container.class.to_s=="Project" && res.container.is_public == false) || + # (res.container.has_attribute?(:project) && res.container.project.is_public == false) || + # (res.container.class.to_s=="HomeworkAttach" && res.container.bid.reward_type == 3) || + # false + # ) + # result.delete(res) + # end + # } + # result end LIMIT = 12 unless const_defined?(:LIMIT) def index @projects_attach = project_classification(0).take(LIMIT) - @courses_attach = project_classification(1).take(LIMIT) + @courses_attach = Attachment.includes(:course).where("courses.is_public = ?", 1). + where(container_type: 'Course'). + limit(LIMIT) # @projects_attach = Attachment.includes(:project).where("projects.project_type=? AND projects.is_public = ?", 0, 1). # reorder("#{Attachment.table_name}.downloads DESC"). # limit(LIMIT) diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 3e708b94a..bf18332df 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -116,13 +116,13 @@ class WelcomeController < ApplicationController # 判断网站的入口,是课程 course 则跳过index去渲染 course 方法 def entry_select_course - if request.original_url.match(/course\.trustie\.net/) + if request.original_url.match(/.*course\.trustie\.net/) (course() and render :course and return 0) end end def entry_select_contest - if request.original_url.match(/contest\.trustie\.net/) + if request.original_url.match(/.*contest\.trustie\.net/) contest render :contest return 0 @@ -130,7 +130,7 @@ class WelcomeController < ApplicationController end def entry_select_user - if request.original_url.match(/user\.trustie\.net$/) + if request.original_url.match(/.*user\.trustie\.net$/) redirect_to(:controller => "users", :action => "index") return 0 end diff --git a/app/helpers/attachments_helper.rb b/app/helpers/attachments_helper.rb index 3e61b2a44..b43eb22f1 100644 --- a/app/helpers/attachments_helper.rb +++ b/app/helpers/attachments_helper.rb @@ -109,8 +109,8 @@ module AttachmentsHelper domain = project.nil? ? attachAll : nobelong_attach # 搜索到的资源 - searched_attach = domain.where("filename LIKE :like ", like:"%#{filename_condition}%").limit(limit).order('created_on desc') - searched_attach = private_filter searched_attach + searched_attach = domain.where("is_public=1 and filename LIKE :like ", like:"%#{filename_condition}%").limit(limit).order('created_on desc') + #searched_attach = private_filter searched_attach searched_attach = paginateHelper(searched_attach, 10) s = content_tag('div', attachments_check_box_tags('attachment[attach][]', searched_attach), :id => 'attachments') @@ -148,8 +148,8 @@ module AttachmentsHelper domain = course.nil? ? attachAll : nobelong_attach # 搜索到的资源 - searched_attach = domain.where("filename LIKE :like ", like:"%#{filename_condition}%").limit(limit).order('created_on desc') - searched_attach = private_filter searched_attach + searched_attach = domain.where("is_public=1 and filename LIKE :like ", like:"%#{filename_condition}%").limit(limit).order('created_on desc') + #searched_attach = private_filter searched_attach searched_attach = paginateHelper(searched_attach, 10) #testattach = Attachment.public_attachments diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index d02863762..3c7123435 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -20,7 +20,7 @@ module RepositoriesHelper ROOT_PATH="/home/pdl/redmine-2.3.2-0/apache2/" PROJECT_PATH_CUT = 40 - REPO_IP_ADDRESS = "repository.trustie.net" + REPO_IP_ADDRESS = Setting.repository_domain def format_revision(revision) if revision.respond_to? :format_identifier diff --git a/app/helpers/stores_helper.rb b/app/helpers/stores_helper.rb index c01fae55e..0c7fdac43 100644 --- a/app/helpers/stores_helper.rb +++ b/app/helpers/stores_helper.rb @@ -37,15 +37,24 @@ module StoresHelper WORD_LIMIT = 100 def come_from_local attachment - container = attachment.container case container.class.to_s when 'Message' + # binding.pry # '项目 > zzz > 论坛 > 帖子xxx' # topic_str = container.project.project_type == 0 ? l(:label_board) : l(:label_new_course) - topic_list = link_to l(:label_board), project_boards_path(container.project) - topic_item = link_to container.subject.truncate(WORD_LIMIT, omission: '...'), board_message_path(container.board, container), title: container.subject - project_link(container.project).push(topic_list, topic_item) + + course = container.course + project = container.project + if course.nil? # container is belongs to Project + topic_list = link_to l(:label_board), project_boards_path(container.project) + topic_item = link_to container.subject.truncate(WORD_LIMIT, omission: '...'), board_message_path(container.board, container), title: container.subject + project_link(container.project).push(topic_list, topic_item) + else # container is belongs to Course + topic_list = link_to l(:label_course_news), course_boards_path(course) + topic_item = link_to container.try(:subject).to_s.truncate(WORD_LIMIT, omission: '...'), board_message_path(container.board, container), title: container.subject + project_link(course).push(topic_list, topic_item) + end when 'Issue' # '项目 > zzz > 缺陷 > 问题xxx' issue_list = link_to l(:label_project_issues), project_issues_path(container.project) @@ -58,15 +67,26 @@ module StoresHelper project_link(container.project).push(doc_list, doc_item) when 'News' # '课程 > zzz > 新闻 > 新闻xxx' - news_str = container.project.project_type == 0 ? l(:label_news) : l(:label_course_news) - news_list = link_to news_str, project_news_index_path(container.project) - news_item = link_to container.title.truncate(WORD_LIMIT, omission: '...'), news_path(container), title: container.title - project_link(container.project).push(news_list, news_item) + course = container.course + project = container.project + if course.nil? # container is belongs to Project + news_list = link_to l(:label_news), project_news_index_path(container.project) + news_item = link_to container.title.truncate(WORD_LIMIT, omission: '...'), news_path(container), title: container.title + project_link(container.project).push(news_list, news_item) + else # container is belongs to Course + news_list = link_to l(:label_course_news), course_news_index_path(course) + news_item = link_to container.title.truncate(WORD_LIMIT, omission: '...'), news_path(container), title: container.title + project_link(course).push(news_list, news_item) + end + when 'Project' # '项目 > zzz ' file_str = container.project.project_type == 0 ? l(:project_module_files) : l(:label_course_file) files_list = link_to file_str, project_files_path(container.project) project_link(container).push(files_list) + when 'Course' + files_list = link_to l(:label_course_file), course_files_path(container) + project_link(container).push(files_list) when 'Version' # '项目 > zzz > 里程碑 > xxx' ver_list = link_to l(:label_roadmap), project_roadmap_path(container.project) @@ -91,7 +111,8 @@ module StoresHelper # '竞赛 > xxx ' bid_link(container) else - Rails.logger.error "ERROR: attachment type unkown" + Rails.logger.error "ERROR: attachment type unkown. file:#{__FILE__}, line:#{__LINE__}" + Rails.logger.error "#{container.class.to_s}" [link_to('unkown', '')] end rescue ActionController::RoutingError => e @@ -99,20 +120,6 @@ module StoresHelper [link_to('unkown', '')] end - def project_link project - if project.nil? - Rails.logger.error "ERROR: attachment type unkown #project_link project.nil?" - return [link_to('unkown', '')] - end - project_list = nil - if project.project_type == 0 - project_list = link_to l(:label_project_plural), projects_path - else - project_list = link_to l(:label_new_course), course_path - end - project_item = link_to project.to_s, project_path(project) - [project_list, project_item] - end def bid_link bid bid_list = nil @@ -129,7 +136,7 @@ module StoresHelper Rails.logger.error "ERROR: attachment type unkown #bid_link/when 3" return [link_to('unkown', '#')] end - bid_list = link_to l(:label_homework), project_homework_path(bid.courses.first) + bid_list = link_to l(:label_homework), homework_course_path(bid.courses.first) bid_item = link_to bid.name, respond_path(bid) return project_link(bid.courses.first).push(bid_list, bid_item) else @@ -137,4 +144,28 @@ module StoresHelper end [bid_list, bid_item] end + + + def project_link project + if project.nil? + Rails.logger.error "ERROR: attachment type unkown #project_link project.nil? file: #{__FILE__}, line: #{__LINE__}" + return [link_to('unkown', '')] + end + project_list = nil + klass = project.class.to_s + case klass + when "Project" + project_list = link_to l(:label_project_plural), projects_path + project_item = link_to project.to_s, project_path(project) + [project_list, project_item] + when "Course" + course_list = link_to l(:label_new_course), courses_path + course_item = link_to project.name, course_path(project) + [course_list, course_item] + else + Rails.logger.error "[StoresHelper]: #{klass} =======================================" + [] + end + + end end diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 116e2de9a..0eb3e7666 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -196,6 +196,21 @@ class Attachment < ActiveRecord::Base suffix end + # 文件密级的字符描述 + def file_dense_str + if self.is_public == 1 + dense = l(:field_is_public) + else + dense = l(:field_is_private) + end + dense + end + + # 文件可设置的密级列表 + def file_dense_list + denselist = [l(:field_is_public),l(:field_is_private)] + end + def suffixArr @@SuffixArr end diff --git a/app/models/course.rb b/app/models/course.rb index 5034ab0d8..b6974eed0 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -90,6 +90,18 @@ class Course < ActiveRecord::Base false end + # Returns the mail adresses of users that should be always notified on project events + def recipients + notified_users.collect {|user| user.mail} + end + + # Returns the users that should be notified on project events + def notified_users + # TODO: User part should be extracted to User#notify_about? + members.select {|m| m.principal.present? && (m.mail_notification? || m.principal.mail_notification == 'all')}.collect {|m| m.principal} + end + + # 课程的短描述信息 def short_description(length = 255) description.gsub(/^(.{#{length}}[^\n\r]*).*$/m, '\1...').strip if description @@ -112,6 +124,7 @@ class Course < ActiveRecord::Base @attachmenttypes = Attachmentstype.find(:all, :conditions => ["#{Attachmentstype.table_name}.typeId= ?",self.attachmenttype ]) end + # 获取资源后缀名列表 def contenttypes attachmenttypes diff --git a/app/models/mailer.rb b/app/models/mailer.rb index ef4996eac..131c72c8c 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -141,6 +141,19 @@ class Mailer < ActionMailer::Base :subject => s end + # 用户申请加入项目邮件通知 + def applied_project(applied) + @project =applied.project + redmine_headers 'Project' => @project, + 'User' => applied.user + @user = applied.user + recipients = @project.manager_recipients + s = l(:text_applied_project, :id => "##{@user.show_name}", :project => @project.name) + @applied_url = url_for(:controller => 'projects', :action => 'settings', :id => @project.id,:tab=>'members') + mail :to => recipients, + :subject => s + end + def reminder(user, issues, days) set_language_if_valid user.language @issues = issues @@ -177,25 +190,45 @@ class Mailer < ActionMailer::Base added_to_url = '' @author = attachments.first.author case container.class.name - when 'Project' - added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container) - added_to = "#{l(:label_project)}: #{container}" - recipients = container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect {|u| u.mail} - when 'Version' - added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project) - added_to = "#{l(:label_version)}: #{container.name}" - recipients = container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect {|u| u.mail} - when 'Document' - added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id) - added_to = "#{l(:label_document)}: #{container.title}" - recipients = container.recipients + when 'Project' + added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container) + added_to = "#{l(:label_project)}: #{container}" + recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail } + when 'Course' + added_to_url = url_for(:controller => 'files', :action => 'index', :course_id => container) + added_to = "#{l(:label_course)}: #{container}" + recipients = container.notified_users.select { |user| user.allowed_to?(:view_files, container) }.collect { |u| u.mail } + when 'Version' + added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project) + added_to = "#{l(:label_version)}: #{container.name}" + recipients = container.project.notified_users.select { |user| user.allowed_to?(:view_files, container.project) }.collect { |u| u.mail } + when 'Document' + added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id) + added_to = "#{l(:label_document)}: #{container.title}" + recipients = container.recipients + end + if container.class.name == 'Course' + redmine_headers 'Course' => container.id + @attachments = attachments + @added_to = added_to + @added_to_url = added_to_url + mail :to => recipients, + :subject => "[#{container.name}] #{l(:label_attachment_new)}" + elsif container.class.name == 'Project' + redmine_headers 'Project' => container.id + @attachments = attachments + @added_to = added_to + @added_to_url = added_to_url + mail :to => recipients, + :subject => "[#{container.name}] #{l(:label_attachment_new)}" + else + redmine_headers 'Project' => container.project.identifier + @attachments = attachments + @added_to = added_to + @added_to_url = added_to_url + mail :to => recipients, + :subject => "[#{container.project.name}] #{l(:label_attachment_new)}" end - redmine_headers 'Project' => container.project.identifier - @attachments = attachments - @added_to = added_to - @added_to_url = added_to_url - mail :to => recipients, - :subject => "[#{container.project.name}] #{l(:label_attachment_new)}" end # Builds a Mail::Message object used to email recipients of a news' project when a news item is added. diff --git a/app/models/project.rb b/app/models/project.rb index 5efaf10ab..37ca8f20b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -207,6 +207,12 @@ class Project < ActiveRecord::Base end # end + # 管理员的邮件列表 + def manager_recipients + notified = project.project_infos.collect(&:user) + notified.collect(&:mail) + end + def initialize(attributes=nil, *args) super diff --git a/app/models/user.rb b/app/models/user.rb index 257681cb5..9665a4fb0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -209,10 +209,6 @@ class User < Principal # ====================================================================== - # 集中处理 User 扩展表为空的问题 - # 合并 user_score 属性 - validate :valid_user_extensions - after_save :save_user_extensions def extensions self.user_extensions ||= UserExtensions.new @@ -222,49 +218,6 @@ class User < Principal self.user_score ||= UserScore.new end - alias_method :ori_respond_to?, :respond_to? - def respond_to?(m, include_private = false) - flag = false - flag = ori_respond_to? m.to_sym unless flag - flag = UserExtensions.new.respond_to? m.to_sym unless flag - flag = UserScore.new.respond_to? m.to_sym unless flag - - flag - end - - def method_missing m, *args, &block - if extensions.respond_to? m.to_sym - self.class.send(:define_method, "_meta_#{m}".to_sym) do |*args, &block| - self.extensions.__send__ m.to_sym, *args - end - __send__ "_meta_#{m}".to_sym, *args, &block - - elsif user_score_attr.respond_to? m.to_sym - self.class.send(:define_method, "_meta_#{m}".to_sym) do |*args, &block| - self.user_score_attr.__send__ m.to_sym, *args - end - __send__ "_meta_#{m}".to_sym, *args, &block - - else - super - end - end - - def valid_user_extensions - if !self.extensions.valid? - self.extensions.errors.messages.each do |key, values| - values.each do |value| - self.errors.add key, value - end - end - end - end - - def save_user_extensions - self.extensions.save - self.user_score_attr.save - end - # 集中处理 User 扩展表为空的问题 < end # ====================================================================== #选择项目成员时显示的用户信息文字 diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb index d568dd63c..7f1887b23 100644 --- a/app/views/attachments/_form.html.erb +++ b/app/views/attachments/_form.html.erb @@ -3,10 +3,10 @@ <% container.attachments.each_with_index do |attachment, i| %> <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename readonly', :readonly=>'readonly')%> - <%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 255, :placeholder => l(:label_optional_description), :class => 'description', :style=>"display: inline-block;") + link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') %> <%#= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %> + <%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public, :class => 'is_public')%> <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %> <% end %> diff --git a/app/views/attachments/updateFileDense.js.erb b/app/views/attachments/updateFileDense.js.erb new file mode 100644 index 000000000..86fa36d4c --- /dev/null +++ b/app/views/attachments/updateFileDense.js.erb @@ -0,0 +1,15 @@ +$('#edit-file-dense-form-<%= @attachment.id.to_s%>').hide(); +$('#field_file_dense_id_label<%= @attachment.id.to_s%>').show(); +$('#edit_box_dense<%= @attachment.id.to_s%>').show(); +<%if @attachment.is_public == 1%> +$('#field_file_dense_id_label<%= @attachment.id.to_s%>').html('公开'); +<%else%> +$('#field_file_dense_id_label<%= @attachment.id.to_s%>').html('私有'); +<%end%> +// 下面2种写法都没起作用,暂时使用上面的非本地化模式 +// <%if @attachment.is_public == 1%> +// $('#field_file_dense_id_label<%= @attachment.id.to_s%>').html('<%l(:field_is_public)%>'); +// <%else%> +// $('#field_file_dense_id_label<%= @attachment.id.to_s%>').html('<%l(:field_is_private)%>'); +// <%end%> +// $('#field_file_dense_id_label<%= @attachment.id.to_s%>').html(<%=@newfiledense%>); diff --git a/app/views/files/_course_file_dense_edit.html.erb b/app/views/files/_course_file_dense_edit.html.erb new file mode 100644 index 000000000..53041ef14 --- /dev/null +++ b/app/views/files/_course_file_dense_edit.html.erb @@ -0,0 +1,13 @@ +<% edit_allowed = User.current.allowed_to?(:manage_files, @course) %> +<% if file_dense_list.any? %> + + <%= link_to(image_tag('edit/edit.png'), 'javascript:void(0);',:style=>"white-space:nowrap;", :id=>"edit_box_dense"+attachment.id.to_s , + :onclick =>"$('#edit-file-dense-form-" +attachment.id.to_s+ "').show(); + $('#field_file_dense_id_label" +attachment.id.to_s+ "').hide(); + $('#edit_box_dense" +attachment.id.to_s+ "').hide();") if edit_allowed %> + +<% end %> + diff --git a/app/views/files/_course_show_all_attachment.html.erb b/app/views/files/_course_show_all_attachment.html.erb index 1a8a8ca65..a6da426c6 100644 --- a/app/views/files/_course_show_all_attachment.html.erb +++ b/app/views/files/_course_show_all_attachment.html.erb @@ -18,6 +18,7 @@ <%= sort_header_tag('size', :caption => l(:field_filesize), :default_order => 'desc', :scope => "col", :id => "vzebra-children") %> <%= sort_header_tag('attach_type', :caption => l(:attachment_browse), :default_order => 'desc', :scope => "col", :id => "vzebra-attachmenttype") %> <%= sort_header_tag('content_type', :caption => l(:attachment_sufix_browse), :default_order => 'desc', :scope => "col", :id => "vzebra-contenttype") %> + <%= sort_header_tag('field_file_dense', :caption => l(:field_file_dense), :default_order => 'desc', :scope => "col", :id => "vzebra-field_file_dense") %> <%= sort_header_tag('downloads', :caption => l(:field_downloads), :default_order => 'desc', :scope => "col", :id => "vzebra-action") %> <%= sort_header_tag('operation', :caption => "", :scope => "col", :id => "vzebra-children") %> @@ -34,6 +35,9 @@ <% end -%> <% container.attachments.each do |file| %> + <%if file.is_public == 0 && !User.current.member_of?(@project)%> + <%next%> + <%end%> "> <%= link_to_attachment file, :download => true, :title => file.filename+"\n"+file.description.to_s, :style => "width: 230px; overflow: hidden; white-space: nowrap;text-overflow: ellipsis;" %> @@ -45,6 +49,14 @@ <%= file.show_suffix_type %> + + <%= file.file_dense_str %> +   + + <%= render :partial => 'course_file_dense_edit', :locals => {:file_dense_list => file.file_dense_list, + :attachment => file} %> + + <%= file.downloads %> diff --git a/app/views/files/_course_sort_by_attachtypel.html.erb b/app/views/files/_course_sort_by_attachtypel.html.erb index f73cac072..cda832493 100644 --- a/app/views/files/_course_sort_by_attachtypel.html.erb +++ b/app/views/files/_course_sort_by_attachtypel.html.erb @@ -5,66 +5,78 @@ <% edit_allowed = User.current.allowed_to?(:manage_files, @course) %> - - - - - - - + + + + + + + <%= sort_header_tag('filename', :caption => l(:field_filename), :scope => "col", :id => "vzebra-adventure") %> <%#= sort_header_tag('created_on', :caption => l(:label_date), :default_order => 'desc', :scope => "col", :id => "vzebra-comedy") %> <%= sort_header_tag('size', :caption => l(:field_filesize), :default_order => 'desc', :scope => "col", :id => "vzebra-children") %> <%= sort_header_tag('attach_type', :caption => l(:attachment_browse), :default_order => 'desc', :scope => "col", :id => "vzebra-attachmenttype") %> - <%= sort_header_tag('content_type', :caption => l(:attachment_sufix_browse), :default_order => 'desc', :scope =>"col", :id=> "vzebra-contenttype")%> + <%= sort_header_tag('content_type', :caption => l(:attachment_sufix_browse), :default_order => 'desc', :scope => "col", :id => "vzebra-contenttype") %> + <%= sort_header_tag('field_file_dense', :caption => l(:field_file_dense), :default_order => 'desc', :scope => "col", :id => "vzebra-field_file_dense") %> <%= sort_header_tag('downloads', :caption => l(:field_downloads), :default_order => 'desc', :scope => "col", :id => "vzebra-action") %> <%= sort_header_tag('operation', :caption => "", :scope => "col", :id => "vzebra-children") %> - - + + <% @containers.each do |container| %> - <% next if container.attachments.empty? -%> - <% container.attachments.each do |file| %> - <% if isTypeOk(file,selAttachType,selContentType) %> - "> - - - - "> + + + + - - - - - - - - - <% end -%> - <% end -%> - <% reset_cycle %> - <% end -%> - - + + + + + + + + + + + <% end -%> + <% end -%> + <% reset_cycle %> + <% end -%> + +
<%= link_to_attachment file, :download => true, :title => file.filename+"\n"+file.description.to_s, :style => "width: 230px; overflow: hidden; white-space: nowrap;text-overflow: ellipsis;" %><%= number_to_human_size(file.filesize) %> - <%= file.attachmentstype.typeName %> -   + <% next if container.attachments.empty? -%> + <% container.attachments.each do |file| %> + <% if file.is_public == 0 && !User.current.member_of?(@project) %> + <% next %> + <% end %> + <% if isTypeOk(file, selAttachType, selContentType) %> +
<%= link_to_attachment file, :download => true, :title => file.filename+"\n"+file.description.to_s, :style => "width: 230px; overflow: hidden; white-space: nowrap;text-overflow: ellipsis;" %><%= number_to_human_size(file.filesize) %> + <%= file.attachmentstype.typeName %> +   <%= render :partial => 'attachments/course_type_edit', :locals => {:attachmenttypes => attachmenttypes, - :attachment => file,:contentype=>selContentType} %> + :attachment => file, :contentype => selContentType} %> - <%= file.show_suffix_type %><%= file.downloads %> - <%= link_to(image_tag('delete.png'), attachment_path(file), - :data => {:confirm => l(:text_are_you_sure)}, :method => :delete) if delete_allowed %> -
-
- <%# @preTags = %w|预设A 预设B 预设C 预设D 预设E 预设Z | %> - <%= render :partial => 'tags/tag', :locals => {:obj => file, :object_flag => "6"} %> -
-
- -
<%= file.show_suffix_type %> + <%= file.file_dense_str %> +   + + <%= render :partial => 'course_file_dense_edit', :locals => {:file_dense_list => file.file_dense_list, + :attachment => file} %> + + <%= file.downloads %> + <%= link_to(image_tag('delete.png'), attachment_path(file), + :data => {:confirm => l(:text_are_you_sure)}, :method => :delete) if delete_allowed %> +
+
+ <%# @preTags = %w|预设A 预设B 预设C 预设D 预设E 预设Z | %> + <%= render :partial => 'tags/tag', :locals => {:obj => file, :object_flag => "6"} %> +
+
+ +
diff --git a/app/views/files/_project_file_dense_edit.html.erb b/app/views/files/_project_file_dense_edit.html.erb new file mode 100644 index 000000000..daa4b927d --- /dev/null +++ b/app/views/files/_project_file_dense_edit.html.erb @@ -0,0 +1,13 @@ +<% edit_allowed = User.current.allowed_to?(:manage_files, @project) %> +<% if file_dense_list.any? %> + + <%= link_to(image_tag('edit/edit.png'), 'javascript:void(0);',:style=>"white-space:nowrap;", :id=>"edit_box_dense"+attachment.id.to_s , + :onclick =>"$('#edit-file-dense-form-" +attachment.id.to_s+ "').show(); + $('#field_file_dense_id_label" +attachment.id.to_s+ "').hide(); + $('#edit_box_dense" +attachment.id.to_s+ "').hide();") if edit_allowed %> + +<% end %> + diff --git a/app/views/files/_show_all_attachment.html.erb b/app/views/files/_show_all_attachment.html.erb index 07dc6a27f..8c624d176 100644 --- a/app/views/files/_show_all_attachment.html.erb +++ b/app/views/files/_show_all_attachment.html.erb @@ -18,6 +18,7 @@ <%= sort_header_tag('size', :caption => l(:field_filesize), :default_order => 'desc', :scope => "col", :id => "vzebra-children") %> <%= sort_header_tag('attach_type', :caption => l(:attachment_browse), :default_order => 'desc', :scope => "col", :id => "vzebra-attachmenttype") %> <%= sort_header_tag('content_type', :caption => l(:attachment_sufix_browse), :default_order => 'desc', :scope => "col", :id => "vzebra-contenttype") %> + <%= sort_header_tag('field_file_dense', :caption => l(:field_file_dense), :default_order => 'desc', :scope => "col", :id => "vzebra-field_file_dense") %> <%= sort_header_tag('downloads', :caption => l(:field_downloads), :default_order => 'desc', :scope => "col", :id => "vzebra-action") %> <%= sort_header_tag('operation', :caption => "", :scope => "col", :id => "vzebra-children") %> @@ -34,6 +35,9 @@ <% end -%> <% container.attachments.each do |file| %> + <%if file.is_public == 0 && !User.current.member_of?(@project)%> + <%next%> + <%end%> "> <%= link_to_attachment file, :download => true, :title => file.filename+"\n"+file.description.to_s, :style => "width: 230px; overflow: hidden; white-space: nowrap;text-overflow: ellipsis;" %> @@ -45,6 +49,14 @@ <%= file.show_suffix_type %> + + <%= file.file_dense_str %> +   + + <%= render :partial => 'project_file_dense_edit', :locals => {:file_dense_list => file.file_dense_list, + :attachment => file} %> + + <%= file.downloads %> diff --git a/app/views/files/_sort_by_attachtypel.html.erb b/app/views/files/_sort_by_attachtypel.html.erb index 01c57c490..d3723c340 100644 --- a/app/views/files/_sort_by_attachtypel.html.erb +++ b/app/views/files/_sort_by_attachtypel.html.erb @@ -5,66 +5,78 @@ <% edit_allowed = User.current.allowed_to?(:manage_files, @project) %> - - - - - - - + + + + + + + <%= sort_header_tag('filename', :caption => l(:field_filename), :scope => "col", :id => "vzebra-adventure") %> <%#= sort_header_tag('created_on', :caption => l(:label_date), :default_order => 'desc', :scope => "col", :id => "vzebra-comedy") %> <%= sort_header_tag('size', :caption => l(:field_filesize), :default_order => 'desc', :scope => "col", :id => "vzebra-children") %> <%= sort_header_tag('attach_type', :caption => l(:attachment_browse), :default_order => 'desc', :scope => "col", :id => "vzebra-attachmenttype") %> - <%= sort_header_tag('content_type', :caption => l(:attachment_sufix_browse), :default_order => 'desc', :scope =>"col", :id=> "vzebra-contenttype")%> + <%= sort_header_tag('content_type', :caption => l(:attachment_sufix_browse), :default_order => 'desc', :scope => "col", :id => "vzebra-contenttype") %> + <%= sort_header_tag('field_file_dense', :caption => l(:field_file_dense), :default_order => 'desc', :scope => "col", :id => "vzebra-field_file_dense") %> <%= sort_header_tag('downloads', :caption => l(:field_downloads), :default_order => 'desc', :scope => "col", :id => "vzebra-action") %> <%= sort_header_tag('operation', :caption => "", :scope => "col", :id => "vzebra-children") %> - - + + <% @containers.each do |container| %> - <% next if container.attachments.empty? -%> - <% container.attachments.each do |file| %> - <% if isTypeOk(file,selAttachType,selContentType) %> - "> - - - - "> + + + + - - - - - - - - - <% end -%> - <% end -%> - <% reset_cycle %> - <% end -%> - - + + + + + + + + + + + <% end -%> + <% end -%> + <% reset_cycle %> + <% end -%> + +
<%= link_to_attachment file, :download => true, :title => file.filename+"\n"+file.description.to_s, :style => "width: 230px; overflow: hidden; white-space: nowrap;text-overflow: ellipsis;" %><%= number_to_human_size(file.filesize) %> - <%= file.attachmentstype.typeName %> -   + <% next if container.attachments.empty? -%> + <% container.attachments.each do |file| %> + <% if file.is_public == 0 && !User.current.member_of?(@project) %> + <% next %> + <% end %> + <% if isTypeOk(file, selAttachType, selContentType) %> +
<%= link_to_attachment file, :download => true, :title => file.filename+"\n"+file.description.to_s, :style => "width: 230px; overflow: hidden; white-space: nowrap;text-overflow: ellipsis;" %><%= number_to_human_size(file.filesize) %> + <%= file.attachmentstype.typeName %> +   <%= render :partial => 'attachments/type_edit', :locals => {:attachmenttypes => attachmenttypes, - :attachment => file,:contentype=>selContentType} %> + :attachment => file, :contentype => selContentType} %> - <%= file.show_suffix_type %><%= file.downloads %> - <%= link_to(image_tag('delete.png'), attachment_path(file), - :data => {:confirm => l(:text_are_you_sure)}, :method => :delete) if delete_allowed %> -
-
- <%# @preTags = %w|预设A 预设B 预设C 预设D 预设E 预设Z | %> - <%= render :partial => 'tags/tag', :locals => {:obj => file, :object_flag => "6"} %> -
-
- -
<%= file.show_suffix_type %> + <%= file.file_dense_str %> +   + + <%= render :partial => 'project_file_dense_edit', :locals => {:file_dense_list => file.file_dense_list, + :attachment => file} %> + + <%= file.downloads %> + <%= link_to(image_tag('delete.png'), attachment_path(file), + :data => {:confirm => l(:text_are_you_sure)}, :method => :delete) if delete_allowed %> +
+
+ <%# @preTags = %w|预设A 预设B 预设C 预设D 预设E 预设Z | %> + <%= render :partial => 'tags/tag', :locals => {:obj => file, :object_flag => "6"} %> +
+
+ +
diff --git a/app/views/files/index.html.erb b/app/views/files/index.html.erb index b086b90db..69b41fc28 100644 --- a/app/views/files/index.html.erb +++ b/app/views/files/index.html.erb @@ -207,6 +207,23 @@ <%end%> } + + // 编辑文件密级 + function file_dense_edit(id, type) { + $.ajax({ + url: '<%=updateFileDense_attachments_path%>', + type: "POST", + remote:"true", + data: { + attachmentid: encodeURIComponent(id), + newtype: encodeURIComponent(type) + } + + }).complete(function (xhr, textStatus) { + }); + + } + diff --git a/app/views/layouts/_base_footer.html.erb b/app/views/layouts/_base_footer.html.erb index 74610d14b..e9bd8002b 100644 --- a/app/views/layouts/_base_footer.html.erb +++ b/app/views/layouts/_base_footer.html.erb @@ -29,7 +29,7 @@ - diff --git a/app/views/layouts/_base_header.html.erb b/app/views/layouts/_base_header.html.erb index 983c83d2d..9b03fd776 100644 --- a/app/views/layouts/_base_header.html.erb +++ b/app/views/layouts/_base_header.html.erb @@ -1,20 +1,20 @@ <% request.headers['REQUEST_URI'] = "" if request.headers['REQUEST_URI'].nil? realUrl = request.original_url - if (realUrl.match(/forge\.trustie\.net\/*/)) + if (realUrl.match(/.*forge\.trustie\.net\/*/)) @nav_dispaly_project_label = 1 @nav_dispaly_forum_label = 1 - elsif (realUrl.match(/course\.trustie\.net\/*/)) + elsif (realUrl.match(/.*course\.trustie\.net\/*/)) @nav_dispaly_course_all_label = 1 @nav_dispaly_forum_label = 1 @nav_dispaly_course_label = nil @nav_dispaly_store_all_label = 1 - elsif (realUrl.match(/user\.trustie\.net\/*/)) + elsif (realUrl.match(/.*user\.trustie\.net\/*/)) @nav_dispaly_home_path_label = 1 @nav_dispaly_main_course_label = 1 @nav_dispaly_main_project_label = 1 @nav_dispaly_main_contest_label = 1 - elsif (realUrl.match(/contest\.trustie\.net\/*/)) + elsif (realUrl.match(/.*contest\.trustie\.net\/*/)) @nav_dispaly_contest_label = 1 @nav_dispaly_store_all_label = 1 else diff --git a/app/views/mailer/applied_project.html.erb b/app/views/mailer/applied_project.html.erb new file mode 100644 index 000000000..4f266e6ce --- /dev/null +++ b/app/views/mailer/applied_project.html.erb @@ -0,0 +1,5 @@ +<%= l(:text_applied_project, :id => "##{@user.show_name}", :project => @project.name) %> +
+ +

<%= link_to(h(@project.name), @applied_url) %>

+ diff --git a/app/views/mailer/applied_project.text.erb b/app/views/mailer/applied_project.text.erb new file mode 100644 index 000000000..7af8c2018 --- /dev/null +++ b/app/views/mailer/applied_project.text.erb @@ -0,0 +1,4 @@ +<%= l(:text_applied_project, :id => "##{@user.show_name}", :project => @project.name) %> + +

<%= link_to(h(@project.name), @applied_url) %>

+ diff --git a/config/locales/en.yml b/config/locales/en.yml index 4c177b58e..2231100b7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -233,6 +233,7 @@ en: field_mail: Email field_job_category: Job category # added by bai field_filename: File + field_file_dense: File Dense field_filesize: Size field_downloads: Downloads field_author: Author @@ -1079,6 +1080,7 @@ en: text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours." text_project_closed: This project is closed and read-only. text_turning_multiple_off: "If you disable multiple values, multiple values will be removed in order to preserve only one value per item." + text_applied_project: "User %{id} Apply Join Project %{project}" default_role_manager: Manager default_role_developer: Developer diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 2b85de114..e466e3da9 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -251,6 +251,7 @@ zh: field_lastname_eg: '(例:张三丰,请填写[张])' field_mail: 邮件地址 field_filename: 文件 + field_file_dense: 文件密级 field_filesize: 大小 field_downloads: 下载次数 field_author: 作者 @@ -1105,6 +1106,7 @@ zh: text_own_membership_delete_confirmation: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗? text_zoom_in: 放大 text_zoom_out: 缩小 + text_applied_project: "用户 %{id} 申请加入项目 %{project}" default_role_manager: 管理人员 default_role_developer: 开发人员 diff --git a/config/routes.rb b/config/routes.rb index f9dd53cf3..1ad026dc3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -515,6 +515,7 @@ RedmineApp::Application.routes.draw do resources :attachments, :only => [:show, :destroy] do collection do match "updateType" , via: [:get, :post] + match "updateFileDense" , via: [:get, :post] match "renderTag" , via: [:get, :post] end end diff --git a/config/settings.yml b/config/settings.yml index 268198d4f..8c9f55ae0 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -249,3 +249,5 @@ contest_domain: default: contest.trustie.net course_domain: default: course.trustie.net +repository_domain: + default: repository.trustie.net diff --git a/db/migrate/20140707095213_add_quate_project_permission.rb b/db/migrate/20140707095213_add_quate_project_permission.rb new file mode 100644 index 000000000..f47c6a0ac --- /dev/null +++ b/db/migrate/20140707095213_add_quate_project_permission.rb @@ -0,0 +1,11 @@ +class AddQuateProjectPermission < ActiveRecord::Migration + def change + # 添加课程权限 + Role.all.each do |role| + if role.name == 'Manager' + role.permissions.append(:quote_project) + role.save(:validate => false) + end + end + end +end diff --git a/db/migrate/20140710024054_add_is_public_to_attachment.rb b/db/migrate/20140710024054_add_is_public_to_attachment.rb new file mode 100644 index 000000000..2276304c8 --- /dev/null +++ b/db/migrate/20140710024054_add_is_public_to_attachment.rb @@ -0,0 +1,5 @@ +class AddIsPublicToAttachment < ActiveRecord::Migration + def change + add_column :attachments, :is_public, :integer,:default => 1 + end +end diff --git a/db/migrate/20140710030426_update_attachment_public_attr.rb b/db/migrate/20140710030426_update_attachment_public_attr.rb new file mode 100644 index 000000000..339c52543 --- /dev/null +++ b/db/migrate/20140710030426_update_attachment_public_attr.rb @@ -0,0 +1,22 @@ +class UpdateAttachmentPublicAttr < ActiveRecord::Migration + def up + # 更新资源文件的is_public属性 + Attachment.all.each do |res| + if res.is_public + if(res.container.nil? || + (res.container.class.to_s=="Project" && res.container.is_public == false) || + (res.container.has_attribute?(:project) && res.container.project && res.container.project.is_public == false) || + (res.container.class.to_s=="HomeworkAttach" && res.container.bid.reward_type == 3) || + (res.container.class.to_s=="Course" && res.container.is_public == false) || + (res.container.has_attribute?(:course) && res.container.course && res.container.course.is_public == false) + ) + res.is_public = false + res.save + end + end + end + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index fd5c9741b..8fa520eba 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20140704034832) do +ActiveRecord::Schema.define(:version => 20140710030426) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -51,6 +51,7 @@ ActiveRecord::Schema.define(:version => 20140704034832) do t.string "description" t.string "disk_directory" t.integer "attachtype", :default => 1 + t.integer "is_public", :default => 1 end add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id" diff --git a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb index 30bbaedda..1318f8afa 100644 --- a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb +++ b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb @@ -60,11 +60,28 @@ module Redmine @unsaved_attachments ||= [] end + # 设置资源文件的公开属性 + # add by nwb + def set_attachment_public(res) + # 公开的资源判断他的父级的公开属性 + if res.is_public + if( (self.class.to_s=="Project" && self.is_public == false) || + (self.has_attribute?(:project) && self.project && self.project.is_public == false) || + (self.class.to_s=="HomeworkAttach" && self.bid.reward_type == 3) || + (self.class.to_s=="Course" && self.is_public == false) || + (self.has_attribute?(:course) && self.course && self.course.is_public == false) + ) + res.is_public = false + end + end + end + def save_attachmentsex(attachments, author=User.current,attachment_type) @curattachment_type = attachment_type result = save_attachments(attachments,author) result end + def save_attachments(attachments, author=User.current) if attachments.is_a?(Hash) attachments = attachments.stringify_keys @@ -94,6 +111,10 @@ module Redmine a.filename = attachment['filename'] unless attachment['filename'].blank? a.content_type = attachment['content_type'] end + if !attachment[:is_public] + a.is_public = false + end + set_attachment_public(a) next unless a a.description = attachment['description'].to_s.strip a.attachtype = @curattachment_type; diff --git a/lib/redmine.rb b/lib/redmine.rb index 12b68efa7..adf033d69 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -98,6 +98,7 @@ Redmine::AccessControl.map do |map| map.permission :manage_versions, {:projects => :settings, :versions => [:new, :create, :edit, :update, :close_completed, :destroy]}, :require => :member map.permission :add_subprojects, {:projects => [:new, :create]}, :require => :member map.permission :view_journals_for_messages, {:gantts => [:show, :update]}, :read => true + map.permission :quote_project, {},:require => :member #课程权限模块 #added by nwb diff --git a/public/javascripts/attachments.js b/public/javascripts/attachments.js index 663183b9a..c60a77bd3 100644 --- a/public/javascripts/attachments.js +++ b/public/javascripts/attachments.js @@ -23,7 +23,9 @@ function addFile(inputEl, file, eagerUpload) { fileSpan.append( $('', { 'type': 'text', 'class': 'filename readonly', 'name': 'attachments[' + attachmentId + '][filename]', 'readonly': 'readonly'} ).val(file.name), $('', { 'type': 'text', 'class': 'description', 'name': 'attachments[' + attachmentId + '][description]', 'maxlength': 255, 'placeholder': $(inputEl).data('description-placeholder') } ).toggle(!eagerUpload), - $(' ').attr({ 'href': "#", 'class': 'remove-upload', 'data-confirm' : "您确定要删除吗?" }).click(removeFile).toggle(!eagerUpload), + $('公开:').attr({ 'class': 'ispublic-label' }) , + $('', { 'type': 'checkbox', 'class': 'is_public_checkbox','value':1, 'name': 'attachments[' + attachmentId + '][is_public]', checked:'checked' } ).toggle(!eagerUpload), + $(' ').attr({ 'href': "#", 'class': 'remove-upload', 'data-confirm' : "您确定要删除吗?" }).click(removeFile).toggle(!eagerUpload), $('
', { 'class': 'div_attachments', 'name': 'div_'+'attachments_' + attachmentId} ) ).appendTo('#attachments_fields'); @@ -63,6 +65,7 @@ function ajaxUpload(file, attachmentId, fileSpan, inputEl) { .done(function(result) { progressSpan.progressbar( 'value', 100 ).remove(); fileSpan.find('input.description, a').css('display', 'inline-block'); + fileSpan.find('input.is_public_checkbox, a').css('display', 'inline-block'); }) .fail(function(result) { progressSpan.text(result.statusText); diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 89ee39ada..10b8fb328 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -1850,6 +1850,8 @@ span.required {color: #bb0000;} #attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; } a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%; width:1px; display:inline-block; padding-left:16px;} a.remove-upload:hover {text-decoration:none !important;} +#attachments_fields input.is_public_checkbox {width:20px;} +#attachments_fields span.ispublic-label {width:50px;margin-left:10px; } /*gcm upload file count and deleteall*/ #upload_file_count #count {color:red; font-size:1.5em;} diff --git a/public/stylesheets/nyan.css b/public/stylesheets/nyan.css index 30496a061..b57796aa3 100644 --- a/public/stylesheets/nyan.css +++ b/public/stylesheets/nyan.css @@ -1081,6 +1081,11 @@ div.tags_area { border-bottom: 1px solid #c8d4fd; } +#ver-zebra #vzebra-field_file_dense, #ver-zebra #vzebra-children { + background: #ffffff; + border-bottom: 1px solid #c8d4fd; +} + #ver-zebra #vzebra-comedy, #ver-zebra #vzebra-action { background: #ffffff; border-bottom: 1px solid #d6dfff;