File: application_controller_patch.rb

package info (click to toggle)
redmine-plugin-pretend 0.0.2%2Bgit20130821-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 136 kB
  • sloc: ruby: 87; makefile: 35
file content (51 lines) | stat: -rw-r--r-- 1,309 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
require_dependency 'application_controller'

module PretendPatches
 module ApplicationControllerPatch
  def self.included(base)
    base.extend(ClassMethods)
    base.send(:include, InstanceMethods)

     base.class_eval do
       unloadable # Send unloadable so it will not be unloaded in development
     end
  end

  module ClassMethods
  end

  module InstanceMethods
    def pretend_to
      if User.current.logged? && User.current.admin?
        if !session[:real_user_id]
          session[:real_user_id] = User.current.id
          user = User.find(params[:id])
          logger.info "#{User.current} is pretend as #{user}"
          User.current = user
          session[:user_id] = user.id
        end
        redirect_to :back
      else
        render_403
      end
    end

    def unpretend
      if real_user
        logger.info "#{session[:real_user_id]} stop pretend"
        self.logged_user = real_user
        session[:real_user_id] = nil
      end
      redirect_to :back
    end

    def real_user
      @real_user ||= User.find_by_id(User.active.find(session[:real_user_id]))
    end
  end
 end
end

unless ApplicationController.included_modules.include?(PretendPatches::ApplicationControllerPatch)
  ApplicationController.send(:include, PretendPatches::ApplicationControllerPatch)
end