Conflicts:
	app/views/layouts/base_projects.html.erb
memcached_alan
whimlex 11 years ago
commit b400c9bb11

@ -2,6 +2,7 @@
module Mobile module Mobile
module Apis module Apis
class Comments < Grape::API class Comments < Grape::API
include ApplicationHelper
resource :comments do resource :comments do
desc '课程通知评论' desc '课程通知评论'
params do params do
@ -82,8 +83,8 @@ module Mobile
memo: {:subject => params[:subject],:content => '该贴来自手机App意见反馈'}, memo: {:subject => params[:subject],:content => '该贴来自手机App意见反馈'},
} }
cs = CommentService.new cs = CommentService.new
memo = cs.create_feedback cs_params, current_user memo,message = cs.create_feedback cs_params, current_user
raise "commit failed #{memo.errors.full_messages}" if memo.new_record? raise message if memo.new_record?
present :status, 0 present :status, 0
end end

@ -20,7 +20,7 @@ class ForumsController < ApplicationController
#@memo.author_id = User.current.id #@memo.author_id = User.current.id
#@forum = @memo.forum #@forum = @memo.forum
cs = CommentService.new cs = CommentService.new
@memo = cs.create_feedback params,User.current @memo,message = cs.create_feedback params,User.current
respond_to do |format| respond_to do |format|
if !@memo.new_record? if !@memo.new_record?
format.html { redirect_to forum_path(@memo.forum) } format.html { redirect_to forum_path(@memo.forum) }

@ -340,6 +340,7 @@ class ProjectsController < ApplicationController
@is_zhuce =false @is_zhuce =false
flash[:notice] = l(:notice_email_sent, :value => email) flash[:notice] = l(:notice_email_sent, :value => email)
else else
flash[:error] = l(:notice_registed_success, :value => email)
@is_zhuce = true @is_zhuce = true
end end
respond_to do |format| respond_to do |format|

@ -60,4 +60,8 @@ module ApiHelper
end end
[count,is_teacher] [count,is_teacher]
end end
def get_user_language user
(user.language.nil? || user.language == "") ? 'zh':user.language
end
end end

@ -43,7 +43,7 @@ module WatchersHelper
) )
method = watched ? 'delete' : 'post' method = watched ? 'delete' : 'post'
link_to text, url, :remote => true, :method => method, :class => css link_to text, url, :remote => true, :method => method, :style => "color: #fff; display:block; padding: 0px 5px; margin-right: 10px; height: 22px; line-height: 21px;padding-top:1px; background: none repeat scroll 0% 0% #64BDD9; TES"
end end
############## added by linchun ############## added by linchun
@ -278,11 +278,11 @@ module WatchersHelper
) )
method = applied ? 'delete' : 'post' method = applied ? 'delete' : 'post'
link_to text, url, :remote => true, :method => method ,:class=>css link_to text, url, :remote => true, :method => method ,:style => "color: #fff; display:block; padding: 0px 5px; margin-right: 10px; height: 21px; line-height: 22px;padding-top:1px; background: none repeat scroll 0% 0% #64BDD9; TES"
end end
def exit_project_link(project) def exit_project_link(project)
link_to(l(:label_exit_project),exit_cur_project_path(project.id), link_to(l(:label_exit_project),exit_cur_project_path(project.id),
:remote => true, :confirm => l(:lable_sure_exit_project), :style => "color: #fff; display:block; padding: 0px 5px; margin-right: 10px; height: 22px; line-height: 22px; background: none repeat scroll 0% 0% #64BDD9; TES" ) :remote => true, :confirm => l(:lable_sure_exit_project), :style => "color: #fff; display:block; padding: 0px 5px; margin-right: 10px; height: 21px; line-height: 22px; background: none repeat scroll 0% 0% #64BDD9; TES;padding-top:1px;" )
end end
end end

@ -1,4 +1,6 @@
class CommentService class CommentService
include ApiHelper
include Redmine::I18n
#评论 #评论
def news_comments params,current_user def news_comments params,current_user
@news = News.find(params[:id]) @news = News.find(params[:id])
@ -84,7 +86,8 @@ class CommentService
@memo.forum_id = "1" @memo.forum_id = "1"
@memo.author_id = current_user.id @memo.author_id = current_user.id
@memo.save @memo.save
@memo message = "#{l(:label_commit_failed,:locale => get_user_language(current_user))}: #{@memo.errors.full_messages}" if @memo.new_record?
[@memo,message]
end end
#课程留言列表 #课程留言列表

