my_helper.rb
125 lines
| 4.4 KiB
| text/x-ruby
|
RubyLexer
|
r8090 | # encoding: utf-8 | ||
# | ||||
|
r6743 | # Redmine - project management software | ||
|
r14856 | # Copyright (C) 2006-2016 Jean-Philippe Lang | ||
|
r60 | # | ||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; either version 2 | ||||
# of the License, or (at your option) any later version. | ||||
|
r6743 | # | ||
|
r60 | # This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
|
r6743 | # | ||
|
r60 | # You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
module MyHelper | ||||
|
r15545 | # Renders the blocks | ||
def render_blocks(blocks, user, options={}) | ||||
s = ''.html_safe | ||||
if blocks.present? | ||||
blocks.each do |block| | ||||
content = render_block_content(block, user) | ||||
if content.present? | ||||
if options[:edit] | ||||
|
r15546 | close = link_to(l(:button_delete), {:action => "remove_block", :block => block}, :method => 'post', :class => "icon-only icon-close") | ||
|
r15545 | content = close + content_tag('div', content, :class => 'handle') | ||
end | ||||
s << content_tag('div', content, :class => "mypage-box", :id => "block-#{block}") | ||||
end | ||||
end | ||||
end | ||||
s | ||||
end | ||||
# Renders a single block content | ||||
def render_block_content(block, user) | ||||
|
r15548 | unless Redmine::MyPage.blocks.key?(block) | ||
|
r15545 | Rails.logger.warn("Unknown block \"#{block}\" found in #{user.login} (id=#{user.id}) preferences") | ||
return | ||||
end | ||||
|
r15560 | settings = user.pref.my_page_settings(block) | ||
|
r15545 | begin | ||
|
r15560 | render(:partial => "my/blocks/#{block}", :locals => {:user => user, :settings => settings}) | ||
|
r15545 | rescue ActionView::MissingTemplate | ||
Rails.logger.warn("Template missing for block \"#{block}\" found in #{user.login} (id=#{user.id}) preferences") | ||||
return nil | ||||
end | ||||
end | ||||
|
r15548 | def block_select_tag(user) | ||
disabled = user.pref.my_page_layout.values.flatten | ||||
options = content_tag('option') | ||||
Redmine::MyPage.block_options.each do |label, block| | ||||
options << content_tag('option', label, :value => block, :disabled => disabled.include?(block)) | ||||
end | ||||
|
r15549 | select_tag('block', options, :id => "block-select") | ||
|
r15548 | end | ||
|
r10695 | def calendar_items(startdt, enddt) | ||
Issue.visible. | ||||
where(:project_id => User.current.projects.map(&:id)). | ||||
where("(start_date>=? and start_date<=?) or (due_date>=? and due_date<=?)", startdt, enddt, startdt, enddt). | ||||
includes(:project, :tracker, :priority, :assigned_to). | ||||
|
r13100 | references(:project, :tracker, :priority, :assigned_to). | ||
to_a | ||||
|
r10695 | end | ||
def documents_items | ||||
|
r13100 | Document.visible.order("#{Document.table_name}.created_on DESC").limit(10).to_a | ||
|
r10695 | end | ||
def issuesassignedtome_items | ||||
Issue.visible.open. | ||||
|
r14338 | assigned_to(User.current). | ||
|
r10695 | limit(10). | ||
includes(:status, :project, :tracker, :priority). | ||||
|
r13100 | references(:status, :project, :tracker, :priority). | ||
|
r14337 | order("#{IssuePriority.table_name}.position DESC, #{Issue.table_name}.updated_on DESC") | ||
|
r10695 | end | ||
def issuesreportedbyme_items | ||||
|
r15390 | Issue.visible.open. | ||
|
r10695 | where(:author_id => User.current.id). | ||
limit(10). | ||||
includes(:status, :project, :tracker). | ||||
|
r13100 | references(:status, :project, :tracker). | ||
|
r14337 | order("#{Issue.table_name}.updated_on DESC") | ||
|
r10695 | end | ||
def issueswatched_items | ||||
|
r14933 | Issue.visible.open.on_active_project.watched_by(User.current.id).recently_updated.limit(10) | ||
|
r10695 | end | ||
def news_items | ||||
News.visible. | ||||
where(:project_id => User.current.projects.map(&:id)). | ||||
limit(10). | ||||
includes(:project, :author). | ||||
|
r13100 | references(:project, :author). | ||
|
r10695 | order("#{News.table_name}.created_on DESC"). | ||
|
r13100 | to_a | ||
|
r10695 | end | ||
|
r15561 | def timelog_items(settings={}) | ||
|
r15560 | days = settings[:days].to_i | ||
days = 7 if days < 1 || days > 365 | ||||
entries = TimeEntry. | ||||
where("#{TimeEntry.table_name}.user_id = ? AND #{TimeEntry.table_name}.spent_on BETWEEN ? AND ?", User.current.id, User.current.today - (days - 1), User.current.today). | ||||
|
r13689 | joins(:activity, :project). | ||
references(:issue => [:tracker, :status]). | ||||
includes(:issue => [:tracker, :status]). | ||||
|
r10695 | order("#{TimeEntry.table_name}.spent_on DESC, #{Project.table_name}.name ASC, #{Tracker.table_name}.position ASC, #{Issue.table_name}.id ASC"). | ||
|
r13100 | to_a | ||
|
r15560 | |||
return entries, days | ||||
|
r10695 | end | ||
|
r60 | end | ||