Feature #337 » private_issues.v.0.3.patch
| redmine/app/controllers/projects_controller.rb 2010-04-09 10:01:51.640590759 +0400 | ||
|---|---|---|
| 152 | 152 |
@open_issues_by_tracker = Issue.visible.count(:group => :tracker, |
| 153 | 153 |
:include => [:project, :status, :tracker], |
| 154 | 154 |
:conditions => ["(#{cond}) AND #{IssueStatus.table_name}.is_closed=?", false])
|
| 155 |
@private_issues_by_tracker = Issue.count(:group => :tracker, |
|
| 156 |
:include => [:project, :status, :tracker], |
|
| 157 |
:conditions => ["(#{cond}) AND #{IssueStatus.table_name}.is_closed=? AND #{Issue.table_name}.is_private=?", false, true])
|
|
| 155 | 158 |
@total_issues_by_tracker = Issue.visible.count(:group => :tracker, |
| 156 | 159 |
:include => [:project, :status, :tracker], |
| 157 | 160 |
:conditions => cond) |
| ... | ... | |
| 331 | 334 |
@activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty? |
| 332 | 335 | |
| 333 | 336 |
events = @activity.events(@date_from, @date_to) |
| 337 | ||
| 338 |
# The private issues should be removed from events |
|
| 339 |
events.each do |event| |
|
| 340 |
events.delete(event) if event.kind_of?(Issue) && !event.visible?(User.current, Project.find(event.project)) |
|
| 341 |
end |
|
| 334 | 342 |
|
| 335 | 343 |
if events.empty? || stale?(:etag => [events.first, User.current]) |
| 336 | 344 |
respond_to do |format| |
| redmine/app/models/issue.rb 2010-04-09 15:25:11.948089072 +0400 | ||
|---|---|---|
| 74 | 74 |
after_destroy :update_parent_attributes |
| 75 | 75 |
|
| 76 | 76 |
# Returns true if usr or current user is allowed to view the issue |
| 77 |
def visible?(usr=nil) |
|
| 78 |
(usr || User.current).allowed_to?(:view_issues, self.project) |
|
| 77 |
def visible?(usr=User.current, project=self.project) |
|
| 78 |
is_private==false && usr.allowed_to?(:view_issues, project) || |
|
| 79 |
is_private==true && (usr.allowed_to?(:view_private_issues, project) || author == usr || assigned_to == usr || watched_by?(usr)) |
|
| 79 | 80 |
end |
| 80 | 81 |
|
| 81 | 82 |
def after_initialize |
| ... | ... | |
| 204 | 205 |
category_id |
| 205 | 206 |
assigned_to_id |
| 206 | 207 |
priority_id |
| 208 |
is_private |
|
| 207 | 209 |
fixed_version_id |
| 208 | 210 |
subject |
| 209 | 211 |
description |
| ... | ... | |
| 716 | 718 |
if assigned_to.nil? && category && category.assigned_to |
| 717 | 719 |
self.assigned_to = category.assigned_to |
| 718 | 720 |
end |
| 721 |
if User.current.allowed_to?(:add_private_issues, self.project) |
|
| 722 |
self.is_private=1 unless User.current.allowed_to?(:add_issues, self.project) |
|
| 723 |
else |
|
| 724 |
self.is_private=0 |
|
| 725 |
end |
|
| 719 | 726 |
end |
| 720 | 727 | |
| 721 | 728 |
# Updates start/due dates of following issues |
| redmine/app/views/issues/_form.rhtml 2010-04-09 14:11:07.304447444 +0400 | ||
|---|---|---|
| 25 | 25 |
<div id="attributes" class="attributes"> |
| 26 | 26 |
<%= render :partial => 'attributes' %> |
| 27 | 27 |
</div> |
| 28 |
<% if User.current.allowed_to?(:add_issues, @project) && User.current.allowed_to?(:add_private_issues, @project) %> |
|
| 29 |
<p><%=f.check_box :is_private %></p> |
|
| 30 |
<% end%> |
|
| 28 | 31 | |
| 29 | 32 |
<% if @issue.new_record? %> |
| 30 | 33 |
<p><label><%=l(:label_attachment_plural)%></label><%= render :partial => 'attachments/form' %></p> |
| redmine/app/views/issues/_list.rhtml 2010-04-09 15:30:25.912189407 +0400 | ||
|---|---|---|
| 24 | 24 |
</tr> |
| 25 | 25 |
<% previous_group = group %> |
| 26 | 26 |
<% end %> |
| 27 |
<% if issue.visible? %> |
|
| 27 | 28 |
<tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
|
| 28 | 29 |
<td class="checkbox"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
|
| 29 | 30 |
<td class="id"><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td> |
| 30 | 31 |
<% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.name %><% end %> |
| 31 | 32 |
</tr> |
| 33 |
<% end %> |
|
| 32 | 34 |
<% end -%> |
| 33 | 35 |
</tbody> |
| 34 | 36 |
</table> |
| redmine/app/views/issues/_list_simple.rhtml 2010-04-09 15:31:32.377528332 +0400 | ||
|---|---|---|
| 9 | 9 |
</tr></thead> |
| 10 | 10 |
<tbody> |
| 11 | 11 |
<% for issue in issues %> |
| 12 |
<% if issue.visible? %> |
|
| 12 | 13 |
<tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %>">
|
| 13 | 14 |
<td class="id"> |
| 14 | 15 |
<%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;') %>
|
| ... | ... | |
| 20 | 21 |
<%= link_to h(truncate(issue.subject, :length => 60)), :controller => 'issues', :action => 'show', :id => issue %> (<%=h issue.status %>) |
| 21 | 22 |
</td> |
| 22 | 23 |
</tr> |
| 24 |
<% end %> |
|
| 23 | 25 |
<% end %> |
| 24 | 26 |
</tbody> |
| 25 | 27 |
</table> |
| redmine/app/views/issues/show.rhtml 2010-04-09 15:15:32.905963122 +0400 | ||
|---|---|---|
| 1 |
<% if @issue.visible? %> |
|
| 2 | ||
| 1 | 3 |
<%= render :partial => 'action_menu' %> |
| 2 | 4 | |
| 3 | 5 |
<h2><%= @issue.tracker.name %> #<%= @issue.id %></h2> |
| ... | ... | |
| 40 | 42 |
<% if @issue.estimated_hours %> |
| 41 | 43 |
<th class="estimated-hours"><%=l(:field_estimated_hours)%>:</th><td class="estimated-hours"><%= l_hours(@issue.estimated_hours) %></td> |
| 42 | 44 |
<% end %> |
| 45 |
<% if @issue.is_private %> |
|
| 46 |
<th class="private-issue"><%=l(:field_is_private)%>:</th><td class="private-issue"><%=l(:general_text_Yes)%></td> |
|
| 47 |
<% end %> |
|
| 43 | 48 |
</tr> |
| 44 | 49 |
<%= render_custom_fields_rows(@issue) %> |
| 45 | 50 |
<%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %> |
| ... | ... | |
| 130 | 135 |
<%= stylesheet_link_tag 'context_menu' %> |
| 131 | 136 |
<% end %> |
| 132 | 137 |
<div id="context-menu" style="display: none;"></div> |
| 133 |
<%= javascript_tag "new ContextMenu('#{url_for(:controller => 'issues', :action => 'context_menu')}')" %>
|
|
| 138 |
<%= javascript_tag "new ContextMenu('#{url_for(:controller => 'issues', :action => 'context_menu')}')" %>
|
|
| 139 |
<% else %> |
|
| 140 |
<p class="nodata"><%=l(:label_access_denied)%> </p> |
|
| 141 |
<% end %> |
|
| redmine/app/views/projects/show.rhtml 2010-04-09 15:33:58.651978555 +0400 | ||
|---|---|---|
| 33 | 33 |
"tracker_id" => tracker.id %>: |
| 34 | 34 |
<%= l(:label_x_open_issues_abbr_on_total, :count => @open_issues_by_tracker[tracker].to_i, |
| 35 | 35 |
:total => @total_issues_by_tracker[tracker].to_i) %> |
| 36 |
(<%= @private_issues_by_tracker[tracker] || 0 %> <%= l(:label_private_issues, @private_issues_by_tracker[tracker] || 0)%>) |
|
| 36 | 37 |
</li> |
| 37 | 38 |
<% end %> |
| 38 | 39 |
</ul> |
| redmine/config/locales/en.yml 2010-04-08 12:57:27.000000000 +0400 | ||
|---|---|---|
| 275 | 275 |
field_default_value: Default value |
| 276 | 276 |
field_comments_sorting: Display comments |
| 277 | 277 |
field_parent_title: Parent page |
| 278 |
field_is_private: Private issue |
|
| 278 | 279 |
field_editable: Editable |
| 279 | 280 |
field_watcher: Watcher |
| 280 | 281 |
field_identity_url: OpenID URL |
| ... | ... | |
| 347 | 348 |
permission_manage_categories: Manage issue categories |
| 348 | 349 |
permission_view_issues: View Issues |
| 349 | 350 |
permission_add_issues: Add issues |
| 351 |
permission_add_private_issues: Add private issues |
|
| 352 |
permission_view_private_issues: View private issues |
|
| 350 | 353 |
permission_edit_issues: Edit issues |
| 351 | 354 |
permission_manage_issue_relations: Manage issue relations |
| 352 | 355 |
permission_add_issue_notes: Add notes |
| ... | ... | |
| 402 | 405 |
project_module_repository: Repository |
| 403 | 406 |
project_module_boards: Boards |
| 404 | 407 |
|
| 408 |
label_access_denied: Access denied |
|
| 405 | 409 |
label_user: User |
| 406 | 410 |
label_user_plural: Users |
| 407 | 411 |
label_user_new: New user |
| ... | ... | |
| 519 | 523 |
label_public_projects: Public projects |
| 520 | 524 |
label_open_issues: open |
| 521 | 525 |
label_open_issues_plural: open |
| 526 |
label_private_issues: private |
|
| 527 |
label_private_issues_plural: private |
|
| 522 | 528 |
label_closed_issues: closed |
| 523 | 529 |
label_closed_issues_plural: closed |
| 524 | 530 |
label_x_open_issues_abbr_on_total: |
| redmine/config/locales/ru.yml 2010-04-08 13:06:36.000000000 +0400 | ||
|---|---|---|
| 354 | 354 |
field_port: Порт |
| 355 | 355 |
field_possible_values: Возможные значения |
| 356 | 356 |
field_priority: Приоритет |
| 357 |
field_is_private: Конфиденциальная задача |
|
| 357 | 358 |
field_project: Проект |
| 358 | 359 |
field_redirect_existing_links: Перенаправить существующие ссылки |
| 359 | 360 |
field_regexp: Регулярное выражение |
| ... | ... | |
| 394 | 395 |
gui_validation_error_plural5: "{{count}} ошибок"
|
| 395 | 396 | |
| 396 | 397 |
label_activity: Активность |
| 398 |
label_access_denied: Доступ запрещен |
|
| 397 | 399 |
label_add_another_file: Добавить ещё один файл |
| 398 | 400 |
label_added_time_by: "Добавил(а) {{author}} {{age}} назад"
|
| 399 | 401 |
label_added: добавлено |
| ... | ... | |
| 593 | 595 |
label_not_contains: не содержит |
| 594 | 596 |
label_not_equals: не соответствует |
| 595 | 597 |
label_open_issues: открыт |
| 598 |
label_private_issues_plural2: конфиденциальных |
|
| 599 |
label_private_issues_plural5: конфиденциальных |
|
| 600 |
label_private_issues_plural: конфиденциальных |
|
| 601 |
label_private_issues: конфиденциальная |
|
| 596 | 602 |
label_open_issues_plural: открыто |
| 597 | 603 |
label_open_issues_plural2: открыто |
| 598 | 604 |
label_open_issues_plural5: открыто |
| ... | ... | |
| 783 | 789 | |
| 784 | 790 |
permission_add_issues: Добавление задач |
| 785 | 791 |
permission_add_issue_notes: Добавление примечаний |
| 792 |
permission_add_private_issues: Добавление конфиденциальных задач |
|
| 793 |
permission_view_private_issues: Просмотр конфиденциальных задач |
|
| 786 | 794 |
permission_add_issue_watchers: Добавление наблюдателей |
| 787 | 795 |
permission_add_messages: Отправка сообщений |
| 788 | 796 |
permission_browse_repository: Просмотр хранилища |
| redmine/lib/redmine.rb 2010-04-08 13:10:43.000000000 +0400 | ||
|---|---|---|
| 52 | 52 |
:queries => :index, |
| 53 | 53 |
:reports => [:issue_report, :issue_report_details]} |
| 54 | 54 |
map.permission :add_issues, {:issues => [:new, :update_form]}
|
| 55 |
map.permission :add_private_issues, {:issues => :new}
|
|
| 56 |
map.permission :view_private_issues, {:projects => [:changelog, :roadmap],
|
|
| 57 |
:issues => [:index, :changes, :show, :context_menu], |
|
| 58 |
:versions => [:show, :status_by], |
|
| 59 |
:queries => :index, |
|
| 60 |
:reports => :issue_report} |
|
| 55 | 61 |
map.permission :edit_issues, {:issues => [:edit, :update, :reply, :bulk_edit, :update_form]}
|
| 56 | 62 |
map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
|
| 57 | 63 |
map.permission :manage_subtasks, {}
|