##// END OF EJS Templates
Added cache for application settings (Setting model)....
Added cache for application settings (Setting model). Once the values are cached, only one database query is done at each user request (to check if the cache is still valid). git-svn-id: http://redmine.rubyforge.org/svn/trunk@685 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r666:39c9874a4102
r674:6bdc13b33d8d
Show More
my_controller.rb
145 lines | 4.8 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
- new controller "myController"...
r60 # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang
#
# 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.
#
# 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.
#
# 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.
class MyController < ApplicationController
layout 'base'
before_filter :require_login
Jean-Philippe Lang
removed underscores in block names (problem with scriptaculous sortables)...
r239 BLOCKS = { 'issuesassignedtome' => :label_assigned_to_me_issues,
'issuesreportedbyme' => :label_reported_issues,
Jean-Philippe Lang
Added a new block available for my page: "Watched issues"...
r453 'issueswatched' => :label_watched_issues,
Jean-Philippe Lang
removed underscores in block names (problem with scriptaculous sortables)...
r239 'news' => :label_news_latest,
Jean-Philippe Lang
- new controller "myController"...
r60 'calendar' => :label_calendar,
'documents' => :label_document_plural
}.freeze
Jean-Philippe Lang
removed underscores in block names (problem with scriptaculous sortables)...
r239 DEFAULT_LAYOUT = { 'left' => ['issuesassignedtome'],
'right' => ['issuesreportedbyme']
}.freeze
Jean-Philippe Lang
- new controller "myController"...
r60 verify :xhr => true,
:session => :page_layout,
:only => [:add_block, :remove_block, :order_blocks]
def index
page
render :action => 'page'
end
# Show user's page
def page
@user = self.logged_in_user
Jean-Philippe Lang
removed underscores in block names (problem with scriptaculous sortables)...
r239 @blocks = @user.pref[:my_page_layout] || DEFAULT_LAYOUT
Jean-Philippe Lang
- new controller "myController"...
r60 end
# Edit user's account
def account
@user = self.logged_in_user
Jean-Philippe Lang
"hide my email address" preference added, so that it's not displayed on account/show...
r61 @pref = @user.pref
@user.attributes = params[:user]
@user.pref.attributes = params[:pref]
Jean-Philippe Lang
Added the ability to reset its own RSS access key on "My account"....
r666 if request.post? && @user.save && @user.pref.save
flash[:notice] = l(:notice_account_updated)
redirect_to :action => 'account'
Jean-Philippe Lang
- new controller "myController"...
r60 end
end
# Change user's password
def change_password
@user = self.logged_in_user
Jean-Philippe Lang
Applied the flash notices patch by Matt Jones (slightly edited)....
r597 flash[:error] = l(:notice_can_t_change_password) and redirect_to :action => 'account' and return if @user.auth_source_id
Jean-Philippe Lang
replaced deprecated controller instance variables: @params, @session, @request...
r124 if @user.check_password?(params[:password])
Jean-Philippe Lang
- new controller "myController"...
r60 @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
if @user.save
flash[:notice] = l(:notice_account_password_updated)
else
render :action => 'account'
return
end
else
Jean-Philippe Lang
Applied the flash notices patch by Matt Jones (slightly edited)....
r597 flash[:error] = l(:notice_account_wrong_password)
Jean-Philippe Lang
- new controller "myController"...
r60 end
redirect_to :action => 'account'
Jean-Philippe Lang
Added the ability to reset its own RSS access key on "My account"....
r666 end
# Create a new feeds key
def reset_rss_key
if request.post? && User.current.rss_token
User.current.rss_token.destroy
flash[:notice] = l(:notice_feeds_access_key_reseted)
end
redirect_to :action => 'account'
Jean-Philippe Lang
- new controller "myController"...
r60 end
# User's page layout configuration
def page_layout
@user = self.logged_in_user
Jean-Philippe Lang
fixed: crash on my/page_layout (trying to modify a frozen hash)...
r255 @blocks = @user.pref[:my_page_layout] || DEFAULT_LAYOUT.dup
Jean-Philippe Lang
- new controller "myController"...
r60 session[:page_layout] = @blocks
%w(top left right).each {|f| session[:page_layout][f] ||= [] }
@block_options = []
BLOCKS.each {|k, v| @block_options << [l(v), k]}
end
# Add a block to user's page
# The block is added on top of the page
# params[:block] : id of the block to add
def add_block
block = params[:block]
Jean-Philippe Lang
fixed: error when clicking "add" with no block selected on my/page_layout...
r258 render(:nothing => true) and return unless block && (BLOCKS.keys.include? block)
@user = self.logged_in_user
Jean-Philippe Lang
- new controller "myController"...
r60 # remove if already present in a group
%w(top left right).each {|f| (session[:page_layout][f] ||= []).delete block }
# add it on top
session[:page_layout]['top'].unshift block
render :partial => "block", :locals => {:user => @user, :block_name => block}
end
# Remove a block to user's page
# params[:block] : id of the block to remove
def remove_block
block = params[:block]
# remove block in all groups
%w(top left right).each {|f| (session[:page_layout][f] ||= []).delete block }
render :nothing => true
end
# Change blocks order on user's page
# params[:group] : group to order (top, left or right)
# params[:list-(top|left|right)] : array of block ids of the group
def order_blocks
group = params[:group]
group_items = params["list-#{group}"]
if group_items and group_items.is_a? Array
# remove group blocks if they are presents in other groups
%w(top left right).each {|f|
session[:page_layout][f] = (session[:page_layout][f] || []) - group_items
}
session[:page_layout][group] = group_items
end
render :nothing => true
end
# Save user's page layout
def page_layout_save
@user = self.logged_in_user
@user.pref[:my_page_layout] = session[:page_layout] if session[:page_layout]
@user.pref.save
session[:page_layout] = nil
redirect_to :action => 'page'
end
end