Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'csv_tool'
- class Core::UseradministrationController < ApplicationController
- setup_plugin do |p|
- p.assert_permission :index, :users_list
- p.assert_permission :edit, :users_edit
- p.assert_permission :new, :users_edit
- p.assert_permission :update, :users_edit
- p.assert_permission :reset_pw, :users_edit
- p.assert_permission :destroy, :users_delete
- end
- public
- def new
- @user = User.new
- @form = groups_with_pupils
- end
- def create
- logger.debug 'Create new user...'
- group_name = params[:user][:group_mem]
- User.transaction do
- (@user, @pass) = User.register(params[:user][:name],
- params[:user][:firstname])
- end
- add_user_to_group group_name
- respond_to do |format|
- unless @user.id.nil?
- @link = dataform_core_popup_url(@user.id)
- session[:user_info] = @pass
- log :message => "User '#{@user.username}': created",
- :module => 'Core/Users',
- :level => :info
- format.html
- format.xml { render :xml => @user, :status => :created,
- :location => @user }
- else
- @form = groups_with_pupils
- create_error_message_without_username
- format.html { render :action => :new }
- format.xml { render :xml => @user.errors,
- :status => :unprocessable_entity }
- end
- end
- end
- def new_users
- @form = groups_with_pupils
- end
- def create_users
- logger.debug 'Create new users...'
- users = get_input_content
- order = get_name_order
- group_name = params[:group_mem]
- users_array, @errors_array = CSV_Tool.read_user users,
- "auto", order
- @users_info = Array.new
- @users_info_html = Array.new
- @errors = Array.new
- users_array.each do |user|
- User.transaction do
- (@user, @pass) = User.register(user[:name], user[:firstname])
- end
- if @user.id.nil?
- @errors << "Benutzer " + @user.firstname + " " + @user.name +
- " konnte nicht erstellt werden"
- else
- @users_info << Hash["user", @user, "pass", @pass]
- @users_info_html << "Benutzer: " + @user.firstname + " " + @user.name +
- ", Passwort: " + @pass
- log :message => "User '#{@user.username}': created",
- :module => 'Core/Users',
- :level => :info
- add_user_to_group group_name
- @users_link = usersdataform_core_popup_url(@user.id)
- end
- end
- session[:users_info] = @users_info
- end
- def index
- @users = User.find(:all)
- user_letters = sort_users
- generate_letters user_letters
- apply_filter
- @users.sort! {|a, b| a.username <=> b.username} if @users
- end
- def edit
- @user = User.find(params[:id])
- end
- def update
- logger.debug 'Update user information...'
- @user = User.find(params[:id])
- respond_to do |format|
- if @user.update_attributes(params[:user])
- log :message => "User '#{@user.username}': edited",
- :module => 'Core/Users',
- :level => :info
- flash[:notice] = @messages['core']['update']['successful']
- format.html { redirect_to(:action => :index) }
- format.xml { head :ok }
- else
- create_error_message_without_username
- format.html { render :action => "edit" }
- format.xml { render :xml => @group.errors,
- :status => :unprocessable_entity }
- end
- end
- end
- def resetpw
- logger.debug 'Reset password of user...'
- @user = User.find(params[:id])
- pass = @user.reset_password
- if @user.save
- log :message => "User '#{@user.username}': password resetted",
- :module => 'Core/Users',
- :level => :info
- if (not @user.email.nil?)
- MailService.deliver_send_pw(@user.email, @user.username, pass)
- end
- flash[:notice] = @messages['core']['create_new_pw']['successful'] + pass
- render(:action => :edit)
- else
- flash[:notice] = @messages['core']['error']
- render(:action => :edit)
- end
- end
- def destroy
- logger.debug 'Delete user...'
- @user = User.find(params[:id])
- log :message => "User '#{@user.username}': deleted",
- :module => 'Core/Users',
- :level => :info
- @user.destroy
- @user = nil
- redirect_to :action => :index
- end
- private
- def groups_with_pupils
- sgroup = Group.find_by_name('Schueler')
- @form = Hash[*Group.find(:all).select{|group|
- group.parents_with_self.include?(sgroup)
- }.map{|group|
- [group.name, group.id]
- }.flatten]
- end
- def create_error_message_without_username
- errorhash = Hash.new
- @user.errors.each do |attr,msg|
- errorhash[attr] = msg unless attr == 'username'
- end
- @user.errors.clear
- errorhash.each do |attr,msg|
- @user.errors.add(attr, msg)
- end
- end
- def add_user_to_group group_name
- if (not @user.id.nil?)
- if group_name == 'pupil'
- group = Group.find params[:user_gid] ||
- Group.find_by_name('Schueler').id
- elsif group_name == 'teacher'
- group = Group.find_by_name 'Lehrer'
- elsif group_name == 'admin'
- group = Group.find_by_name 'Admin'
- end
- if group
- group.users << @user
- group.save
- end
- end
- end
- def get_filter_letter
- letter = params[:letter]
- if not letter && @users
- letter = @users[0].username[0, 1]
- elsif not letter
- letter = 'x'
- end
- return letter.downcase
- end
- def generate_letters(user_letters)
- @letters = []
- ('A'..'Z').each do |letter|
- @letters.push Array[letter.downcase, letter,
- user_letters.has_key?(letter)]
- end
- @letters.push Array['misc', 'andere', user_letters.has_key?('misc')]
- end
- def sort_users
- letters = Hash.new
- @users.each do |user|
- prefix = user.username.match /^[a-z]/i
- key = 'misc'
- if prefix
- key = prefix[0].upcase
- end
- letters[key] = Array.new unless letters[key]
- letters[key].push user
- end
- return letters
- end
- def apply_filter
- letter = get_filter_letter
- if @users
- @users.reject! do |user|
- if letter != 'misc'
- user.username[0, 1].downcase != letter
- else
- user.username.match(/^[a-z]/i)
- end
- end
- end
- end
- def get_name_order
- if (params[:user_order] == 'firstname_name')
- order = 'firstname-name'
- else
- order = 'name-firstname'
- end
- order
- end
- def get_input_content
- if (params[:user_input] == 'file')
- users = params[:users][:text_file].read
- else
- users = params[:users][:text_field]
- end
- users
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement