imagine_cms 3.0.0.beta4 → 3.0.0.beta5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
 - data/app/assets/manage/btn_delete.gif +0 -0
 - data/app/assets/manage/bullet.gif +0 -0
 - data/app/assets/manage/start.gif +0 -0
 - data/app/controllers/management/application_controller.rb +4 -0
 - data/app/controllers/management/default_controller.rb +6 -0
 - data/app/controllers/management/user_controller.rb +116 -0
 - data/app/controllers/management/users_controller.rb +77 -0
 - data/app/helpers/cms_application_helper.rb +42 -11
 - data/app/models/user.rb +49 -0
 - data/app/views/layouts/management.html.erb +60 -0
 - data/app/views/management/default/index.html.erb +15 -0
 - data/app/views/management/user/create_first.html.erb +36 -0
 - data/app/views/management/user/login.html.erb +20 -0
 - data/app/views/management/users/create.html.erb +37 -0
 - data/app/views/management/users/edit.html.erb +70 -0
 - data/app/views/management/users/index.html.erb +26 -0
 - data/app/views/management/users/permission_denied.html.erb +1 -0
 - data/imagine_cms.gemspec +1 -1
 - data/lib/extensions/action_controller.rb +114 -1
 - data/lib/imagine_cms/engine.rb +8 -0
 - data/lib/imagine_cms/version.rb +1 -1
 - metadata +23 -7
 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         @@ -0,0 +1,116 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Management::UserController < Management::ApplicationController
         
     | 
| 
      
 2 
     | 
    
         
            +
              skip_before_filter :authenticate_user, :only => [ :login, :logout, :create_first ]
         
     | 
| 
      
 3 
     | 
    
         
            +
              
         
     | 
| 
      
 4 
     | 
    
         
            +
              ###
         
     | 
| 
      
 5 
     | 
    
         
            +
              ### login
         
     | 
| 
      
 6 
     | 
    
         
            +
              ###
         
     | 
| 
      
 7 
     | 
    
         
            +
              
         
     | 
| 
      
 8 
     | 
    
         
            +
              # login page
         
     | 
| 
      
 9 
     | 
    
         
            +
              def login
         
     | 
| 
      
 10 
     | 
    
         
            +
                if request.post?
         
     | 
| 
      
 11 
     | 
    
         
            +
                  test = ::User.find_by_username(params[:login][:username]) rescue nil
         
     | 
| 
      
 12 
     | 
    
         
            +
                  if (test && test.password_hash == User.hash_password(params[:login][:password], test.password_hash[0,16]))
         
     | 
| 
      
 13 
     | 
    
         
            +
                    if (test.active != 1)
         
     | 
| 
      
 14 
     | 
    
         
            +
                      flash[:error] = 'Your account has been disabled by an administrator.'
         
     | 
| 
      
 15 
     | 
    
         
            +
                      redirect_to :action => 'login' and return false
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
                    session[:user_authenticated] = true
         
     | 
| 
      
 18 
     | 
    
         
            +
                  
         
     | 
| 
      
 19 
     | 
    
         
            +
                    session[:user_id] = test.id
         
     | 
| 
      
 20 
     | 
    
         
            +
                    session[:user_username] = test.username
         
     | 
| 
      
 21 
     | 
    
         
            +
                    session[:user_first_name] = test.first_name
         
     | 
| 
      
 22 
     | 
    
         
            +
                    session[:user_last_name] = test.last_name
         
     | 
| 
      
 23 
     | 
    
         
            +
                  
         
     | 
| 
      
 24 
     | 
    
         
            +
                    complete_login(test)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  
         
     | 
| 
      
 26 
     | 
    
         
            +
                    if params[:redirect_on_success]
         
     | 
| 
      
 27 
     | 
    
         
            +
                      redirect_to params[:redirect_on_success] and return
         
     | 
| 
      
 28 
     | 
    
         
            +
                    else
         
     | 
| 
      
 29 
     | 
    
         
            +
                      restore_request(test)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
                  else
         
     | 
| 
      
 32 
     | 
    
         
            +
                    flash[:error] = 'Invalid username or password, please try again.'
         
     | 
| 
      
 33 
     | 
    
         
            +
                    redirect_to params[:redirect_on_failure] || { :action => 'login' }
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
              
         
     | 
| 
      
 38 
     | 
    
         
            +
              def complete_login(user)
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
              
         
     | 
| 
      
 41 
     | 
    
         
            +
              def restore_request(user)
         
     | 
| 
      
 42 
     | 
    
         
            +
                # restore saved request uri & params if they exist
         
     | 
| 
      
 43 
     | 
    
         
            +
                if session[:saved_user_uri]
         
     | 
| 
      
 44 
     | 
    
         
            +
                  uri = session[:saved_user_uri]
         
     | 
| 
      
 45 
     | 
    
         
            +
                  session[:saved_user_uri] = nil
         
     | 
| 
      
 46 
     | 
    
         
            +
                  redirect_to uri
         
     | 
| 
      
 47 
     | 
    
         
            +
                else
         
     | 
| 
      
 48 
     | 
    
         
            +
                  return redirect_to_default(user)
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
              
         
     | 
| 
      
 52 
     | 
    
         
            +
              def redirect_to_default(user)
         
     | 
| 
      
 53 
     | 
    
         
            +
                redirect_to UserRedirectAfterLogin and return if defined?(UserRedirectAfterLogin)
         
     | 
| 
      
 54 
     | 
    
         
            +
                redirect_to :controller => '/manage/default', :action => 'index'
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
              
         
     | 
| 
      
 57 
     | 
    
         
            +
              
         
     | 
| 
      
 58 
     | 
    
         
            +
              ###
         
     | 
| 
      
 59 
     | 
    
         
            +
              ### logout
         
     | 
| 
      
 60 
     | 
    
         
            +
              ###
         
     | 
| 
      
 61 
     | 
    
         
            +
              
         
     | 
| 
      
 62 
     | 
    
         
            +
              def logout
         
     | 
| 
      
 63 
     | 
    
         
            +
                complete_logout(User.find_by_id(session[:user_id])) if session[:authenticated]
         
     | 
| 
      
 64 
     | 
    
         
            +
                reset_session
         
     | 
| 
      
 65 
     | 
    
         
            +
                cookies.delete(:user_auth_status)
         
     | 
| 
      
 66 
     | 
    
         
            +
                flash[:notice] = 'You have been logged out of the system.'
         
     | 
| 
      
 67 
     | 
    
         
            +
                redirect_to UserRedirectAfterLogout and return if defined?(UserRedirectAfterLogout)
         
     | 
| 
      
 68 
     | 
    
         
            +
                redirect_to params[:redirect] and return unless params[:redirect].blank?
         
     | 
| 
      
 69 
     | 
    
         
            +
                redirect_to :action => 'login'
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
              
         
     | 
| 
      
 72 
     | 
    
         
            +
              def complete_logout(user)
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
              
         
     | 
| 
      
 75 
     | 
    
         
            +
              
         
     | 
| 
      
 76 
     | 
    
         
            +
              ###
         
     | 
| 
      
 77 
     | 
    
         
            +
              ### update profile
         
     | 
| 
      
 78 
     | 
    
         
            +
              ###
         
     | 
| 
      
 79 
     | 
    
         
            +
              
         
     | 
| 
      
 80 
     | 
    
         
            +
              def profile
         
     | 
| 
      
 81 
     | 
    
         
            +
                @user = User.find(session[:user_id])
         
     | 
| 
      
 82 
     | 
    
         
            +
                
         
     | 
| 
      
 83 
     | 
    
         
            +
                if request.post?
         
     | 
| 
      
 84 
     | 
    
         
            +
                  @user.attributes = @user.attributes.update(params[:user])
         
     | 
| 
      
 85 
     | 
    
         
            +
                  
         
     | 