@ -38,7 +38,7 @@ class CoursesService
if name.blank? if name.blank?
raise 'sumbit empty' raise 'sumbit empty'
end end
@courses = courses_all.visible @courses = courses_all.visible(current_user)
if params[:name].present? if params[:name].present?
@courses_all = @courses.like(params[:name]) @courses_all = @courses.like(params[:name])
else else
@ -346,7 +346,7 @@ class CoursesService
membership = @user.coursememberships.all(:conditions => Course.visible_condition(current_user)) membership = @user.coursememberships.all(:conditions => Course.visible_condition(current_user))
end end
if membership.nil? || membership.count == 0 if membership.nil? || membership.count == 0
raise l(:label_no_courses,:locale => current_user.language.nil? ? 'zh':current_user.language) raise l(:label_no_courses,:locale => get_user_language(current_user))
end end
membership.sort! {|older, newer| newer.created_on <=> older.created_on } membership.sort! {|older, newer| newer.created_on <=> older.created_on }
result = [] result = []
@ -355,19 +355,19 @@ class CoursesService
latest_course_dynamics = [] latest_course_dynamics = []
latest_news = course.news.order("created_on desc").first latest_news = course.news.order("created_on desc").first
unless latest_news.nil? unless latest_news.nil?
latest_course_dynamics << {:type => 1,:time => latest_news.created_on,:message => l(:label_recently_updated_notification,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 1,:time => latest_news.created_on,:message => l(:label_recently_updated_notification,:locale => get_user_language(current_user))}
end end
latest_message = course.journals_for_messages.order("created_on desc").first latest_message = course.journals_for_messages.order("created_on desc").first
unless latest_message.nil? unless latest_message.nil?
latest_course_dynamics << {:type => 2,:time => latest_message.created_on,:message => l(:label_recently_updated_message,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 2,:time => latest_message.created_on,:message => l(:label_recently_updated_message,:locale => get_user_language(current_user))}
end end
latest_attachment = course.attachments.order("created_on desc").first latest_attachment = course.attachments.order("created_on desc").first
unless latest_attachment.nil? unless latest_attachment.nil?
latest_course_dynamics << {:type => 3,:time => latest_attachment.created_on,:message => l(:label_recently_updated_courseware,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 3,:time => latest_attachment.created_on,:message => l(:label_recently_updated_courseware,:locale => get_user_language(current_user))}
end end
latest_bid = course.homeworks.order('updated_on DESC').first latest_bid = course.homeworks.order('updated_on DESC').first
unless latest_bid.nil? unless latest_bid.nil?
latest_course_dynamics << {:type => 4,:time => latest_bid.updated_on,:message => l(:label_recently_updated_homework,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 4,:time => latest_bid.updated_on,:message => l(:label_recently_updated_homework,:locale => get_user_language(current_user))}
end end
#每个作业中的最新留言 #每个作业中的最新留言
messages = [] messages = []
@ -382,7 +382,7 @@ class CoursesService
end end
latest_bid_message = messages.first latest_bid_message = messages.first
unless latest_bid_message.nil? unless latest_bid_message.nil?
latest_course_dynamics << {:type => 4,:time => latest_bid_message.created_on,:message => l(:label_recently_updated_message,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 4,:time => latest_bid_message.created_on,:message => l(:label_recently_updated_message,:locale => get_user_language(current_user))}
end end
#每个作业中学生最后提交的作业 #每个作业中学生最后提交的作业
homeworks = [] homeworks = []
@ -397,7 +397,7 @@ class CoursesService
end end
latest_homework_attach = homeworks.first latest_homework_attach = homeworks.first
unless latest_homework_attach.nil? unless latest_homework_attach.nil?
latest_course_dynamics << {:type => 4,:time => latest_homework_attach.updated_at,:message => l(:label_recently_updated_homework,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 4,:time => latest_homework_attach.updated_at,:message => l(:label_recently_updated_homework,:locale => get_user_language(current_user))}
end end
latest_course_dynamics.sort!{|order,newer| newer[:time] <=> order[:time]} latest_course_dynamics.sort!{|order,newer| newer[:time] <=> order[:time]}
latest_course_dynamic = latest_course_dynamics.first latest_course_dynamic = latest_course_dynamics.first

@ -193,7 +193,6 @@ class UsersService
@current_user.save @current_user.save
#raise @current_user.errors.full_message #raise @current_user.errors.full_message
#return @current_user #return @current_user
else else
raise 'wrong password' raise 'wrong password'
end end

@ -44,7 +44,7 @@
<div class="talk_top"> <div class="talk_top">
<div class="fl">项目讨论区共有<span><%= @topic_count %></span>个帖子 </div> <div class="fl">项目讨论区共有<span><%= @topic_count %></span>个帖子 </div>
<% if @project.enabled_modules.where("name = 'boards'").count > 0 && User.current.member_of?(@project) %> <% if @project.enabled_modules.where("name = 'boards'").count > 0 && User.current.member_of?(@project) %>
<span id = 'tttttttt'><%= link_to l(:label_message_new), new_board_message_path(@board), <span><%= link_to l(:label_message_new), new_board_message_path(@board),
:class => 'problem_new_btn fl', :class => 'problem_new_btn fl',
:onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.logged? %></span> :onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.logged? %></span>
<% end %> <% end %>
@ -61,14 +61,14 @@
<div> <div>
<span><%= link_to h(topic.subject), board_message_path(@board, topic), title:topic.subject.to_s, :class =>"problem_tit fl" %></span> <span><%= link_to h(topic.subject), board_message_path(@board, topic), title:topic.subject.to_s, :class =>"problem_tit fl" %></span>
<% if topic.sticky? %> <% if topic.sticky? %>
<span class="talk_up">置顶</span> <span class="talk_up">置顶</span>
<% end %> <% end %>
</div> </div>
<div class="problem_line"> <div class="problem_line">
<span>由<%= link_to topic.author, user_path(topic.author), :class =>"problem_name" %></span> <span>由<%= link_to topic.author, user_path(topic.author), :class =>"problem_name" %></span>
<span>添加于<%= format_time topic.created_on %></span> <span>添加于<%= format_time topic.created_on %></span>
</div> </div>
</div> </div>
<span class="talk_btn fr">回复<%= link_to (topic.replies_count), board_message_path(@board, topic), :style =>"color:#fff;" %></span> <span class="talk_btn fr">回复<%= link_to (topic.replies_count), board_message_path(@board, topic), :style =>"color:#fff;" %></span>
<div class="cl"></div> <div class="cl"></div>
</div><!--讨论主类容 end--> </div><!--讨论主类容 end-->

@ -12,7 +12,7 @@
<% end %> <% end %>
<%= watcher_link(@issue, User.current) %>
<%= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:add_issues, @project) %> <%= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:add_issues, @project) %>
<%= link_to l(:button_delete), issue_path(@issue.id), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'icon icon-del' if User.current.allowed_to?(:delete_issues, @project) %> <%= link_to l(:button_delete), issue_path(@issue.id), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'icon icon-del' if User.current.allowed_to?(:delete_issues, @project) %>
</div> </div>

@ -1,181 +1,181 @@
<div class="project_r_h"> <div class="project_r_h">
<h2 class="project_h2"><%= l(:label_issue_plural) %></h2> <h2 class="project_h2"><%= l(:label_issue_plural) %></h2>
</div> </div>
<%# html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %> <%# html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
<% html_title "#{@issue.tracker.name} #{@issue.source_from}'#'#{@issue.project_index}: #{@issue.subject}" %> <% html_title "#{@issue.tracker.name} #{@issue.source_from}'#'#{@issue.project_index}: #{@issue.subject}" %>
<%= render :partial => 'action_menu' %> <%= render :partial => 'action_menu' %>
<h3> <h3>
<%= issue_heading(@issue) %> <%= issue_heading(@issue) %>
</h3> </h3>
<style type="text/css"></style> <style type="text/css"></style>
<div class="<%= @issue.css_classes %> details"> <div class="<%= @issue.css_classes %> details">
<% if @prev_issue_id || @next_issue_id %> <% if @prev_issue_id || @next_issue_id %>
<div class="next-prev-links contextual"> <div class="next-prev-links contextual">
<%= link_to_if @prev_issue_id, <%= link_to_if @prev_issue_id,
"\xc2\xab #{l(:label_previous)}", "\xc2\xab #{l(:label_previous)}",
(@prev_issue_id ? issue_path(Issue.find_by_id(@prev_issue_id)) : nil), (@prev_issue_id ? issue_path(Issue.find_by_id(@prev_issue_id)) : nil),
:title => "##{@prev_issue_id}" %> | :title => "##{@prev_issue_id}" %> |
<% if @issue_position && @issue_count %> <% if @issue_position && @issue_count %>
<span class="position"><%= l(:label_item_position, :position => @issue_position, :count => @issue_count) %></span> | <span class="position"><%= l(:label_item_position, :position => @issue_position, :count => @issue_count) %></span> |
<% end %> <% end %>
<%= link_to_if @next_issue_id, <%= link_to_if @next_issue_id,
"#{l(:label_next)} \xc2\xbb", "#{l(:label_next)} \xc2\xbb",
(@next_issue_id ? issue_path(Issue.find_by_id(@next_issue_id)) : nil), (@next_issue_id ? issue_path(Issue.find_by_id(@next_issue_id)) : nil),
:title => "##{@next_issue_id}" %> :title => "##{@next_issue_id}" %>
</div> </div>
<% end %> <% end %>
<!-- <%#= avatar(@issue.author, :size => "50") %> --> <!-- <%#= avatar(@issue.author, :size => "50") %> -->
<div class="subject" style="word-wrap: break-word;"> <div class="subject" style="word-wrap: break-word;">
<%= render_issue_subject_with_tree(@issue) %> <%= render_issue_subject_with_tree(@issue) %>
</div> </div>
<!-- 顶和踩 在这里添加 --> <!-- 顶和踩 在这里添加 -->
<span id="praise_tread" style="float: right"> <span id="praise_tread" style="float: right">
<%= render :partial => "/praise_tread/praise_tread",:locals => {:obj => @issue,:show_flag => true,:user_id =>User.current.id,:horizontal => false}%> <%= render :partial => "/praise_tread/praise_tread",:locals => {:obj => @issue,:show_flag => true,:user_id =>User.current.id,:horizontal => false}%>
</span> </span>
<p class="author"> <p class="author">
<%= authoring @issue.created_on, @issue.author %>. <%= authoring @issue.created_on, @issue.author %>.
<% if @issue.created_on != @issue.updated_on %> <% if @issue.created_on != @issue.updated_on %>
<%= l(:label_updated_time, time_tag(@issue.updated_on)).html_safe %>. <%= l(:label_updated_time, time_tag(@issue.updated_on)).html_safe %>.
<% end %> <% end %>
</p> </p>
<!-- added by william -for tag --> <!-- added by william -for tag -->
<div id="tags"> <div id="tags">
<%= render :partial => 'tags/tag', :locals => {:obj => @issue,:object_flag => "3" }%> <%= render :partial => 'tags/tag', :locals => {:obj => @issue,:object_flag => "3" }%>
</div> </div>
<table class="attributes"> <table class="attributes">
<%= issue_fields_rows do |rows| <%= issue_fields_rows do |rows|
rows.left l(:field_status), h(@issue.status.name), :class => 'status' rows.left l(:field_status), h(@issue.status.name), :class => 'status'
rows.left l(:field_priority), h(@issue.priority.name), :class => 'priority' rows.left l(:field_priority), h(@issue.priority.name), :class => 'priority'
unless @issue.disabled_core_fields.include?('assigned_to_id') unless @issue.disabled_core_fields.include?('assigned_to_id')
#modified by nie #modified by nie
#modified by huang #modified by huang
rows.left l(:field_assigned_to), (image_tag url_to_avatar(@issue.assigned_to(@user)), :class => 'avatar').to_s.html_safe + (@issue.assigned_to ? link_to_user(@issue.assigned_to) : "-"), :class => 'assigned-to' rows.left l(:field_assigned_to), (image_tag url_to_avatar(@issue.assigned_to(@user)), :class => 'avatar').to_s.html_safe + (@issue.assigned_to ? link_to_user(@issue.assigned_to) : "-"), :class => 'assigned-to'
end end
# end huang # end huang
unless @issue.disabled_core_fields.include?('category_id') unless @issue.disabled_core_fields.include?('category_id')
rows.left l(:field_category), h(@issue.category ? @issue.category.name : "-"), :class => 'category' rows.left l(:field_category), h(@issue.category ? @issue.category.name : "-"), :class => 'category'
end end
unless @issue.disabled_core_fields.include?('fixed_version_id') unless @issue.disabled_core_fields.include?('fixed_version_id')
rows.left l(:field_fixed_version), (@issue.fixed_version ? link_to_version(@issue.fixed_version) : "-"), :class => 'fixed-version' rows.left l(:field_fixed_version), (@issue.fixed_version ? link_to_version(@issue.fixed_version) : "-"), :class => 'fixed-version'
end end
unless @issue.disabled_core_fields.include?('start_date') unless @issue.disabled_core_fields.include?('start_date')
rows.right l(:field_start_date), format_date(@issue.start_date), :class => 'start-date' rows.right l(:field_start_date), format_date(@issue.start_date), :class => 'start-date'
end end
unless @issue.disabled_core_fields.include?('due_date') unless @issue.disabled_core_fields.include?('due_date')
rows.right l(:field_due_date), format_date(@issue.due_date), :class => 'due-date' rows.right l(:field_due_date), format_date(@issue.due_date), :class => 'due-date'
end end
unless @issue.disabled_core_fields.include?('done_ratio') unless @issue.disabled_core_fields.include?('done_ratio')
rows.right l(:field_done_ratio), progress_bar(@issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%"), :class => 'progress' rows.right l(:field_done_ratio), progress_bar(@issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%"), :class => 'progress'
end end
unless @issue.disabled_core_fields.include?('estimated_hours') unless @issue.disabled_core_fields.include?('estimated_hours')
unless @issue.estimated_hours.nil? unless @issue.estimated_hours.nil?
rows.right l(:field_estimated_hours), l_hours(@issue.estimated_hours), :class => 'estimated-hours' rows.right l(:field_estimated_hours), l_hours(@issue.estimated_hours), :class => 'estimated-hours'
end end
end end
if User.current.allowed_to?(:view_time_entries, @project) if User.current.allowed_to?(:view_time_entries, @project)
rows.right l(:label_spent_time), (@issue.total_spent_hours > 0 ? link_to(l_hours(@issue.total_spent_hours), project_issue_time_entries_path(@project, @issue)) : "-"), :class => 'spent-time' rows.right l(:label_spent_time), (@issue.total_spent_hours > 0 ? link_to(l_hours(@issue.total_spent_hours), project_issue_time_entries_path(@project, @issue)) : "-"), :class => 'spent-time'
end end
end %> end %>
<%= render_custom_fields_rows(@issue) %> <%= render_custom_fields_rows(@issue) %>
<%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %> <%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
</table> </table>
<% if @issue.description? || @issue.attachments.any? -%> <% if @issue.description? || @issue.attachments.any? -%>
<hr /> <hr />
<% if @issue.description? %> <% if @issue.description? %>
<div class="description"> <div class="description">
<div class="contextual"> <div class="contextual">
<%= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'icon icon-comment' if authorize_for('issues', 'edit') %> <%= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'icon icon-comment' if authorize_for('issues', 'edit') %>
</div> </div>
<p><strong><%=l(:field_description)%></strong></p> <p><strong><%=l(:field_description)%></strong></p>
<div class="wiki"> <div class="wiki">
<%= textilizable @issue, :description, :attachments => @issue.attachments %> <%= textilizable @issue, :description, :attachments => @issue.attachments %>
</div> </div>
</div> </div>
<% end %> <% end %>
<%= link_to_attachments @issue, :thumbnails => true %> <%= link_to_attachments @issue, :thumbnails => true %>
<% end -%> <% end -%>
<%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %> <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
<% if false # !@issue.leaf? || User.current.allowed_to?(:manage_subtasks, @project) %> <% if false # !@issue.leaf? || User.current.allowed_to?(:manage_subtasks, @project) %>
<hr /> <hr />
<div id="issue_tree"> <div id="issue_tree">
<div class="contextual"> <div class="contextual">
<%= link_to_new_subtask(@issue) if User.current.allowed_to?(:manage_subtasks, @project) %> <%= link_to_new_subtask(@issue) if User.current.allowed_to?(:manage_subtasks, @project) %>
</div> </div>
<p><strong><%=l(:label_subtask_plural)%></strong></p> <p><strong><%=l(:label_subtask_plural)%></strong></p>
<%= render_descendants_tree(@issue) unless @issue.leaf? %> <%= render_descendants_tree(@issue) unless @issue.leaf? %>
</div> </div>
<% end %> <% end %>
<% if @relations.present? || User.current.allowed_to?(:manage_issue_relations, @project) %> <% if @relations.present? || User.current.allowed_to?(:manage_issue_relations, @project) %>
<hr /> <hr />
<div id="relations"> <div id="relations">
<%= render :partial => 'relations' %> <%= render :partial => 'relations' %>
</div> </div>
<% end %> <% end %>
</div> </div>
<% if @changesets.present? %> <% if @changesets.present? %>
<div id="issue-changesets"> <div id="issue-changesets">
<h3><%=l(:label_associated_revisions)%></h3> <h3><%=l(:label_associated_revisions)%></h3>
<%= render :partial => 'changesets', :locals => { :changesets => @changesets} %> <%= render :partial => 'changesets', :locals => { :changesets => @changesets} %>
</div> </div>
<% end %> <% end %>
<% if @journals.present? %> <% if @journals.present? %>
<div id="history"> <div id="history">
<h3><%=l(:label_history)%></h3> <h3><%=l(:label_history)%></h3>
<%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %> <%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %>
</div> </div>
<% end %> <% end %>
<div style="clear: both;"></div> <div style="clear: both;"></div>
<%= render :partial => 'action_menu' %> <%= render :partial => 'action_menu' %>
<div style="clear: both;"></div> <div style="clear: both;"></div>
<% if @issue.editable? %> <% if @issue.editable? %>
<div id="update"> <div id="update">
<h3><%= l(:button_update) %></h3> <h3><%= l(:button_update) %></h3>
<%= render :partial => 'edit' %> <%= render :partial => 'edit' %>
</div> </div>
<% end %> <% end %>
<% other_formats_links do |f| %> <% other_formats_links do |f| %>
<%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
<%= f.link_to 'PDF' %> <%= f.link_to 'PDF' %>
<% end %> <% end %>
<% content_for :sidebar do %> <% content_for :sidebar do %>
<%= render :partial => 'issues/sidebar' %> <%= render :partial => 'issues/sidebar' %>
<% if User.current.allowed_to?(:add_issue_watchers, @project) || <% if User.current.allowed_to?(:add_issue_watchers, @project) ||
(@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %> (@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
<div id="watchers"> <div id="watchers">
<%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %> <%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
</div> </div>
<% end %> <% end %>
<% end %> <% end %>
<% content_for :header_tags do %> <% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@issue.project} - #{@issue.tracker} ##{@issue.id}: #{@issue.subject}") %> <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@issue.project} - #{@issue.tracker} ##{@issue.id}: #{@issue.subject}") %>
<% end %> <% end %>
<%= context_menu issues_context_menu_path %> <%= context_menu issues_context_menu_path %>

@ -93,7 +93,7 @@
<%= image_tag(url_to_avatar(@project), :style => 'width:61px; height:61px;') %> <%= image_tag(url_to_avatar(@project), :style => 'width:61px; height:61px;') %>
</div> </div>
<div class="pr_info_id fl mb5"> <div class="pr_info_id fl mb5">
ID:<%= @project.id %> 项目ID:<%= @project.id %>
</div> </div>
<!--关注、申请加入/退出项目--> <!--关注、申请加入/退出项目-->
<div id="join_exit_project_div"> <div id="join_exit_project_div">
@ -126,7 +126,8 @@
<%= link_to "#{@project.watcher_users.count}", {:controller=>"projects", :action=>"watcherlist", :id => @project.id}, :style => "color:#3CA5C6;font-weight:bold" %></span> <%= link_to "#{@project.watcher_users.count}", {:controller=>"projects", :action=>"watcherlist", :id => @project.id}, :style => "color:#3CA5C6;font-weight:bold" %></span>
<span>| </span> <span>| </span>
<%= l(:project_module_attachments) %><span class="info_foot_num" > <%= l(:project_module_attachments) %><span class="info_foot_num" >
<%= link_to "#{@project.attachments.count}", project_files_path(@project), :style => "color:#3CA5C6;font-weight:bold" %></span> <% attaments_num = @project.attachments.count+Attachment.where(["`container_type` = 'Version' and `container_id` in (?)",@project.versions.map{ |v| v.id}]).all.count %>
<%= link_to "#{attaments_num}", project_files_path(@project), :style => "color:#3CA5C6;font-weight:bold" %></span>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
</div><!--项目信息 end--> </div><!--项目信息 end-->
@ -170,8 +171,8 @@
<% unless @project.enabled_modules.where("name = 'files'").empty? %> <% unless @project.enabled_modules.where("name = 'files'").empty? %>
<div class="subNav"> <div class="subNav">
<%= link_to l(:project_module_files), project_files_path(@project), :style => "color:#3CA5C6" %> <%= link_to l(:project_module_files), project_files_path(@project), :style => "color:#3CA5C6" %>
<% unless @project.attachments.count == 0 %> <% unless attaments_num == 0 %>
<span class="subnav_num">(<%= @project.attachments.count %>)</span> <span class="subnav_num">(<%= attaments_num %>)</span>
<% end %> <% end %>
<% if User.current.member_of?(@project) %> <% if User.current.member_of?(@project) %>
<%= link_to "+"+l(:label_upload_files), project_files_path(@project,:flag => true),:style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:16px;margin-top:4px;background:#28be6c;float:right;line-height:20px;" %> <%= link_to "+"+l(:label_upload_files), project_files_path(@project,:flag => true),:style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:16px;margin-top:4px;background:#28be6c;float:right;line-height:20px;" %>

@ -41,7 +41,8 @@ a:hover.mail_reply{ background:#06a9bc; text-decoration:none;}
<div class="container" style="margin:0; padding:0; border:0;"> <div class="container" style="margin:0; padding:0; border:0;">
<div class="mail" style="width:600px; margin:20px; height:auto; color:#4b4b4b; font-size:14px; margin:0; padding:0; border:0;"> <div class="mail" style="width:600px; margin:20px; height:auto; color:#4b4b4b; font-size:14px; margin:0; padding:0; border:0;">
<div class="mail_head" style="margin:0; padding:0; border:0;"> <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 %>
</div> </div>

@ -45,6 +45,7 @@
</div> </div>
<div class="cl"></div> <div class="cl"></div>
<div class="box_main"> <div class="box_main">
<div style="padding-left: 20px;">
<h3 class="box_h3"><%= l(:label_invite_new_user)%></h3> <h3 class="box_h3"><%= l(:label_invite_new_user)%></h3>
<p class="box_p"> <p class="box_p">
<%= l(:label_invite_email_tips)%> <%= l(:label_invite_email_tips)%>
@ -62,5 +63,6 @@
</a> </a>
<%#= submit_tag '免费发送', :style => "display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;" %> <%#= submit_tag '免费发送', :style => "display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;" %>
<% end %> <% end %>
</div>
</div> </div>
</div> </div>

@ -1,32 +1,30 @@
<div id="tags_show"> <div id="tags_show" style="float: left;">
<%= render :partial => "tags/tag_name",:locals => {:obj => obj,:non_list_all => false ,:object_flag => object_flag} %> <%= render :partial => "tags/tag_name",:locals => {:obj => obj,:non_list_all => false ,:object_flag => object_flag} %>
</div> </div>
<div style="float: left;">
<% if User.current.logged? %> <% if User.current.logged? %>
<span> <%= toggle_link (l(:label_add_tag)), 'put-tag-form', {:focus => 'tags_name'} %> </span> <span> <%= toggle_link (l(:label_add_tag)), 'put-tag-form', {:focus => 'tags_name'} %> </span>
<% end %> <% end %>
<div id="put-tag-form" style="display: none;text-align: center"> <div id="put-tag-form" style="display: none;text-align: center">
<%= form_for "tag_for_save",:remote=>true,:url=>tag_path, <%= form_for "tag_for_save",:remote=>true,:url=>tag_path,
:update => "tags_show", :update => "tags_show",
:complete => '$("#put-tag-form").slideUp();' do |f| %> :complete => '$("#put-tag-form").slideUp();' do |f| %>
<table> <table>
<tr> <tr>
<td> <td>
<%= f.text_field :name ,:id => "tags_name",:size=>"20", <%= f.text_field :name ,:id => "tags_name",:size=>"20",
:require=>true, :require=>true,
:maxlength => Setting.tags_max_length, :maxlength => Setting.tags_max_length,
:minlength=>Setting.tags_min_length %> :minlength=>Setting.tags_min_length %>
</td> </td>
<%= f.text_field :object_id,:value=> obj.id,:style=>"display:none"%> <%= f.text_field :object_id,:value=> obj.id,:style=>"display:none"%>
<%= f.text_field :object_flag,:value=> object_flag,:style=>"display:none"%> <%= f.text_field :object_flag,:value=> object_flag,:style=>"display:none"%>
<td style="margin-left: 5px" vertical-valign="middle" >
<td style="margin-left: 5px">
<a href="#" onclick='$("#tags_name").parent().submit();' type="button" class="submit f_l"></a> <a href="#" onclick='$("#tags_name").parent().submit();' type="button" class="submit f_l"></a>
</td> </td>
<tr> <tr>
</table> </table>
<% end %> <% end %>
</div> </div>
</div>

@ -31,7 +31,12 @@
<!-- 用来显示三大对象的主页中的tag 故是全部显示 --> <!-- 用来显示三大对象的主页中的tag 故是全部显示 -->
<% if @tags.size > 0 %> <% if @tags.size > 0 %>
<% @tags.each do |tag| %> <% @tags.each do |tag| %>
<div id="tag"> <!--项目暂时单独出来,后面重构-->
<% if object_flag == '2' %>
<span class="re_tag f_l">
<%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %></span>
<% else %>
<div id="tag">
<span class="tag_show"> <span class="tag_show">
<%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %> <%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %>
<!-- 对用户主页 是本人 ,对项目,需求,问题是管理员 --> <!-- 对用户主页 是本人 ,对项目,需求,问题是管理员 -->
@ -43,13 +48,6 @@
:taggable_id => obj.id, :taggable_type => object_flag %> :taggable_id => obj.id, :taggable_type => object_flag %>
</span> </span>
<% end %> <% end %>
<% when '2' %>
<% if (ProjectInfo.find_by_project_id(obj.id)).try(:user_id) == User.current.id %>
<span class='del'>
<%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
:taggable_id => obj.id, :taggable_type => object_flag %>
</span>
<% end %>
<% when '3' %> <% when '3' %>
<% if (ProjectInfo.find_by_project_id(obj.project_id)).try(:user_id) == User.current.id %> <% if (ProjectInfo.find_by_project_id(obj.project_id)).try(:user_id) == User.current.id %>
<span class='del'> <span class='del'>
@ -101,6 +99,7 @@
<% end %> <% end %>
</span> </span>
</div> </div>
<% end %> <% end %>
<% end %>
<% end %> <% end %>
<% end %> <% end %>

@ -1583,3 +1583,5 @@ en:
label_recently_updated_message: Recently updated the message label_recently_updated_message: Recently updated the message
label_recently_updated_courseware: Recently updated the courseware label_recently_updated_courseware: Recently updated the courseware
label_no_courses: You do not participate in any course, please search the curriculum, course, or create a course! label_no_courses: You do not participate in any course, please search the curriculum, course, or create a course!
label_commit_failed: commit failed
#api end

@ -2026,6 +2026,9 @@ zh:
label_recently_updated_message: 最近更新了留言 label_recently_updated_message: 最近更新了留言
label_recently_updated_courseware: 最近更新了课件 label_recently_updated_courseware: 最近更新了课件
label_no_courses: 您没有参与任何课程,请搜索课程、加入课程,或者创建课程吧! label_no_courses: 您没有参与任何课程,请搜索课程、加入课程,或者创建课程吧!
label_commit_failed: 提交失败
#api end
label_end_time: 截止时间 label_end_time: 截止时间
label_send_email: 确定发送 label_send_email: 确定发送
label_input_email: 请输入邮箱地址 label_input_email: 请输入邮箱地址

@ -13,7 +13,7 @@ ul.wlist{ margin-left: -40px; border-bottom:none; }
ul.wlist li{float: left;} ul.wlist li{float: left;}
ul.wlist li a{ border:1px solid #15bccf; padding:4px; margin-left:3px;} ul.wlist li a{ border:1px solid #15bccf; padding:4px; margin-left:3px;}
ul.wlist li a:hover{ background:#15bccf; color:#fff; text-decoration:none;} ul.wlist li a:hover{ background:#15bccf; color:#fff; text-decoration:none;}
.wlist_select { background-color:#64bdd9; color:#fff; padding: 4px 3px 3px 3px; margin-left:3px;margin-top: -5px; border:1px solid #64bdd9;} .wlist_select { background-color:#64bdd9; color:#fff; padding: 5px 3px 3px 3px; margin-left:3px;margin-top: 0px; border:1px solid #64bdd9;}
/*20150203项目界面优化样式 By: huangjignquan*/ /*20150203项目界面优化样式 By: huangjignquan*/
.project_new{font-size: 15px; padding: 5px;} .project_new{font-size: 15px; padding: 5px;}
@ -69,11 +69,19 @@ a.ml105{ margin-left:120px;}
a:hover.subnav_green{ background:#14ad5a;} a:hover.subnav_green{ background:#14ad5a;}
/*简介*/ /*简介*/
.project_intro{ width:220px; padding:10px; background:#fff; padding-top:5px; color:#6d6d6d;} .project_intro{ width:220px; padding:5px 0px 10px 10px; background:#fff; color:#6d6d6d;}
.course_description{max-height: 110px;overflow:hidden;} .course_description{max-height: 105px;overflow:hidden;}
.course_description_none{max-height: none;} .course_description_none{max-height: none;}
.lg-foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:220px; height:23px; cursor:pointer;} .lg-foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:220px; height:23px; cursor:pointer;}
.lg-foot:hover{ color:#787b7e;} .lg-foot:hover{ color:#787b7e;}
/****标签(和资源库的tag样式一致)***/
.project_Label{ width:220px; padding-left:10px; padding-right:10px; background:#fff; margin-top:10px;}
a.yellowBtn{ display:inline-block;color:#0d90c3; height:22px;}
.submit{height:21px;border:0; cursor:pointer; background:url(../images/btn.png) no-repeat 0 0;width:42px; margin-top:2px; margin-left:3px; }
.isTxt{background:#fbfbfb url(../images/inputBg.png) repeat-x left top;height:22px;line-height:22px;border:1px solid #c1c1c1;padding:0 5px;color:#666666;}
.re_tag{ width: auto; padding-left:4px;padding-right: 4px; height:22px; border:1px solid #f8df8c; background:#fffce6; margin-right:5px;font-size:12px; }
.re_tag a{ color:#0d90c3;}
.tag_h span,.tag_h a{ margin-top:5px;}
/*右侧内容--动态*/ /*右侧内容--动态*/
/*右侧内容--动态*/ /*右侧内容--动态*/
.project_r_h{height:40px; background:#eaeaea; margin-bottom:10px;} .project_r_h{height:40px; background:#eaeaea; margin-bottom:10px;}
@ -104,19 +112,19 @@ a:hover.more{ color:#64bdd9;}
.box_main02{ width:390px; margin:15px auto;} .box_main02{ width:390px; margin:15px auto;}
.box_h3{ color:#15bccf; text-align:center; font-size:16px;} .box_h3{ color:#15bccf; text-align:center; font-size:16px;}
.box_p{ color:#404040; margin-bottom:5px;} .box_p{ color:#404040; margin-bottom:5px;}
.fb_item{ color:#919191; border:1px solid #919191; height:28px; margin-bottom:10px; padding-left:5px; width:290px;} .fb_item{ color:#919191; border:1px solid #919191; height:25px; margin-bottom:10px; padding-left:5px; width:290px;}
.icon_addm{ background:url(../images/img_floatbox.png) 0 -33px no-repeat; width:16px; height:16px; display:block; margin:5px 0 0 5px;} .icon_addm{ background:url(../images/img_floatbox.png) 0 -33px no-repeat; width:16px; height:16px; display:block; margin:5px 0 0 5px;}
.icon_addm:hover{background:url(../images/img_floatbox.png) 0 -61px no-repeat; } .icon_addm:hover{background:url(../images/img_floatbox.png) 0 -61px no-repeat; }
.icon_removem{ background:url(../images/img_floatbox.png) -22px -33px no-repeat;width:16px; height:16px; display:block; margin:5px 0 0 5px} .icon_removem{ background:url(../images/img_floatbox.png) -22px -33px no-repeat;width:16px; height:16px; display:block; margin:5px 0 0 5px}
.icon_removem:hover{background:url(../images/img_floatbox.png) -22px -61px no-repeat;} .icon_removem:hover{background:url(../images/img_floatbox.png) -22px -61px no-repeat;}
.btn_free{ background:#ff5722; display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;} .btn_free{ background:#ff5722; display:block; width:80px; text-align:center; color:#fff !important; height:25px; padding-top:5px; margin-bottom:10px;}
.btn_free:hover{ background:#d63502;} .btn_free:hover{ background:#d63502;text-decoration:none;}
/*成员邀请*/ /*成员邀请*/
.invi_search{ margin-left:50px;} .invi_search{ margin-left:25px;}
.invi_search_input{ border:1px solid #15bccf; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} .invi_search_input{ border:1px solid #15bccf; width:180px; height:24px; color:#9b9b9b; padding-left:5px;}
.invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;} .invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;}
.invi_search_btn:hover{ background:#0da1b2; border:1px solid #0da1b2;} .invi_search_btn:hover{ background:#0da1b2; border:1px solid #0da1b2;}
.rolebox{ margin:10px 0;} .rolebox{ margin:10px 0;margin-left:-38px;}
/*问题跟踪*/ /*问题跟踪*/
.problem_top{ margin:10px 0 ;} .problem_top{ margin:10px 0 ;}
.problem_search_input{ border:1px solid #64bdd9; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} .problem_search_input{ border:1px solid #64bdd9; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;}

Loading…
Cancel
Save