# -*- encoding : utf-8 -*-

class UsersController < ApplicationController

  # before_filter :require_user
  
  access_control do
    actions :index, :edit, :update, :new, :create, :destroy, :undelete  do
      allow :admin
    end
    actions :register, :activate, :reset_password, :reset_password_submit do
      allow anonymous, logged_in
    end  
  end
  
  def create
    @user = User.new(params[:user])
    if @user.save
      redirect_to users_path, :notice => "Benutzer angelegt"
    else
      render :action => :new
    end
  end

  def destroy
    @user = User.find(params[:id])
    @user.destroy
    redirect_to users_path, :notice => "Benutzer '#{@user.login}' gelöscht"
  end


  def edit
    @user = User.find_with_destroyed params[:id]
  end

  def index
    page  = params[:page] || 1
    @users = User.unscoped.paginate(:page => page,
      :total_entries => User.find_with_destroyed(:all).size).order(:id)
    @user = User.new
  end

  def new
    @user = User.new
  end

  def undelete
    @user = User.find_with_destroyed(params[:id])
    @user.update_attribute(:deleted_at, nil)
    flash[:notice]="Benutzer '#{@user.login}' wiederhergestellt"
    redirect_to users_path
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(params[:user])
      flash[:notice] = "Benutzer '#{@user.login}' aktualisiert!"
      redirect_to users_path
    else
      render :action => :edit
    end
  end

  
  def register
    if current_user
      flash[:notice] = "Sie sind bereits registriert!"
      redirect_to preferences_path
    
    elsif params[:user].blank?
      @user = User.new
    else 
      @user = User.new(params[:user])
      if !params[:user][:tos_confirm]
        flash[:notice] = "Du  mußt die Nutzungsbedingungen akzeptieren."
        render :action => :register      
      elsif @user.save_without_session_maintenance
        @user.send_activation_instructions!
        flash[:notice] = "Dein Profil wurde angelegt, muß aber noch von Dir aktiviert werden. Dazu wird Dir eine Email mit einem Aktivierungslink gesendet."
        redirect_to login_url
      else
        flash[:notice] = "Beim Anlagen des Profils ist ein Problem aufgetreten."
        render :action => :register
      end
    end
  end
    
  def activate
    @user = User.find_using_perishable_token(params[:activation_code], 1.week) || (raise Exception)
    
    if @user.active?
      render :template => "/errors/logged_in.haml", :status => 300 
    else 
      
      if @user.activate!
        UserSession.create(@user, false)
        @user.send_activation_confirmation!
        redirect_to root_url
      else
        render :action => :new
      end
    end
  end  
  
  def reset_password
    @user = User.find_using_perishable_token(params[:reset_password_code], 1.week) || (raise Exception)
  end
  
  def reset_password_submit
    flash[:notice] = ""
    @user = User.find_using_perishable_token(params[:reset_password_code], 1.week) || (raise Exception)
    @user.active = true
    if @user.update_attributes(params[:user].merge({:active => true}))
      flash[:notice] = "Passwort wurde erfolgreich neu gesetzt."
      redirect_to root_url
    else
      flash[:notice] = "Es gab ein Problem beim Zurücksetzen des Passworts."
      render :action => :reset_password
    end
  end  

end