| 
      
 86 
     | 
    
         
            +
                  if @user.save
         
     | 
| 
      
 87 
     | 
    
         
            +
                    flash[:notice] = 'Your profile has been updated.'
         
     | 
| 
      
 88 
     | 
    
         
            +
                    redirect_to :action => 'profile' and return true
         
     | 
| 
      
 89 
     | 
    
         
            +
                  end
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
              end
         
     | 
| 
      
 92 
     | 
    
         
            +
              
         
     | 
| 
      
 93 
     | 
    
         
            +
              
         
     | 
| 
      
 94 
     | 
    
         
            +
              ###
         
     | 
| 
      
 95 
     | 
    
         
            +
              ### first time setup
         
     | 
| 
      
 96 
     | 
    
         
            +
              ###
         
     | 
| 
      
 97 
     | 
    
         
            +
              
         
     | 
| 
      
 98 
     | 
    
         
            +
              def create_first
         
     | 
| 
      
 99 
     | 
    
         
            +
                redirect_to :action => 'login' and return unless User.list.empty?
         
     | 
| 
      
 100 
     | 
    
         
            +
                @user = User.new(params[:user])
         
     | 
| 
      
 101 
     | 
    
         
            +
                
         
     | 
| 
      
 102 
     | 
    
         
            +
                if request.post?
         
     | 
| 
      
 103 
     | 
    
         
            +
                  @user.active = true
         
     | 
| 
      
 104 
     | 
    
         
            +
                  @user.is_superuser = true
         
     | 
| 
      
 105 
     | 
    
         
            +
                  
         
     | 
| 
      
 106 
     | 
    
         
            +
                  if @user.save
         
     | 
| 
      
 107 
     | 
    
         
            +
                    flash[:notice] = 'User created successfully. Please log in now.'
         
     | 
| 
      
 108 
     | 
    
         
            +
                    redirect_to :controller => 'user', :action => 'login'
         
     | 
| 
      
 109 
     | 
    
         
            +
                  else
         
     | 
| 
      
 110 
     | 
    
         
            +
                    @errors = 'The following errors occurred:'
         
     | 
| 
      
 111 
     | 
    
         
            +
                    @errors = @user.errors.full_messages
         
     | 
| 
      
 112 
     | 
    
         
            +
                    flash.now[:error] = @errors
         
     | 
| 
      
 113 
     | 
    
         
            +
                  end
         
     | 
| 
      
 114 
     | 
    
         
            +
                end
         
     | 
| 
      
 115 
     | 
    
         
            +
              end
         
     | 
| 
      
 116 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,77 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Management::UsersController < Management::ApplicationController
         
     | 
| 
      
 2 
     | 
    
         
            +
              before_filter :check_permissions, :except => [ :edit ]
         
     | 
| 
      
 3 
     | 
    
         
            +
              
         
     | 
| 
      
 4 
     | 
    
         
            +
              def check_permissions
         
     | 
| 
      
 5 
     | 
    
         
            +
                render :action => 'permission_denied' if !user_has_permission?(:manage_users)
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
              
         
     | 
| 
      
 8 
     | 
    
         
            +
              ###
         
     | 
| 
      
 9 
     | 
    
         
            +
              ### user list
         
     | 
| 
      
 10 
     | 
    
         
            +
              ###
         
     | 
| 
      
 11 
     | 
    
         
            +
              
         
     | 
| 
      
 12 
     | 
    
         
            +
              def index
         
     | 
| 
      
 13 
     | 
    
         
            +
                @users = User.all
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
              
         
     | 
| 
      
 16 
     | 
    
         
            +
              def create
         
     | 
| 
      
 17 
     | 
    
         
            +
                @user = User.new(params[:user])
         
     | 
| 
      
 18 
     | 
    
         
            +
                @user.active = true
         
     | 
| 
      
 19 
     | 
    
         
            +
                
         
     | 
| 
      
 20 
     | 
    
         
            +
                if request.post?
         
     | 
| 
      
 21 
     | 
    
         
            +
                  if @user.save
         
     | 
| 
      
 22 
     | 
    
         
            +
                    flash[:notice] = "User created successfully. Please check the boxes below to set this user's permissions, then click Save when you are done."
         
     | 
| 
      
 23 
     | 
    
         
            +
                    redirect_to :action => 'edit', :id => @user.id
         
     | 
| 
      
 24 
     | 
    
         
            +
                  else
         
     | 
| 
      
 25 
     | 
    
         
            +
                    flash.now[:error] = @user.errors.full_messages
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
              
         
     | 
| 
      
 30 
     | 
    
         
            +
              def edit
         
     | 
| 
      
 31 
     | 
    
         
            +
                @user = authenticate_user
         
     | 
| 
      
 32 
     | 
    
         
            +
                unless @user.is_superuser || @user.can_manage_users || @user.id.to_s == params[:id]
         
     | 
| 
      
 33 
     | 
    
         
            +
                  render :layout => true, :text => "Sorry, you don't have permission to access this section." and return false
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
                
         
     | 
| 
      
 36 
     | 
    
         
            +
                @user = User.find(params[:id])
         
     | 
| 
      
 37 
     | 
    
         
            +
                
         
     | 
| 
      
 38 
     | 
    
         
            +
                if request.post?
         
     | 
| 
      
 39 
     | 
    
         
            +
                  @user.update_attributes(params[:user])
         
     | 
| 
      
 40 
     | 
    
         
            +
                  
         
     | 
| 
      
 41 
     | 
    
         
            +
                  if @user.save
         
     | 
| 
      
 42 
     | 
    
         
            +
                    flash[:notice] = 'User updated successfully. Please note that the user must log out and log back in for permission changes to take effect.'
         
     | 
| 
      
 43 
     | 
    
         
            +
                    user = authenticate_user
         
     | 
| 
      
 44 
     | 
    
         
            +
                    if user.is_superuser || user.can_manage_users
         
     | 
| 
      
 45 
     | 
    
         
            +
                      redirect_to :action => 'index'
         
     | 
| 
      
 46 
     | 
    
         
            +
                    else
         
     | 
| 
      
 47 
     | 
    
         
            +
                      redirect_to :controller => '/manage/default', :action => 'index'
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  else
         
     | 
| 
      
 50 
     | 
    
         
            +
                    flash.now[:error] = @user.errors.full_messages
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
              
         
     | 
| 
      
 55 
     | 
    
         
            +
              def disable
         
     | 
| 
      
 56 
     | 
    
         
            +
                @user = User.find(params[:id])
         
     | 
| 
      
 57 
     | 
    
         
            +
                @user.active = false
         
     | 
| 
      
 58 
     | 
    
         
            +
                @user.save
         
     | 
| 
      
 59 
     | 
    
         
            +
                flash[:notice] = 'Login privileges have been suspended for ' + @user.username + '.'
         
     | 
| 
      
 60 
     | 
    
         
            +
                redirect_to :action => 'index'
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
              
         
     | 
| 
      
 63 
     | 
    
         
            +
              def enable
         
     | 
| 
      
 64 
     | 
    
         
            +
                @user = User.find(params[:id])
         
     | 
| 
      
 65 
     | 
    
         
            +
                @user.active = true
         
     | 
| 
      
 66 
     | 
    
         
            +
                @user.save
         
     | 
| 
      
 67 
     | 
    
         
            +
                flash[:notice] = 'Login privileges for ' + @user.username + ' have been restored.'
         
     | 
| 
      
 68 
     | 
    
         
            +
                redirect_to :action => 'index'
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
              
         
     | 
| 
      
 71 
     | 
    
         
            +
              def destroy
         
     | 
| 
      
 72 
     | 
    
         
            +
                @user = User.find(params[:id])
         
     | 
| 
      
 73 
     | 
    
         
            +
                flash[:notice] = @user.username + ' has been removed from the system.'
         
     | 
