2011-12-14 19:56:23 +00:00
# encoding: utf-8
#
2011-08-31 08:40:05 +00:00
# Redmine - project management software
2016-03-13 10:30:10 +00:00
# Copyright (C) 2006-2016 Jean-Philippe Lang
2006-12-03 19:55:45 +00:00
#
# 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.
2011-08-31 08:40:05 +00:00
#
2006-12-03 19:55:45 +00:00
# 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.
2011-08-31 08:40:05 +00:00
#
2006-12-03 19:55:45 +00:00
# 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
2016-10-29 08:10:19 +00:00
# Renders the blocks
def render_blocks ( blocks , user , options = { } )
s = '' . html_safe
if blocks . present?
blocks . each do | block |
2017-03-13 19:57:49 +00:00
s << render_block ( block , user ) . to_s
2016-10-29 08:10:19 +00:00
end
end
s
end
2017-03-13 19:57:49 +00:00
# Renders a single block
def render_block ( block , user )
content = render_block_content ( block , user )
if content . present?
2017-03-14 18:25:23 +00:00
handle = content_tag ( 'span' , '' , :class = > 'sort-handle' , :title = > l ( :button_move ) )
close = link_to ( l ( :button_delete ) ,
{ :action = > " remove_block " , :block = > block } ,
:remote = > true , :method = > 'post' ,
:class = > " icon-only icon-close " , :title = > l ( :button_delete ) )
2017-03-13 19:57:49 +00:00
content = content_tag ( 'div' , handle + close , :class = > 'contextual' ) + content
content_tag ( 'div' , content , :class = > " mypage-box " , :id = > " block- #{ block } " )
end
end
2016-10-29 08:10:19 +00:00
# Renders a single block content
def render_block_content ( block , user )
2017-03-14 18:18:19 +00:00
unless block_definition = Redmine :: MyPage . blocks [ block ]
2016-10-29 08:10:19 +00:00
Rails . logger . warn ( " Unknown block \" #{ block } \" found in #{ user . login } (id= #{ user . id } ) preferences " )
return
end
2016-10-30 08:32:31 +00:00
settings = user . pref . my_page_settings ( block )
2017-03-14 18:18:19 +00:00
partial = block_definition [ :partial ]
2016-10-29 08:10:19 +00:00
begin
2017-03-14 18:18:19 +00:00
render ( :partial = > partial , :locals = > { :user = > user , :settings = > settings , :block = > block } )
2016-10-29 08:10:19 +00:00
rescue ActionView :: MissingTemplate
2017-03-14 18:18:19 +00:00
Rails . logger . warn ( " Partial \" #{ partial } \" missing for block \" #{ block } \" found in #{ user . login } (id= #{ user . id } ) preferences " )
2016-10-29 08:10:19 +00:00
return nil
end
end
2016-10-29 10:10:31 +00:00
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
2017-03-13 20:02:34 +00:00
select_tag ( 'block' , options , :id = > " block-select " , :onchange = > " $(' # block-form').submit(); " )
2016-10-29 10:10:31 +00:00
end
2012-12-02 21:08:03 +00:00
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 ) .
2014-10-22 17:37:16 +00:00
references ( :project , :tracker , :priority , :assigned_to ) .
to_a
2012-12-02 21:08:03 +00:00
end
def documents_items
2014-10-22 17:37:16 +00:00
Document . visible . order ( " #{ Document . table_name } .created_on DESC " ) . limit ( 10 ) . to_a
2012-12-02 21:08:03 +00:00
end
2017-03-14 18:18:19 +00:00
def issues_items ( block , settings )
send " #{ block } _items " , settings
2012-12-02 21:08:03 +00:00
end
2017-03-14 18:18:19 +00:00
def issuesassignedtome_items ( settings )
query = IssueQuery . new ( :name = > l ( :label_assigned_to_me_issues ) , :user = > User . current )
query . add_filter 'assigned_to_id' , '=' , [ 'me' ]
query . column_names = settings [ :columns ] . presence || [ 'project' , 'tracker' , 'status' , 'subject' ]
query . sort_criteria = settings [ :sort ] . presence || [ [ 'priority' , 'desc' ] , [ 'updated_on' , 'desc' ] ]
issues = query . issues ( :limit = > 10 )
return issues , query
2012-12-02 21:08:03 +00:00
end
2017-03-14 18:18:19 +00:00
def issuesreportedbyme_items ( settings )
query = IssueQuery . new ( :name = > l ( :label_reported_issues ) , :user = > User . current )
query . add_filter 'author_id' , '=' , [ 'me' ]
query . column_names = settings [ :columns ] . presence || [ 'project' , 'tracker' , 'status' , 'subject' ]
query . sort_criteria = settings [ :sort ] . presence || [ [ 'updated_on' , 'desc' ] ]
issues = query . issues ( :limit = > 10 )
return issues , query
end
def issueswatched_items ( settings )
query = IssueQuery . new ( :name = > l ( :label_watched_issues ) , :user = > User . current )
query . add_filter 'watcher_id' , '=' , [ 'me' ]
query . column_names = settings [ :columns ] . presence || [ 'project' , 'tracker' , 'status' , 'subject' ]
query . sort_criteria = settings [ :sort ] . presence || [ [ 'updated_on' , 'desc' ] ]
issues = query . issues ( :limit = > 10 )
return issues , query
2012-12-02 21:08:03 +00:00
end
def news_items
News . visible .
where ( :project_id = > User . current . projects . map ( & :id ) ) .
limit ( 10 ) .
includes ( :project , :author ) .
2014-10-22 17:37:16 +00:00
references ( :project , :author ) .
2012-12-02 21:08:03 +00:00
order ( " #{ News . table_name } .created_on DESC " ) .
2014-10-22 17:37:16 +00:00
to_a
2012-12-02 21:08:03 +00:00
end
2016-11-03 17:49:14 +00:00
def timelog_items ( settings = { } )
2016-10-30 08:32:31 +00:00
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 ) .
2015-03-10 19:42:45 +00:00
joins ( :activity , :project ) .
references ( :issue = > [ :tracker , :status ] ) .
includes ( :issue = > [ :tracker , :status ] ) .
2012-12-02 21:08:03 +00:00
order ( " #{ TimeEntry . table_name } .spent_on DESC, #{ Project . table_name } .name ASC, #{ Tracker . table_name } .position ASC, #{ Issue . table_name } .id ASC " ) .
2014-10-22 17:37:16 +00:00
to_a
2016-10-30 08:32:31 +00:00
return entries , days
2012-12-02 21:08:03 +00:00
end
2006-12-03 19:55:45 +00:00
end