Controlador para la administración de usuarios
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
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
# 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
Modificar un usuario
# File app/controllers/admin/users_controller.rb, line 101 def edit @user = User.find(params[:id]) get_document_counters end
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
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
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
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
Modificar password de un usuario
# File app/controllers/admin/users_controller.rb, line 150 def pwd_edit @user=User.find(params[:id]) end
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
Búsqueda del usuario por email, para ofrecer el cambio de perfil si es que ya existe
# File app/controllers/admin/users_controller.rb, line 70 def search if params[:email] @user = User.find_by_email(params[:email]) if @user render :action => "make_admin" else redirect_to :action => 'new', :email => params[:email], :t => params[:t] end end end
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
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