| 
      
 74 
     | 
    
         
            +
                @user.destroy
         
     | 
| 
      
 75 
     | 
    
         
            +
                redirect_to :action => 'index'
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -88,21 +88,52 @@ module CmsApplicationHelper 
     | 
|
| 
       88 
88 
     | 
    
         | 
| 
       89 
89 
     | 
    
         
             
              # Similar to button_to, but takes a url for a button image as its first argument.
         
     | 
| 
       90 
90 
     | 
    
         
             
              def image_button_to(source, options = {}, html_options = {})
         
     | 
| 
       91 
     | 
    
         
            -
                html_options.stringify_keys!
         
     | 
| 
       92 
     | 
    
         
            -
                html_options[:type] = 'image'
         
     | 
| 
       93 
     | 
    
         
            -
                html_options[:src] = image_path(source)
         
     | 
| 
      
 91 
     | 
    
         
            +
                # html_options.stringify_keys!
         
     | 
| 
      
 92 
     | 
    
         
            +
                # html_options[:type] = 'image'
         
     | 
| 
      
 93 
     | 
    
         
            +
                # html_options[:src] = image_path(source)
         
     | 
| 
      
 94 
     | 
    
         
            +
                # 
         
     | 
| 
      
 95 
     | 
    
         
            +
                # convert_boolean_attributes!(html_options, %w( disabled ))
         
     | 
| 
      
 96 
     | 
    
         
            +
                # 
         
     | 
| 
      
 97 
     | 
    
         
            +
                # if confirm = html_options.delete("confirm")
         
     | 
| 
      
 98 
     | 
    
         
            +
                #   html_options["onclick"] = "return #{confirm_javascript_function(confirm)};"
         
     | 
| 
      
 99 
     | 
    
         
            +
                # end
         
     | 
| 
      
 100 
     | 
    
         
            +
                # 
         
     | 
| 
      
 101 
     | 
    
         
            +
                # url = options.is_a?(String) ? options : url_for(options)
         
     | 
| 
      
 102 
     | 
    
         
            +
                # name ||= url
         
     | 
| 
      
 103 
     | 
    
         
            +
                # 
         
     | 
| 
      
 104 
     | 
    
         
            +
                # "<form method=\"post\" action=\"#{h url}\" class=\"image-button-to\"><div>" +
         
     | 
| 
      
 105 
     | 
    
         
            +
                #   tag("input", html_options) + "</div></form>"
         
     | 
| 
      
 106 
     | 
    
         
            +
                html_options = html_options.stringify_keys
         
     | 
| 
       94 
107 
     | 
    
         | 
| 
       95 
108 
     | 
    
         
             
                convert_boolean_attributes!(html_options, %w( disabled ))
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                 
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                method_tag = ''
         
     | 
| 
      
 111 
     | 
    
         
            +
                if (method = html_options.delete('method')) && %w{put delete}.include?(method.to_s)
         
     | 
| 
      
 112 
     | 
    
         
            +
                  method_tag = tag('input', :type => 'hidden', :name => '_method', :value => method.to_s)
         
     | 
| 
       99 
113 
     | 
    
         
             
                end
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
                 
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                form_method = method.to_s == 'get' ? 'get' : 'post'
         
     | 
| 
      
 116 
     | 
    
         
            +
                form_options = html_options.delete('form') || {}
         
     | 
| 
      
 117 
     | 
    
         
            +
                form_options[:class] ||= html_options.delete('form_class') || 'button_to'
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                remote = html_options.delete('remote')
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                request_token_tag = ''
         
     | 
| 
      
 122 
     | 
    
         
            +
                if form_method == 'post' && protect_against_forgery?
         
     | 
| 
      
 123 
     | 
    
         
            +
                  request_token_tag = tag(:input, :type => "hidden", :name => request_forgery_protection_token.to_s, :value => form_authenticity_token)
         
     | 
| 
      
 124 
     | 
    
         
            +
                end
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                url = options.is_a?(String) ? options : self.url_for(options)
         
     | 
| 
       102 
127 
     | 
    
         
             
                name ||= url
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
                 
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                html_options = convert_options_to_data_attributes(options, html_options)
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                html_options.merge!("type" => "image", "value" => name, "src" => image_path(source))
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                form_options.merge!(:method => form_method, :action => url, :class => "image-button-to")
         
     | 
| 
      
 134 
     | 
    
         
            +
                form_options.merge!("data-remote" => "true") if remote
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                "#{tag(:form, form_options, true)}<div>#{method_tag}#{tag("input", html_options)}#{request_token_tag}</div></form>".html_safe
         
     | 
| 
       106 
137 
     | 
    
         
             
              end
         
     | 
| 
       107 
138 
     | 
    
         | 
| 
       108 
139 
     | 
    
         
             
              # Similar to submit_to_remote, but takes a url for a button image as its
         
     | 
    
        data/app/models/user.rb
    ADDED
    
    | 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class User < ActiveRecord::Base # :nodoc:
         
     | 
| 
      
 2 
     | 
    
         
            +
              require 'dynamic_methods'
         
     | 
| 
      
 3 
     | 
    
         
            +
              include DynamicMethods
         
     | 
| 
      
 4 
     | 
    
         
            +
              
         
     | 
| 
      
 5 
     | 
    
         
            +
              attr_reader :password # :nodoc:
         
     | 
| 
      
 6 
     | 
    
         
            +
              
         
     | 
| 
      
 7 
     | 
    
         
            +
              has_and_belongs_to_many :groups, :class_name => 'UserGroup', :join_table => 'user_group_memberships'
         
     | 
| 
      
 8 
     | 
    
         
            +
              
         
     | 
| 
      
 9 
     | 
    
         
            +
              validates_presence_of [ :username, :password, :first_name, :last_name ], :message => 'is required'
         
     | 
| 
      
 10 
     | 
    
         
            +
              validates_length_of :password, :minimum => 4
         
     | 
| 
      
 11 
     | 
    
         
            +
              validates_uniqueness_of :username, :message => 'already in use'
         
     | 
| 
      
 12 
     | 
    
         
            +
              validates_confirmation_of :password
         
     | 
| 
      
 13 
     | 
    
         
            +
              
         
     | 
| 
      
 14 
     | 
    
         
            +
              def name ; [self.first_name, self.last_name].compact.join(" ") ; end
         
     | 
| 
      
 15 
     | 
    
         
            +
              
         
     | 
| 
      
 16 
     | 
    
         
            +
              SaltLength = 16 # :nodoc:
         
     | 
| 
      
 17 
     | 
    
         
            +
              
         
     | 
| 
      
 18 
     | 
    
         
            +
              def password=(val) # :nodoc:
         
     | 
| 
      
 19 
     | 
    
         
            +
                @password = val
         
     | 
| 
      
 20 
     | 
    
         
            +
                self.password_hash = User.hash_password(val) if (val ||= "") != ""
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
              
         
     | 
| 
      
 23 
     | 
    
         
            +
              def self.hash_password(val, salt = '') # :nodoc:
         
     | 
| 
      
 24 
     | 
    
         
            +
                require 'digest/sha1'
         
     | 
| 
      
 25 
     | 
    
         
            +
                
         
     | 
| 
      
 26 
     | 
    
         
            +
                # create the salt if we need to
         
     | 
| 
      
 27 
     | 
    
         
            +
                if salt.length != SaltLength
         
     | 
| 
      
 28 
     | 
    
         
            +
                  salt = ''
         
     | 
| 
      
 29 
     | 
    
         
            +
                  allowed_chars = (('a'..'f').to_a).concat(('0'..'9').to_a)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  SaltLength.times do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    salt << allowed_chars[rand(allowed_chars.length)]
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
                
         
     | 
| 
      
 35 
     | 
    
         
            +
                # now, let the hashing begin
         
     | 
