Merge branch 'szzh' of http://xianbo_trustie2@repository.trustie.net/xianbo/trustie2.git into szzh
Conflicts: .gitignore Gemfile app/views/issues/index.html.erb app/views/layouts/_base_feedback.html.erb app/views/tags/_tag_name.html.erb Signed-off-by: alanlong9278 <547533434@qq.com>redis_cache
commit
336b59f606
@ -0,0 +1,33 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class Member < Grape::Entity
|
||||||
|
include ApplicationHelper
|
||||||
|
include ApiHelper
|
||||||
|
def self.member_expose(f)
|
||||||
|
expose f do |u,opt|
|
||||||
|
if u.is_a?(Hash) && u.key?(f)
|
||||||
|
u[f]
|
||||||
|
elsif u.is_a?(::Member)
|
||||||
|
if u.respond_to?(f)
|
||||||
|
u.send(f)
|
||||||
|
else
|
||||||
|
case f
|
||||||
|
when :student_id
|
||||||
|
u.user.user_extensions.student_id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
expose :user, using: Mobile::Entities::User do |c, opt|
|
||||||
|
if c.is_a?(::Member)
|
||||||
|
c.user
|
||||||
|
end
|
||||||
|
end
|
||||||
|
member_expose :student_id
|
||||||
|
member_expose :score
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,25 @@
|
|||||||
|
#coding=utf-8
|
||||||
|
#
|
||||||
|
|
||||||
|
class DestroyRepositoryTask
|
||||||
|
def destroy(user_id, rep_id)
|
||||||
|
user = User.find(user_id)
|
||||||
|
repository = Repository.find(rep_id)
|
||||||
|
|
||||||
|
Rails.logger.info "start delete repository #{user} #{repository}"
|
||||||
|
@root_path=RepositoriesHelper::ROOT_PATH
|
||||||
|
@repo_name=user.login.to_s+"_"+repository.identifier.to_s
|
||||||
|
@repository_name=user.login.to_s+"/"+repository.identifier.to_s+".git"
|
||||||
|
@middle=user.login.to_s+"_"+repository.identifier.to_s+"-write:"
|
||||||
|
repository.destroy
|
||||||
|
if(repository.type=="Repository::Git")
|
||||||
|
Rails.logger.info "destory the repository value"+"root path"+@root_path+"repo_name"+@repo_name+
|
||||||
|
"repository_name"+@repository_name+"user group"+@middle
|
||||||
|
system "sed -i /"+@repo_name+"/{d} "+@root_path+"htdocs/user.passwd"
|
||||||
|
system "sed -i /"+@middle+"/{d} "+@root_path+"htdocs/group.passwd"
|
||||||
|
system "rm -r "+@root_path+"htdocs/"+@repository_name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
handle_asynchronously :destroy,:queue => 'repository'
|
||||||
|
end
|
@ -0,0 +1,67 @@
|
|||||||
|
<span id="attachments_fields" xmlns="http://www.w3.org/1999/html">
|
||||||
|
<% if defined?(container) && container && container.saved_attachments %>
|
||||||
|
<% if isReply %>
|
||||||
|
<% container.saved_attachments.each_with_index do |attachment, i| %>
|
||||||
|
<span id="attachments_p<%= i %>" class="sub_btn">
|
||||||
|
<%= 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"} %>
|
||||||
|
<span class="ispublic-label"><%= l(:field_is_public)%>:</span>
|
||||||
|
<%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public,attachment.is_public == 1 ? true : false, :class => 'is_public')%>
|
||||||
|
<%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %>
|
||||||
|
</span>
|
||||||
|
<% end %>
|
||||||
|
<% else %>
|
||||||
|
<% container.attachments.each_with_index do |attachment, i| %>
|
||||||
|
<span id="attachments_p<%= i %>" class="attachment">
|
||||||
|
<%= 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"} %>
|
||||||
|
<span class="ispublic-label"><%= l(:field_is_public)%>:</span>
|
||||||
|
<%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public,attachment.is_public == 1 ? true : false, :class => 'is_public')%>
|
||||||
|
<%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %>
|
||||||
|
</span>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</span>
|
||||||
|
<script type='text/javascript'>
|
||||||
|
// function CompatibleSend()
|
||||||
|
// {
|
||||||
|
// var obj=document.getElementById("_file");
|
||||||
|
// var file= $(obj).clone();
|
||||||
|
// file.click();
|
||||||
|
// }
|
||||||
|
</script>
|
||||||
|
<span class="add_attachment">
|
||||||
|
<%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %>
|
||||||
|
<!--%= link_to image_tag(),"javascript:void(0)", :onclick => "_file.click()"%-->
|
||||||
|
<%= button_tag "文件浏览", :type=>"button", :onclick=>"_file.click()", :class =>"sub_btn",:style => ie8? ? 'display:none' : '' %>
|
||||||
|
<%= file_field_tag 'attachments[dummy][file]',
|
||||||
|
:id => '_file',
|
||||||
|
:class => 'file_selector',
|
||||||
|
:multiple => true,
|
||||||
|
:onchange => 'addInputFiles(this);',
|
||||||
|
:style => 'display:none',
|
||||||
|
:data => {
|
||||||
|
:max_file_size => Setting.attachment_max_size.to_i.kilobytes,
|
||||||
|
:max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)),
|
||||||
|
:max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i,
|
||||||
|
:upload_path => uploads_path(:format => 'js'),
|
||||||
|
:description_placeholder => l(:label_optional_description),
|
||||||
|
:field_is_public => l(:field_is_public),
|
||||||
|
:are_you_sure => l(:text_are_you_sure),
|
||||||
|
:file_count => l(:label_file_count),
|
||||||
|
:delete_all_files => l(:text_are_you_sure_all)
|
||||||
|
} %>
|
||||||
|
<span id="upload_file_count" :class="c_grey"><%= l(:label_no_file_uploaded)%></span>
|
||||||
|
(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<% content_for :header_tags do %>
|
||||||
|
<%= javascript_include_tag 'attachments' %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
|||||||
|
<div style="font-weight:normal;">
|
||||||
|
<% for attachment in attachments %>
|
||||||
|
<div title="<%= attachment.filename%>" id = "attachment_" style="max-width: 300px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;float: left;">
|
||||||
|
<%= link_to_short_attachment attachment, :class => 'link_file', :download => true, :length => 100 -%>
|
||||||
|
</div>
|
||||||
|
<% if attachment.is_text? %>
|
||||||
|
<div style="float: left;">
|
||||||
|
<%= link_to image_tag('magnifier.png'),
|
||||||
|
{:controller => 'attachments',
|
||||||
|
:action => 'show',
|
||||||
|
:id => attachment,
|
||||||
|
:filename => attachment.filename},
|
||||||
|
:target => "_blank"%>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<br>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
@ -0,0 +1,99 @@
|
|||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
jQuery(window).load(function () {
|
||||||
|
jQuery(".issue_attachment_picture").each(function () {
|
||||||
|
DrawImage(this, 100, 73);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
function DrawImage(ImgD, FitWidth, FitHeight) {
|
||||||
|
var image = new Image();
|
||||||
|
image.src = ImgD.src;
|
||||||
|
if (image.width > 100 || image.height > 73)
|
||||||
|
{
|
||||||
|
rateWidth = image.width / 100;
|
||||||
|
rateHeight = image.height / 73;
|
||||||
|
if (rateWidth > rateHeight) {
|
||||||
|
ImgD.width = 100;
|
||||||
|
ImgD.height = Math.round(image.height/rateWidth);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ImgD.width = Math.round(image.width/rateHeight);
|
||||||
|
ImgD.height = 73;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="attachments" style="font-weight:normal;">
|
||||||
|
<% is_float ||= false %>
|
||||||
|
<% for attachment in attachments %>
|
||||||
|
<p style="width: 100%;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
|
||||||
|
<%if is_float%>
|
||||||
|
<div style="max-width:55%;white-space: nowrap; overflow: hidden; text-overflow: ellipsis;float: left;">
|
||||||
|
<% end%>
|
||||||
|
<span title="<%= attachment.filename %>" id = "attachment_">
|
||||||
|
<% if options[:length] %>
|
||||||
|
<%= link_to_short_attachment attachment, :class => ' link_file_board', :download => true,:length => options[:length] -%>
|
||||||
|
<% else %>
|
||||||
|
<%= link_to_short_attachment attachment, :class => ' link_file_board', :download => true -%>
|
||||||
|
<% end %>
|
||||||
|
</span>
|
||||||
|
<%if is_float%>
|
||||||
|
</div>
|
||||||
|
<% end%>
|
||||||
|
|
||||||
|
<% if attachment.is_text? %>
|
||||||
|
<%= link_to image_tag('magnifier.png'),
|
||||||
|
:controller => 'attachments',
|
||||||
|
:action => 'show',
|
||||||
|
:id => attachment,
|
||||||
|
:filename => attachment.filename%>
|
||||||
|
<% end %>
|
||||||
|
<span title="<%= attachment.description%>">
|
||||||
|
<%= h(truncate(" - #{attachment.description}", length: options[:length] ? options[:length]:15, omission: '...')) unless attachment.description.blank? %>
|
||||||
|
</span>
|
||||||
|
<span class="size">(
|
||||||
|
<%= number_to_human_size attachment.filesize %>)
|
||||||
|
</span>
|
||||||
|
<% if options[:deletable] %>
|
||||||
|
<% if attachment.container_type == 'HomeworkAttach' %>
|
||||||
|
<%= link_to image_tag('delete.png'), {:controller => 'attachments', :action => 'delete_homework', :id => attachment.id},
|
||||||
|
:data => {:confirm => l(:text_are_you_sure)},
|
||||||
|
:method => :delete,
|
||||||
|
:class => 'delete delete-homework-icon',
|
||||||
|
:remote => true,
|
||||||
|
:title => l(:button_delete) %>
|
||||||
|
<% else %>
|
||||||
|
<%= link_to image_tag('delete.png'), attachment_path(attachment),
|
||||||
|
:data => {:confirm => l(:text_are_you_sure)},
|
||||||
|
:method => :delete,
|
||||||
|
:class => 'delete',
|
||||||
|
#:remote => true,
|
||||||
|
#:id => "attachments_" + attachment.id.to_s,
|
||||||
|
:title => l(:button_delete) %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% if options[:wrap] %>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<% end %>
|
||||||
|
<% if options[:author] %>
|
||||||
|
<span class="author" title="<%= attachment.author%>">
|
||||||
|
<%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "c_orange" %>,
|
||||||
|
<%= format_time(attachment.created_on) %>
|
||||||
|
</span>
|
||||||
|
<% end %>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
|
<div class="thumbnails">
|
||||||
|
<% if defined?(thumbnails) && thumbnails %>
|
||||||
|
<% images = attachments.select(&:thumbnailable?) %>
|
||||||
|
<% if images.any? %>
|
||||||
|
<% images.each do |attachment| %>
|
||||||
|
<div class="pro_pic fl " width="100" height="73"><%= thumbnail_issue_tag(attachment) %></div>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,66 @@
|
|||||||
|
<style type="text/css">
|
||||||
|
#preview{width:360px;height:360px;border:1px solid #000;overflow:hidden;}
|
||||||
|
#imghead {filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
function previewImage(file)
|
||||||
|
{
|
||||||
|
var MAXWIDTH = 360;
|
||||||
|
var MAXHEIGHT = 360;
|
||||||
|
var div = document.getElementById('preview');
|
||||||
|
if (file.files && file.files[0])
|
||||||
|
{
|
||||||
|
div.innerHTML = '<img id=imghead>';
|
||||||
|
var img = document.getElementById('imghead');
|
||||||
|
img.onload = function(){
|
||||||
|
var rect = clacImgZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
|
||||||
|
img.width = rect.width;
|
||||||
|
img.height = rect.height;
|
||||||
|
img.style.marginLeft = rect.left+'px';
|
||||||
|
img.style.marginTop = rect.top+'px';
|
||||||
|
}
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.onload = function(evt){img.src = evt.target.result;}
|
||||||
|
reader.readAsDataURL(file.files[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var sFilter='filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src="';
|
||||||
|
file.select();
|
||||||
|
var src = document.selection.createRange().text;
|
||||||
|
div.innerHTML = '<img id=imghead>';
|
||||||
|
var img = document.getElementById('imghead');
|
||||||
|
img.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = src;
|
||||||
|
var rect = clacImgZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
|
||||||
|
status =('rect:'+rect.top+','+rect.left+','+rect.width+','+rect.height);
|
||||||
|
div.innerHTML = "<div id=divhead style='width:"+rect.width+"px;height:"+rect.height+"px;margin-top:"+rect.top+"px;margin-left:"+rect.left+"px;"+sFilter+src+"\"'></div>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function clacImgZoomParam( maxWidth, maxHeight, width, height ){
|
||||||
|
var param = {top:0, left:0, width:width, height:height};
|
||||||
|
if( width>maxWidth || height>maxHeight )
|
||||||
|
{
|
||||||
|
rateWidth = width / maxWidth;
|
||||||
|
rateHeight = height / maxHeight;
|
||||||
|
|
||||||
|
if( rateWidth > rateHeight )
|
||||||
|
{
|
||||||
|
param.width = maxWidth;
|
||||||
|
param.height = Math.round(height / rateWidth);
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
param.width = Math.round(width / rateHeight);
|
||||||
|
param.height = maxHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
param.left = Math.round((maxWidth - param.width) / 2);
|
||||||
|
param.top = Math.round((maxHeight - param.height) / 2);
|
||||||
|
return param;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<div id="preview">
|
||||||
|
<img id="imghead" width=100 height=100 border=0 src="file:///C:/Users/whimlex/Downloads/1.jpg">
|
||||||
|
</div>
|
||||||
|
<br/>
|
||||||
|
<input type="file" onchange="previewImage(this)" />
|
@ -0,0 +1,9 @@
|
|||||||
|
<%= form_for @message, :url =>{:controller=>'messages',:action => 'new', :board_id => @board.id, :is_board => 'true'}, :html => {:multipart => true, :id => 'message-form'} do |f| %>
|
||||||
|
|
||||||
|
<%= render :partial => 'form_course', :locals => {:f => f} %>
|
||||||
|
<li>
|
||||||
|
<%= link_to l(:button_cancel), course_boards_path(@course), :class => 'grey_btn fr ml10' %>
|
||||||
|
<a href="#" onclick="$('#message-form').submit();" class="blue_btn fr " style="margin-left: 55px"><%= l(:button_submit)%></a>
|
||||||
|
<div class="cl"></div>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
@ -0,0 +1,9 @@
|
|||||||
|
<%= form_for @message, :url =>{:controller=>'messages',:action => 'new', :board_id => @board.id, :is_board => 'true'}, :html => {:multipart => true, :id => 'message-form'} do |f| %>
|
||||||
|
|
||||||
|
<%= render :partial => 'form_project', :locals => {:f => f} %>
|
||||||
|
<li>
|
||||||
|
<%= link_to l(:button_cancel), project_boards_path(@project), :class => 'grey_btn fr ml10' %>
|
||||||
|
<a href="#" onclick="$('#message-form').submit();" class="blue_btn fr " style="margin-left: 55px"><%= l(:button_submit)%></a>
|
||||||
|
<div class="cl"></div>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
@ -0,0 +1,28 @@
|
|||||||
|
<% selected_tab = params[:tab] ? params[:tab].to_s : tabs.first[:name] %>
|
||||||
|
<div class="hwork_new">
|
||||||
|
<div class="hwork_tb_">
|
||||||
|
<ul>
|
||||||
|
<% tabs.each do |tab| -%>
|
||||||
|
<li><%= link_to l(tab[:label]), { :tab => tab[:name] },
|
||||||
|
:id => "tab-#{tab[:name]}",
|
||||||
|
:class => (tab[:name] != selected_tab ? 'hwork_normaltab' : 'hwork_hovertab'),
|
||||||
|
:onclick => "showTab('#{tab[:name]}'); this.blur(); return false;" %></li>
|
||||||
|
<% end -%>
|
||||||
|
</ul>
|
||||||
|
<!-- <div class="tabs-buttons" style="display:none;">
|
||||||
|
<button class="tab-left" onclick="moveTabLeft(this);"></button>
|
||||||
|
<button class="tab-right" onclick="moveTabRight(this);"></button>
|
||||||
|
</div> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(document).ready(displayTabsButtons);
|
||||||
|
$(window).resize(displayTabsButtons);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<% tabs.each do |tab| -%>
|
||||||
|
<%= content_tag('div', render(:partial => tab[:partial], :locals => {:tab => tab} ),
|
||||||
|
:id => "tab-content-#{tab[:name]}",
|
||||||
|
:style => (tab[:name] != selected_tab ? 'display:none' : nil),
|
||||||
|
:class => 'hwork_normaltab') %>
|
||||||
|
<% end -%>
|
@ -1,3 +1,13 @@
|
|||||||
|
//$('#ajax-modal').html('<%#= escape_javascript(render :partial => 'courses/show_member_score', :locals => {:member => @member_score}) %>');
|
||||||
|
//showModal('ajax-modal', '400px');
|
||||||
|
//$('#ajax-modal').addClass('new-watcher');
|
||||||
|
|
||||||
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'courses/show_member_score', :locals => {:member => @member_score}) %>');
|
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'courses/show_member_score', :locals => {:member => @member_score}) %>');
|
||||||
showModal('ajax-modal', '400px');
|
showModal('ajax-modal', '400px');
|
||||||
$('#ajax-modal').addClass('new-watcher');
|
//$('#ajax-modal').css('height','569px');
|
||||||
|
$('#ajax-modal').siblings().remove();
|
||||||
|
$('#ajax-modal').before("<span style='float: right;cursor:pointer;padding-left: 513px;'>" +
|
||||||
|
"<a href='javascript:void(0)' onclick='hidden_homework_score_form();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
|
||||||
|
//$('#ajax-modal').parent().removeClass();
|
||||||
|
$('#ajax-modal').parent().css("top","30%").css("left","40%").css("position","fixed");
|
||||||
|
$('#ajax-modal').parent().addClass("new-watcher");
|
||||||
|
@ -1,18 +1,8 @@
|
|||||||
<div class="contextual">
|
|
||||||
<!--added by huang-->
|
<!--added by huang-->
|
||||||
|
<%#= watcher_link_issue(@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_delete), issue_path(@issue.id), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'talk_edit fr' if User.current.allowed_to?(:delete_issues, @project) %>
|
||||||
|
|
||||||
<% if (@issue.author == User.current) || (User.current.admin?) %>
|
|
||||||
|
|
||||||
<!--end-->
|
<%= link_to l(:button_edit), edit_issue_path(@issue), :onclick => 'showAndScrollTo("all_attributes"); return false;', :class => 'talk_edit fr', :accesskey => accesskey(:edit) if @issue.editable? && User.current.allowed_to?(:edit_issues, @project) %>
|
||||||
<%= link_to l(:button_update), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %>
|
<%= link_to l(:label_user_newfeedback), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'talk_edit fr', :accesskey => accesskey(:edit) if @issue.editable? && User.current.allowed_to?(:add_issue_notes, @project) %>
|
||||||
|
|
||||||
<% else %>
|
|
||||||
|
|
||||||
<%= link_to l(:label_user_newfeedback), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %>
|
|
||||||
|
|
||||||
<% 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_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>
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue