class Admin::UsersController

Controlador para la administración de usuarios

Public Instance Methods

auto_complete_for_user_tag_list_es() click to toggle source

Auto complete para los tags de los políticos

# File app/controllers/admin/users_controller.rb, line 200
def auto_complete_for_user_tag_list_es
  auto_complete_for_tag_list(params[:user][:tag_list_es])
  if @tags.length > 0
    render :inline => "<%= content_tag(:ul, @tags.map {|t| content_tag(:li, t.nombre)}) %>"
  else
    render :nothing => true
  end    
end
create() click to toggle source

Creación de nuevo usuario

# File app/controllers/admin/users_controller.rb, line 82
def create
  @user = params[:user][:type].constantize.new(params[:user])
  if @user.save
    flash[:notice] = "El usuario ha sido dado de alta!"
    #redirect_to admin_users_url(:t => @user.type)
    redirect_to admin_user_url(@user)
  else
    render :action => "new"
  end
end
destroy() click to toggle source
# File app/controllers/admin/users_controller.rb, line 165
def destroy
  @user = User.find(params[:id])
  user_type = @user.type

  if @user.destroy
    flash[:notice] = "El usuario se ha borrado correctamente"
    redirect_to admin_users_url(:t => user_type) and return
  else
    flash[:error] = "No ha podido borrarse el usuario"
    redirect_to edit_admin_user_path(@user) and return
  end
end
edit() click to toggle source

Modificar un usuario

# File app/controllers/admin/users_controller.rb, line 101
def edit
  @user = User.find(params[:id])   
  get_document_counters
end
export() click to toggle source

Export en formato “excel” de todos los usuarios registrados

# File app/controllers/admin/users_controller.rb, line 184
def export
  @users = User.find(:all, :order => "id")
  CSV.open("#{Document::EXPORT_PATH}/usuarios.csv", "w", ";") do |writer|
    writer << ['id', 'Email', 'Nombre', 'Apellidos', 'Tipo', 'Departamento', 'Lugar', 'URL', 'Medio', 'Teléfono', 'Twitter']
    
    @users.each do |user|
      department = user.respond_to?("department") ? user.department.name : ""
      writer << [user.id, "#{user.email}", "#{user.name}", "#{user.last_names}", "#{User::TYPES[user.type]}",                     "#{department}", "#{user.raw_location}", "#{user.url}", "#{user.media}", 
                 "#{user.organization}", "#{user.telephone}", "#{user.screen_name}"]
    end
  end
  send_file("#{Document::EXPORT_PATH}/usuarios.csv", :type => "text/csv")
end
index() click to toggle source

Listado de usuarios, por tipos

# File app/controllers/admin/users_controller.rb, line 31
def index  
  @sort_order = params[:sort] ||  "status"
        
  case @sort_order
  when "name"
    order = "tildes(lower(name))"
  when "email"
    order = "lower(email), tildes(lower(name))"
  when "type"
    order = "lower(users.type), tildes(lower(name))"
  when "group"
    order = "(CASE WHEN users.type='Journalist' THEN media ELSE organizations.name_es END), tildes(lower(name))"
  when "status"
    order = "(CASE status WHEN 'pendiente' THEN 0 WHEN 'aprobado' THEN 1 WHEN 'vetado' THEN 2 ELSE 3 end), tildes(lower(name))"
  end

  @t = params[:t] || 'DepartmentMember'
 
  if params[:q].present?
    conditions = ["lower(tildes(name || coalesce(last_names, '') || coalesce(telephone, '') || coalesce(email, '') || users.type || coalesce(media, '') || coalesce(organizations.name_es, '')))  like ? ", "%#{params[:q].tildes.downcase}%"]
  else
    conditions = ["users.type=?", @t]
  end
  
  @users = User.paginate(:page => params[:page], 
    :conditions => conditions,
    :joins => "LEFT OUTER JOIN organizations ON (organizations.id=users.department_id)",
    :order => order)
    
  @sessions = SessionLog.find :all, :joins => :user, :conditions => ["type=?", @t], 
    :order => "action_at DESC", :limit => 20
end
new() click to toggle source

Formulario de nuevo usuario

# File app/controllers/admin/users_controller.rb, line 65
def new
  @user = (params[:t] || 'Admin').constantize.new(:email => params[:email])
end
permisos() click to toggle source

Vista de los permisos de cada tipo de usuario

# File app/controllers/admin/users_controller.rb, line 179
def permisos
  send_file("#{RAILS_ROOT}/app/views/admin/users/permisos.pdf")
end
pwd_edit() click to toggle source

Modificar password de un usuario

# File app/controllers/admin/users_controller.rb, line 150
def pwd_edit
  @user=User.find(params[:id])
end
pwd_update() click to toggle source

Actualizar password de un usuario

# File app/controllers/admin/users_controller.rb, line 155
def pwd_update
  @user=User.find(params[:id])
  if @user.update_attributes(:password=>params[:user][:password], :password_confirmation => params[:user][:password_confirmation])
    flash[:notice] = "Contraseña modificada"
    redirect_to(params[:return_to].empty? ? admin_users_path : params[:return_to])
  else
    render :action => "pwd_edit"
  end
end
show() click to toggle source

Vista de un usuario

# File app/controllers/admin/users_controller.rb, line 94
def show
  @user = User.find(params[:id])
  @sessions = @user.session_logs.find :all, :order => "action_at DESC", :limit => 20
  @comments = @user.comments
end
update() click to toggle source

Actualizar un usuario

# File app/controllers/admin/users_controller.rb, line 107
def update
  if params[:submit_cancel]      
    redirect_to admin_users_path
  else
    if params[:id].eql?('current')
      @user = current_user
    else  
      @user = User.find(params[:id])
    end  
    get_document_counters
    if params[:user][:type]
      # Tengo que hacer esto para que cambie el class de user y actualice bien el departamento
      @user.type= params[:user][:type]
      @user.save
      @user = User.find(params[:id])
    end
    
    approving_user = @user.status.eql?("pendiente") && params[:user][:status].eql?("aprobado")
    
    if @user.update_attributes(params[:user])
      flash[:notice] = 'El usuario se ha actualizado correctamente.'
      
      if @user.is_a?(Journalist) && approving_user
        email = Notifier.create_welcome_journalist(@user)

        begin
          logger.info("Mandando bienvenida a #{@user.email}")
          Notifier.deliver(email)
        rescue Net::SMTPServerBusy, Net::SMTPSyntaxError => err_type
          logger.info("Error al mandar mail de bienvenida: " + err_type)
          flash[:error] = t('session.Error_servidor_correo')
        end
      end
      
      #redirect_to admin_users_url(:t => @user.type)
      redirect_to admin_user_url(:id => params[:id])
    else
      render :action => 'edit'
    end
  end
end