| 
      
 36 
     | 
    
         
            +
                digest = Digest::SHA1.new
         
     | 
| 
      
 37 
     | 
    
         
            +
                digest << salt << val
         
     | 
| 
      
 38 
     | 
    
         
            +
                salt << digest.hexdigest
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
              
         
     | 
| 
      
 41 
     | 
    
         
            +
              def before_validation_on_update # :nodoc:
         
     | 
| 
      
 42 
     | 
    
         
            +
                # if password is blank, user is not trying to change it.
         
     | 
| 
      
 43 
     | 
    
         
            +
                # just appease the validator by setting something valid
         
     | 
| 
      
 44 
     | 
    
         
            +
                if ((@password ||= "") == "")
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @password = "imapassword" 
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @password_confirmation = "imapassword" 
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <%-
         
     | 
| 
      
 2 
     | 
    
         
            +
              @nav_sections = []
         
     | 
| 
      
 3 
     | 
    
         
            +
              @subnav_sections = []
         
     | 
| 
      
 4 
     | 
    
         
            +
              
         
     | 
| 
      
 5 
     | 
    
         
            +
              if is_logged_in_user?
         
     | 
| 
      
 6 
     | 
    
         
            +
                @nav_sections << [ 'Users', { :controller => '/manage/users' } ] if user_has_permission?(:manage_users)
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
            -%>
         
     | 
| 
      
 9 
     | 
    
         
            +
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         
     | 
| 
      
 10 
     | 
    
         
            +
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
         
     | 
| 
      
 13 
     | 
    
         
            +
              <head>
         
     | 
| 
      
 14 
     | 
    
         
            +
                <title><%= controller.controller_path.split('/').concat([ params[:action] ]).map { |s| s.titlecase }.join(' > ') %></title>
         
     | 
| 
      
 15 
     | 
    
         
            +
                <%= stylesheet_link_tag    "application", :media => "all" %>
         
     | 
| 
      
 16 
     | 
    
         
            +
                <%= stylesheet_link_tag    "manage", :media => "all" %>
         
     | 
| 
      
 17 
     | 
    
         
            +
                <%#= stylesheet_link_tag 'print', :media => 'print' %>
         
     | 
| 
      
 18 
     | 
    
         
            +
                <%= javascript_include_tag "application" %>
         
     | 
| 
      
 19 
     | 
    
         
            +
                <%= csrf_meta_tag %>
         
     | 
| 
      
 20 
     | 
    
         
            +
              </head>
         
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
              <body<%= @onload.blank? ? '' : " onload=\"#{@onload}\"" %>>
         
     | 
| 
      
 23 
     | 
    
         
            +
                <table cellpadding="0" cellspacing="0" border="0" width="100%" class="noprint">
         
     | 
| 
      
 24 
     | 
    
         
            +
                  <tr height="35" bgcolor="#4D4D4D">
         
     | 
| 
      
 25 
     | 
    
         
            +
                    <td style="padding: 7px 15px 0 15px; border-bottom: solid #ffffff 1px; color: white">
         
     | 
| 
      
 26 
     | 
    
         
            +
                    <%- if is_logged_in_user? -%>
         
     | 
| 
      
 27 
     | 
    
         
            +
                      <!-- Header Navigation -->
         
     | 
| 
      
 28 
     | 
    
         
            +
                      <div style="float: left; padding-top: 2px;">
         
     | 
| 
      
 29 
     | 
    
         
            +
                        <a href="/manage"><img src="/assets/manage/start.gif" width="44" height="14" alt="Start" /></a>
         
     | 
| 
      
 30 
     | 
    
         
            +
                      </div>
         
     | 
| 
      
 31 
     | 
    
         
            +
                      <div style="float: left; padding-left: 20px;">
         
     | 
| 
      
 32 
     | 
    
         
            +
                        <%= raw @nav_sections.map { |nav| link_to(nav[0], nav[1], :style => 'color: white') }.join(' | ') %>
         
     | 
| 
      
 33 
     | 
    
         
            +
                      </div>
         
     | 
| 
      
 34 
     | 
    
         
            +
                      <div style="float: right">
         
     | 
| 
      
 35 
     | 
    
         
            +
                        <%= link_to 'Change password', { :controller => '/manage/users', :action => 'edit', :id => session[:user_id] }, :style => 'color: white'%> |
         
     | 
| 
      
 36 
     | 
    
         
            +
                        <%= link_to 'Log out', { :controller => '/manage/user', :action => 'logout' }, :style => 'color: white' %>
         
     | 
| 
      
 37 
     | 
    
         
            +
                      </div>
         
     | 
| 
      
 38 
     | 
    
         
            +
                    <%- end -%>
         
     | 
| 
      
 39 
     | 
    
         
            +
                    </td>
         
     | 
| 
      
 40 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 41 
     | 
    
         
            +
                  <%- unless @subnav_sections.blank? -%>
         
     | 
| 
      
 42 
     | 
    
         
            +
                  <tr height="30" bgcolor="#777777">
         
     | 
| 
      
 43 
     | 
    
         
            +
                    <td style="padding: 7px 15px 0 15px; border-bottom: solid #ffffff 1px; color: white">
         
     | 
| 
      
 44 
     | 
    
         
            +
                      <!-- Header Navigation -->
         
     | 
| 
      
 45 
     | 
    
         
            +
                      <div style="float: left; padding-left: 20px;">
         
     | 
| 
      
 46 
     | 
    
         
            +
                        <%= @subnav_sections.map { |nav| link_to(nav[0], nav[1], :style => 'color: white') }.join(' | ') %>
         
     | 
| 
      
 47 
     | 
    
         
            +
                      </div>
         
     | 
| 
      
 48 
     | 
    
         
            +
                      <div style="float: right">
         
     | 
| 
      
 49 
     | 
    
         
            +
                      </div>
         
     | 
| 
      
 50 
     | 
    
         
            +
                    </td>
         
     | 
| 
      
 51 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 52 
     | 
    
         
            +
                  <%- end -%>
         
     | 
| 
      
 53 
     | 
    
         
            +
                </table>
         
     | 
| 
      
 54 
     | 
    
         
            +
                
         
     | 
| 
      
 55 
     | 
    
         
            +
                <div id="management-content" style="padding: 15px 10px 1px 15px">
         
     | 
| 
      
 56 
     | 
    
         
            +
                  <!-- Main Content -->
         
     | 
| 
      
 57 
     | 
    
         
            +
                  <%= yield %>
         
     | 
| 
      
 58 
     | 
    
         
            +
                </div>
         
     | 
| 
      
 59 
     | 
    
         
            +
              </body>
         
     | 
| 
      
 60 
     | 
    
         
            +
            </html>
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <%-
         
     | 
| 
      
 2 
     | 
    
         
            +
              @nav_sections = []
         
     | 
| 
      
 3 
     | 
    
         
            +
              
         
     | 
| 
      
 4 
     | 
    
         
            +
              if is_logged_in_user?
         
     | 
| 
      
 5 
     | 
    
         
            +
                @nav_sections << [ 'Users', { :controller => '/manage/users' } ] if user_has_permission?(:manage_users)
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
            -%>
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            <ul>
         
     | 
| 
      
 10 
     | 
    
         
            +
              <li>
         
     | 
| 
      
 11 
     | 
    
         
            +
              <%= (@nav_sections.map { |nav| link_to(nav[0], nav[1]) }.safe_join('</li><li>')) %>
         
     | 
| 
      
 12 
     | 
    
         
            +
              </li>
         
     | 
| 
      
 13 
     | 
    
         
            +
            </ul>
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            <p>You should override this page in your own application.</p>
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <%= flash_message %>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            <%= form_tag do %>
         
     | 
| 
      
 4 
     | 
    
         
            +
            <table>
         
     | 
| 
      
 5 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 6 
     | 
    
         
            +
                <td>First name:</td>
         
     | 
| 
      
 7 
     | 
    
         
            +
                <td><%= text_field :user, :first_name %></td>
         
     | 
| 
      
 8 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 9 
     | 
    
         
            +
              
         
     | 
| 
      
 10 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 11 
     | 
    
         
            +
                <td>Last name:</td>
         
     | 
| 
      
 12 
     | 
    
         
            +
                <td><%= text_field :user, :last_name %></td>
         
     | 
| 
      
 13 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 14 
     | 
    
         
            +
              
         
     | 
| 
      
 15 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 16 
     | 
    
         
            +
                <td>Username:</td>
         
     | 
| 
      
 17 
     | 
    
         
            +
                <td><%= text_field :user, :username %></td>
         
     | 
| 
      
 18 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 19 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 20 
     | 
    
         
            +
                <td>Email Address:</td>
         
     | 
| 
      
 21 
     | 
    
         
            +
                <td><%= text_field :user, :email_address %></td>
         
     | 
| 
      
 22 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 23 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 24 
     | 
    
         
            +
                <td>Password:</td>
         
     | 
| 
      
 25 
     | 
    
         
            +
                <td><%= password_field :user, :password %></td>
         
     | 
| 
      
 26 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 27 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 28 
     | 
    
         
            +
                <td>Confirm:</td>
         
     | 
| 
      
 29 
     | 
    
         
            +
                <td><%= password_field :user, :password_confirmation %></td>
         
     | 
| 
      
 30 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 31 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 32 
     | 
    
         
            +
                <td></td>
         
     | 
| 
      
 33 
     | 
    
         
            +
                <td><%= submit_tag 'Create' %></td>
         
     | 
| 
      
 34 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 35 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 36 
     | 
    
         
            +
            <% end %>
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <%= flash_message %>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            <%= form_tag({}, { :name => 'login_form' }) do %>
         
     | 
| 
      
 4 
     | 
    
         
            +
            <table>
         
     | 
| 
      
 5 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 6 
     | 
    
         
            +
                <td align="right">Username:</td>
         
     | 
| 
      
 7 
     | 
    
         
            +
                <td><%= text_field :login, :username, { :class => 'form' } %></td>
         
     | 
| 
      
 8 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 9 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 10 
     | 
    
         
            +
                <td align="right">Password:</td>
         
     | 
| 
      
 11 
     | 
    
         
            +
                <td><%= password_field :login, :password, { :class => 'form' } %></td>
         
     | 
| 
      
 12 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 13 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 14 
     | 
    
         
            +
                <td></td>
         
     | 
| 
      
 15 
     | 
    
         
            +
                <td><%= submit_tag 'Login', :class => 'form_button' %></td>
         
     | 
| 
      
 16 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 17 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 18 
     | 
    
         
            +
            <% end %>
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            <%= javascript_tag "try { document.forms['login_form'].elements['login_username'].focus(); } catch (e) {}" %>
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <h2>Create New User</h2><br/>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            <%= flash_message %>
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            <%= form_tag do %>
         
     | 
| 
      
 6 
     | 
    
         
            +
            <table>
         
     | 
| 
      
 7 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 8 
     | 
    
         
            +
                <td>First name:</td>
         
     | 
| 
      
 9 
     | 
    
         
            +
                <td><%= text_field :user, :first_name %></td>
         
     | 
| 
      
 10 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 11 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 12 
     | 
    
         
            +
                <td>Last name:</td>
         
     | 
| 
      
 13 
     | 
    
         
            +
                <td><%= text_field :user, :last_name %></td>
         
     | 
| 
      
 14 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 15 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 16 
     | 
    
         
            +
                <td>Email address:</td>
         
     | 
| 
      
 17 
     | 
    
         
            +
                <td><%= text_field :user, :email_address %></td>
         
     | 
| 
      
 18 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 19 
     | 
    
         
            +
              
         
     | 
| 
      
 20 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 21 
     | 
    
         
            +
                <td>Username:</td>
         
     | 
| 
      
 22 
     | 
    
         
            +
                <td><%= text_field :user, :username %></td>
         
     | 
| 
      
 23 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 24 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 25 
     | 
    
         
            +
                <td>Password:</td>
         
     | 
| 
      
 26 
     | 
    
         
            +
                <td><%= password_field :user, :password %></td>
         
     | 
| 
      
 27 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 28 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 29 
     | 
    
         
            +
                <td>Confirm:</td>
         
     | 
| 
      
 30 
     | 
    
         
            +
                <td><%= password_field :user, :password_confirmation %></td>
         
     | 
| 
      
 31 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 32 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 33 
     | 
    
         
            +
                <td></td>
         
     | 
| 
      
 34 
     | 
    
         
            +
                <td><%= submit_tag 'Create', :class => 'form_button' %></td>
         
     | 
| 
      
 35 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 36 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 37 
     | 
    
         
            +
            <% end -%>
         
     | 
| 
         @@ -0,0 +1,70 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <%= flash_message %>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            <%= form_tag do %>
         
     | 
| 
      
 4 
     | 
    
         
            +
            <table>
         
     | 
| 
      
 5 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 6 
     | 
    
         
            +
                <td>First name:</td>
         
     | 
| 
      
 7 
     | 
    
         
            +
                <td><%= text_field :user, :first_name %></td>
         
     | 
| 
      
 8 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 9 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 10 
     | 
    
         
            +
                <td>Last name:</td>
         
     | 
| 
      
 11 
     | 
    
         
            +
                <td><%= text_field :user, :last_name %></td>
         
     | 
| 
      
 12 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 13 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 14 
     | 
    
         
            +
                <td>Email address:</td>
         
     | 
| 
      
 15 
     | 
    
         
            +
                <td><%= text_field :user, :email_address %></td>
         
     | 
| 
      
 16 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 17 
     | 
    
         
            +
              
         
     | 
| 
      
 18 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 19 
     | 
    
         
            +
                <td>Username:</td>
         
     | 
| 
      
 20 
     | 
    
         
            +
                <td><%= text_field :user, :username %></td>
         
     | 
| 
      
 21 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 22 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 23 
     | 
    
         
            +
                <td>New Password:</td>
         
     | 
| 
      
 24 
     | 
    
         
            +
                <td><%= password_field :user, :password %></td>
         
     | 
| 
      
 25 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 26 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 27 
     | 
    
         
            +
                <td>Confirm:</td>
         
     | 
| 
      
 28 
     | 
    
         
            +
                <td><%= password_field :user, :password_confirmation %></td>
         
     | 
| 
      
 29 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 30 
     | 
    
         
            +
              
         
     | 
| 
      
 31 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 32 
     | 
    
         
            +
                <td>Administrator:</td>
         
     | 
| 
      
 33 
     | 
    
         
            +
                <td><%= check_box :user, :is_superuser %></td>
         
     | 
| 
      
 34 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 35 
     | 
    
         
            +
              
         
     | 
| 
      
 36 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 37 
     | 
    
         
            +
                <td colspan="2">-- OR -- </td>
         
     | 
| 
      
 38 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 39 
     | 
    
         
            +
              
         
     | 
| 
      
 40 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 41 
     | 
    
         
            +
                <td>Manage Restaurants:</td>
         
     | 
| 
      
 42 
     | 
    
         
            +
                <td><%= check_box :user, :can_manage_restaurants %></td>
         
     | 
| 
      
 43 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 44 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 45 
     | 
    
         
            +
                <td>Manage Recipes:</td>
         
     | 
| 
      
 46 
     | 
    
         
            +
                <td><%= check_box :user, :can_manage_recipes %></td>
         
     | 
| 
      
 47 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 48 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 49 
     | 
    
         
            +
                <td>Manage Blog Posts:</td>
         
     | 
| 
      
 50 
     | 
    
         
            +
                <td><%= check_box :user, :can_manage_blog %></td>
         
     | 
| 
      
 51 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 52 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 53 
     | 
    
         
            +
                <td>Manage Requests:</td>
         
     | 
| 
      
 54 
     | 
    
         
            +
                <td><%= check_box :user, :can_manage_reqs %></td>
         
     | 
| 
      
 55 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 56 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 57 
     | 
    
         
            +
                <td>Manage Members:</td>
         
     | 
| 
      
 58 
     | 
    
         
            +
                <td><%= check_box :user, :can_manage_members %></td>
         
     | 
| 
      
 59 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 60 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 61 
     | 
    
         
            +
                <td>Manage Users:</td>
         
     | 
| 
      
 62 
     | 
    
         
            +
                <td><%= check_box :user, :can_manage_users %></td>
         
     | 
| 
      
 63 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 64 
     | 
    
         
            +
              
         
     | 
| 
      
 65 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 66 
     | 
    
         
            +
                <td></td>
         
     | 
| 
      
 67 
     | 
    
         
            +
                <td><%= submit_tag 'Update' %> or <%= link_to 'Cancel', :action => 'index' %></td>
         
     | 
| 
      
 68 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 69 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 70 
     | 
    
         
            +
            <% end %>
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <h2>Manage Users</h2><br/>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            <%= link_to raw('Create a new user »'), :action => 'create' %>
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            <%= flash_message %>
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            <table cellspacing="3" cellpadding="1" border="0" width="95%">
         
     | 
| 
      
 8 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 9 
     | 
    
         
            +
                <td bgcolor="#dedede" width="26%"><b>USERNAME</b></td>
         
     | 
| 
      
 10 
     | 
    
         
            +
                <td bgcolor="#dedede" width="22%"><b>FIRST NAME</b></td>
         
     | 
| 
      
 11 
     | 
    
         
            +
                <td bgcolor="#dedede" width="22%"><b>LAST NAME</b></td>
         
     | 
| 
      
 12 
     | 
    
         
            +
                <td bgcolor="#dedede" width="10%"><b>Active?</b></td>
         
     | 
| 
      
 13 
     | 
    
         
            +
                <td bgcolor="#dedede" width="10%"> </td>
         
     | 
| 
      
 14 
     | 
    
         
            +
                <td bgcolor="#dedede" width="10%"> </td>
         
     | 
| 
      
 15 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 16 
     | 
    
         
            +
              <% for u in @users %>
         
     | 
| 
      
 17 
     | 
    
         
            +
              <tr>
         
     | 
| 
      
 18 
     | 
    
         
            +
                <td><%= link_to u.username, :action => 'edit', :id => u %></td>
         
     | 
| 
      
 19 
     | 
    
         
            +
                <td><%= u.first_name %></td>
         
     | 
| 
      
 20 
     | 
    
         
            +
                <td><%= u.last_name %></td>
         
     | 
| 
      
 21 
     | 
    
         
            +
                <td><%= u.active ? 'Y' : 'N' %>
         
     | 
| 
      
 22 
     | 
    
         
            +
                <td><%= button_to((u.active ? 'Disable' : 'Enable'), { :action => (u.active ? 'disable' : 'enable'), :id => u}, { :class => 'form_button' }) if u.username != session[:user_username] %></td>
         
     | 
| 
      
 23 
     | 
    
         
            +
                <td><%= button_to('Delete', { :action => 'destroy', :id => u }, { :confirm => 'Are you sure you want to delete ' + u.username + '?', :class => 'form_button' }) if u.username != session[:user_username] %></td>
         
     | 
| 
      
 24 
     | 
    
         
            +
              </tr>
         
     | 
| 
      
 25 
     | 
    
         
            +
              <% end %>
         
     | 
| 
      
 26 
     | 
    
         
            +
            </table><br/>
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Sorry, you don't have permission to manage users.
         
     | 
    
        data/imagine_cms.gemspec
    CHANGED
    
    | 
         @@ -19,7 +19,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       19 
19 
     | 
    
         
             
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         
     | 
| 
       20 
20 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
              s.add_dependency "rails",               "~> 3.2. 
     | 
| 
      
 22 
     | 
    
         
            +
              s.add_dependency "rails",               "~> 3.2.5"
         
     | 
| 
       23 
23 
     | 
    
         
             
              s.add_dependency "mini_magick",         "~> 3.4"
         
     | 
| 
       24 
24 
     | 
    
         
             
              s.add_dependency "net-dns",             "~> 0.6.1"
         
     | 
| 
       25 
25 
     | 
    
         
             
            end
         
     | 
| 
         @@ -4,6 +4,76 @@ module ActionControllerExtensions 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
              module InstanceMethods
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
                # Saves the current request to the session so that it can be replayed later
         
     | 
| 
      
 8 
     | 
    
         
            +
                # (for example, after authentication). Only params of type String, Hash and
         
     | 
| 
      
 9 
     | 
    
         
            +
                # Array will be saved. save_request is called in a before_filter in
         
     | 
| 
      
 10 
     | 
    
         
            +
                # application.rb.
         
     | 
| 
      
 11 
     | 
    
         
            +
                #
         
     | 
| 
      
 12 
     | 
    
         
            +
                # Two levels of saved params are required so that params can be unsaved in
         
     | 
| 
      
 13 
     | 
    
         
            +
                # the event of a 404 or other event that would make the current param set an
         
     | 
| 
      
 14 
     | 
    
         
            +
                # unlikely or undesirable candidate for replaying.
         
     | 
| 
      
 15 
     | 
    
         
            +
                def save_user_request
         
     | 
| 
      
 16 
     | 
    
         
            +
                  return if params[:action] == 'login'
         
     | 
| 
      
 17 
     | 
    
         
            +
                  
         
     | 
| 
      
 18 
     | 
    
         
            +
                  session[:old_saved_user_uri] = session[:saved_user_uri];
         
     | 
| 
      
 19 
     | 
    
         
            +
                  session[:old_saved_user_params] = session[:saved_user_params] || {};
         
     | 
| 
      
 20 
     | 
    
         
            +
                  saved_params = params.reject { |k, v| !(v.kind_of?(String) || v.kind_of?(Hash) || v.kind_of?(Array)) }
         
     | 
| 
      
 21 
     | 
    
         
            +
                  saved_params.each { |key, val| saved_params[key] = val.reject { |k, v| !(v.kind_of?(String) || v.kind_of?(Hash) || v.kind_of?(Array)) } if val.kind_of?(Hash) }
         
     | 
| 
      
 22 
     | 
    
         
            +
                  session[:saved_user_uri] = request.url
         
     | 
| 
      
 23 
     | 
    
         
            +
                  session[:saved_user_params] = saved_params
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
                
         
     | 
| 
      
 26 
     | 
    
         
            +
                # Returns a User object corresponding to the currently logged in user, or returns false
         
     | 
| 
      
 27 
     | 
    
         
            +
                # and redirects to the login page if not logged in.
         
     | 
| 
      
 28 
     | 
    
         
            +
                def authenticate_user
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # if user is not logged in, record the current request and redirect
         
     | 
| 
      
 30 
     | 
    
         
            +
                  if !session[:user_authenticated]
         
     | 
| 
      
 31 
     | 
    
         
            +
                    if User.find(:all).size == 0
         
     | 
| 
      
 32 
     | 
    
         
            +
                      flash[:notice] = 'No users exist in the system. Please create one now.'
         
     | 
| 
      
 33 
     | 
    
         
            +
                      redirect_to :controller => '/management/user', :action => 'create_first'
         
     | 
| 
      
 34 
     | 
    
         
            +
                    else
         
     | 
| 
      
 35 
     | 
    
         
            +
                      flash[:notice] = 'This is an admin-only function. To continue, please log in.'
         
     | 
| 
      
 36 
     | 
    
         
            +
                      save_user_request
         
     | 
| 
      
 37 
     | 
    
         
            +
                      redirect_to :controller => '/management/user', :action => 'login'
         
     | 
| 
      
 38 
     | 
    
         
            +
                    end
         
     | 
| 
      
 39 
     | 
    
         
            +
                    
         
     | 
| 
      
 40 
     | 
    
         
            +
                    return false
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @user = User.find(session[:user_id]) rescue nil
         
     | 
| 
      
 44 
     | 
    
         
            +
                  session[:user_is_superuser] = @user.is_superuser rescue nil
         
     | 
| 
      
 45 
     | 
    
         
            +
                  
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @user
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
                
         
     | 
| 
      
 49 
     | 
    
         
            +
                # Takes a symbol/string or array of symbols/strings and returns true if user has all
         
     | 
| 
      
 50 
     | 
    
         
            +
                # of the named permissions.
         
     | 
| 
      
 51 
     | 
    
         
            +
                #
         
     | 
| 
      
 52 
     | 
    
         
            +
                # Result is stored in the session to speed up future checks.
         
     | 
| 
      
 53 
     | 
    
         
            +
                def user_has_permissions?(*permission_set)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  return false if !(@user ||= authenticate_user)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  
         
     | 
| 
      
 56 
     | 
    
         
            +
                  if !permission_set.is_a? Array
         
     | 
| 
      
 57 
     | 
    
         
            +
                    permission_set = [ permission_set ]
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
                  
         
     | 
| 
      
 60 
     | 
    
         
            +
                  if session[:user_is_superuser]
         
     | 
| 
      
 61 
     | 
    
         
            +
                    for perm in permission_set
         
     | 
| 
      
 62 
     | 
    
         
            +
                      perm = perm.to_s
         
     | 
| 
      
 63 
     | 
    
         
            +
                      session[('user_can_' + perm).to_sym] ||= true
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
                    return true
         
     | 
| 
      
 66 
     | 
    
         
            +
                  end
         
     | 
| 
      
 67 
     | 
    
         
            +
                  
         
     | 
| 
      
 68 
     | 
    
         
            +
                  for perm in permission_set
         
     | 
| 
      
 69 
     | 
    
         
            +
                    perm = perm.to_s
         
     | 
| 
      
 70 
     | 
    
         
            +
                    session[('user_can_' + perm).to_sym] = @user.send('can_' + perm)
         
     | 
| 
      
 71 
     | 
    
         
            +
                    # logger.debug "user_can_#{perm} = #{@user.send('can_' + perm)}"
         
     | 
| 
      
 72 
     | 
    
         
            +
                    return session[('user_can_' + perm).to_sym]
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
                alias :user_has_permission? :user_has_permissions?
         
     | 
| 
      
 76 
     | 
    
         
            +
                
         
     | 
| 
       7 
77 
     | 
    
         
             
                # Determines whether the input string is a valid email address per RFC specification
         
     | 
| 
       8 
78 
     | 
    
         
             
                def valid_email_address?(addr, perform_mx_lookup = false)
         
     | 
| 
       9 
79 
     | 
    
         
             
                  valid = true
         
     | 
| 
         @@ -29,7 +99,7 @@ module ActionControllerExtensions 
     | 
|
| 
       29 
99 
     | 
    
         
             
                ### COMPAT: convert_content_path
         
     | 
| 
       30 
100 
     | 
    
         
             
                def convert_content_path
         
     | 
| 
       31 
101 
     | 
    
         
             
                  logger.debug "DEPRECATION WARNING: convert_content_path called"
         
     | 
| 
       32 
     | 
    
         
            -
                  params[:content_path] = params[:content_path].to_s.split('/')
         
     | 
| 
      
 102 
     | 
    
         
            +
                  params[:content_path] = params[:content_path].to_s.split('/') rescue []
         
     | 
| 
       33 
103 
     | 
    
         
             
                end
         
     | 
| 
       34 
104 
     | 
    
         | 
| 
       35 
105 
     | 
    
         
             
                ### COMPAT - template_exists?
         
     | 
| 
         @@ -52,5 +122,48 @@ module ActionControllerExtensions 
     | 
|
| 
       52 
122 
     | 
    
         
             
                  logger.error(e)
         
     | 
| 
       53 
123 
     | 
    
         
             
                end
         
     | 
| 
       54 
124 
     | 
    
         | 
| 
      
 125 
     | 
    
         
            +
                # Convert from GMT/UTC to local time (based on time zone setting in session[:time_zone])
         
     | 
| 
      
 126 
     | 
    
         
            +
                def gm_to_local(time)
         
     | 
| 
      
 127 
     | 
    
         
            +
                  ActiveSupport::TimeZone.new(session[:time_zone] || 'UTC').utc_to_local(time)
         
     | 
| 
      
 128 
     | 
    
         
            +
                end
         
     | 
| 
      
 129 
     | 
    
         
            +
                
         
     | 
| 
      
 130 
     | 
    
         
            +
                # Convert from local time to GMT/UTC (based on time zone setting in session[:time_zone])
         
     | 
| 
      
 131 
     | 
    
         
            +
                def local_to_gm(time)
         
     | 
| 
      
 132 
     | 
    
         
            +
                  ActiveSupport::TimeZone.new(session[:time_zone] || 'UTC').local_to_utc(time)
         
     | 
| 
      
 133 
     | 
    
         
            +
                end
         
     | 
| 
      
 134 
     | 
    
         
            +
                
         
     | 
| 
      
 135 
     | 
    
         
            +
                # Convert a time object into a formatted date/time string
         
     | 
| 
      
 136 
     | 
    
         
            +
                def ts_to_str(ts)
         
     | 
| 
      
 137 
     | 
    
         
            +
                  return '' if ts == nil
         
     | 
| 
      
 138 
     | 
    
         
            +
                  gm_to_local(ts).strftime('%a %b %d, %Y') + ' at ' +
         
     | 
| 
      
 139 
     | 
    
         
            +
                    gm_to_local(ts).strftime('%I:%M%p').downcase + ' ' + (session[:time_zone_abbr] || '')
         
     | 
| 
      
 140 
     | 
    
         
            +
                end
         
     | 
| 
      
 141 
     | 
    
         
            +
                
         
     | 
| 
      
 142 
     | 
    
         
            +
                # Convert a time object into a formatted time string (no date)
         
     | 
| 
      
 143 
     | 
    
         
            +
                def ts_to_time_str(ts)
         
     | 
| 
      
 144 
     | 
    
         
            +
                  return '' if ts == nil
         
     | 
| 
      
 145 
     | 
    
         
            +
                  gm_to_local(ts).strftime('%I:%M:%S%p').downcase
         
     | 
| 
      
 146 
     | 
    
         
            +
                end
         
     | 
| 
      
 147 
     | 
    
         
            +
                
         
     | 
| 
      
 148 
     | 
    
         
            +
                # Convert times to a standard format (e.g. 1:35pm)
         
     | 
| 
      
 149 
     | 
    
         
            +
                def time_to_str(t, convert = true)
         
     | 
| 
      
 150 
     | 
    
         
            +
                  return '' if t == nil
         
     | 
| 
      
 151 
     | 
    
         
            +
                  if convert
         
     | 
| 
      
 152 
     | 
    
         
            +
                    gm_to_local(t).strftime("%I").to_i.to_s + gm_to_local(t).strftime(":%M%p").downcase
         
     | 
| 
      
 153 
     | 
    
         
            +
                  else
         
     | 
| 
      
 154 
     | 
    
         
            +
                    t.strftime("%I").to_i.to_s + t.strftime(":%M%p").downcase
         
     | 
| 
      
 155 
     | 
    
         
            +
                  end
         
     | 
| 
      
 156 
     | 
    
         
            +
                end
         
     | 
| 
      
 157 
     | 
    
         
            +
                
         
     | 
| 
      
 158 
     | 
    
         
            +
                # Convert times to a standard format (e.g. 1:35pm)
         
     | 
| 
      
 159 
     | 
    
         
            +
                def date_to_str(t, convert = true)
         
     | 
| 
      
 160 
     | 
    
         
            +
                  return '' if t == nil
         
     | 
| 
      
 161 
     | 
    
         
            +
                  if convert
         
     | 
| 
      
 162 
     | 
    
         
            +
                    gm_to_local(t).strftime("%m").to_i.to_s + '/' + gm_to_local(t).strftime("%d").to_i.to_s + gm_to_local(t).strftime("/%Y")
         
     | 
| 
      
 163 
     | 
    
         
            +
                  else
         
     | 
| 
      
 164 
     | 
    
         
            +
                    t.strftime("%m").to_i.to_s + '/' + t.strftime("%d").to_i.to_s + t.strftime("/%Y")
         
     | 
| 
      
 165 
     | 
    
         
            +
                  end
         
     | 
| 
      
 166 
     | 
    
         
            +
                end
         
     | 
| 
      
 167 
     | 
    
         
            +
                
         
     | 
| 
       55 
168 
     | 
    
         
             
              end
         
     | 
| 
       56 
169 
     | 
    
         
             
            end
         
     | 
    
        data/lib/imagine_cms/engine.rb
    CHANGED
    
    | 
         @@ -28,8 +28,16 @@ module ImagineCms 
     | 
|
| 
       28 
28 
     | 
    
         
             
                  include ActionControllerExtensions::InstanceMethods
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  helper CmsApplicationHelper
         
     | 
| 
      
 31 
     | 
    
         
            +
                  helper_method :user_has_permission?
         
     | 
| 
      
 32 
     | 
    
         
            +
                  helper_method :user_has_permissions?
         
     | 
| 
       31 
33 
     | 
    
         
             
                  helper_method :template_exists?
         
     | 
| 
       32 
34 
     | 
    
         
             
                  helper_method :url_for_current
         
     | 
| 
      
 35 
     | 
    
         
            +
                  helper_method :gm_to_local
         
     | 
| 
      
 36 
     | 
    
         
            +
                  helper_method :local_to_gm
         
     | 
| 
      
 37 
     | 
    
         
            +
                  helper_method :ts_to_str
         
     | 
| 
      
 38 
     | 
    
         
            +
                  helper_method :ts_to_time_str
         
     | 
| 
      
 39 
     | 
    
         
            +
                  helper_method :time_to_str
         
     | 
| 
      
 40 
     | 
    
         
            +
                  helper_method :date_to_str
         
     | 
| 
       33 
41 
     | 
    
         | 
| 
       34 
42 
     | 
    
         
             
                  # before_filter :create_settings_object, :set_default_session_values, :check_ssl_requirement, :expire_session_data
         
     | 
| 
       35 
43 
     | 
    
         
             
                  # after_filter :compress_output    
         
     | 
    
        data/lib/imagine_cms/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,15 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: imagine_cms
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 2653956547
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 6
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 3
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 0
         
     | 
| 
       9 
9 
     | 
    
         
             
              - 0
         
     | 
| 
       10 
10 
     | 
    
         
             
              - beta
         
     | 
| 
       11 
     | 
    
         
            -
              -  
     | 
| 
       12 
     | 
    
         
            -
              version: 3.0.0. 
     | 
| 
      
 11 
     | 
    
         
            +
              - 5
         
     | 
| 
      
 12 
     | 
    
         
            +
              version: 3.0.0.beta5
         
     | 
| 
       13 
13 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       14 
14 
     | 
    
         
             
            authors: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            - Aaron Namba
         
     | 
| 
         @@ -17,7 +17,7 @@ autorequire: 
     | 
|
| 
       17 
17 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       18 
18 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
            date: 2012- 
     | 
| 
      
 20 
     | 
    
         
            +
            date: 2012-06-05 00:00:00 Z
         
     | 
| 
       21 
21 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       22 
22 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       23 
23 
     | 
    
         
             
              name: rails
         
     | 
| 
         @@ -27,12 +27,12 @@ dependencies: 
     | 
|
| 
       27 
27 
     | 
    
         
             
                requirements: 
         
     | 
| 
       28 
28 
     | 
    
         
             
                - - ~>
         
     | 
| 
       29 
29 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       30 
     | 
    
         
            -
                    hash:  
     | 
| 
      
 30 
     | 
    
         
            +
                    hash: 5
         
     | 
| 
       31 
31 
     | 
    
         
             
                    segments: 
         
     | 
| 
       32 
32 
     | 
    
         
             
                    - 3
         
     | 
| 
       33 
33 
     | 
    
         
             
                    - 2
         
     | 
| 
       34 
     | 
    
         
            -
                    -  
     | 
| 
       35 
     | 
    
         
            -
                    version: 3.2. 
     | 
| 
      
 34 
     | 
    
         
            +
                    - 5
         
     | 
| 
      
 35 
     | 
    
         
            +
                    version: 3.2.5
         
     | 
| 
       36 
36 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       37 
37 
     | 
    
         
             
              version_requirements: *id001
         
     | 
| 
       38 
38 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -80,10 +80,26 @@ files: 
     | 
|
| 
       80 
80 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       81 
81 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       82 
82 
     | 
    
         
             
            - Rakefile
         
     | 
| 
      
 83 
     | 
    
         
            +
            - app/assets/manage/btn_delete.gif
         
     | 
| 
      
 84 
     | 
    
         
            +
            - app/assets/manage/bullet.gif
         
     | 
| 
      
 85 
     | 
    
         
            +
            - app/assets/manage/start.gif
         
     | 
| 
       83 
86 
     | 
    
         
             
            - app/controllers/cms/content_controller.rb
         
     | 
| 
      
 87 
     | 
    
         
            +
            - app/controllers/management/application_controller.rb
         
     | 
| 
      
 88 
     | 
    
         
            +
            - app/controllers/management/default_controller.rb
         
     | 
| 
      
 89 
     | 
    
         
            +
            - app/controllers/management/user_controller.rb
         
     | 
| 
      
 90 
     | 
    
         
            +
            - app/controllers/management/users_controller.rb
         
     | 
| 
       84 
91 
     | 
    
         
             
            - app/helpers/cms_application_helper.rb
         
     | 
| 
      
 92 
     | 
    
         
            +
            - app/models/user.rb
         
     | 
| 
       85 
93 
     | 
    
         
             
            - app/views/errors/404.html.erb
         
     | 
| 
       86 
94 
     | 
    
         
             
            - app/views/errors/permission_denied.html.erb
         
     | 
| 
      
 95 
     | 
    
         
            +
            - app/views/layouts/management.html.erb
         
     | 
| 
      
 96 
     | 
    
         
            +
            - app/views/management/default/index.html.erb
         
     | 
| 
      
 97 
     | 
    
         
            +
            - app/views/management/user/create_first.html.erb
         
     | 
| 
      
 98 
     | 
    
         
            +
            - app/views/management/user/login.html.erb
         
     | 
| 
      
 99 
     | 
    
         
            +
            - app/views/management/users/create.html.erb
         
     | 
| 
      
 100 
     | 
    
         
            +
            - app/views/management/users/edit.html.erb
         
     | 
| 
      
 101 
     | 
    
         
            +
            - app/views/management/users/index.html.erb
         
     | 
| 
      
 102 
     | 
    
         
            +
            - app/views/management/users/permission_denied.html.erb
         
     | 
| 
       87 
103 
     | 
    
         
             
            - config/routes.rb
         
     | 
| 
       88 
104 
     | 
    
         
             
            - doc/Gemfile.html
         
     | 
| 
       89 
105 
     | 
    
         
             
            - doc/ImagineCms.html
         
     |