diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 3e74dea87..dab61bb92 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,2 +1,40 @@ class UsersController < ApplicationController + def index + @users = User.all + end + + def new + @user = User.new + end + + def edit + @user = User.find params[:id] + end + + def destroy + User.destroy params[:id] + redirect_to users_path + end + + def create + @user = User.new params[:user] + if @user.save + flash[:notice] = t('flash.user.saved') + redirect_to users_path + else + flash[:error] = t('flash.user.save_error') + render :action => :new + end + end + + def update + @user = User.find params[:id] + if @user.update_attributes(params[:user]) + flash[:notice] = t('flash.user.saved') + redirect_to users_path + else + flash[:error] = t('flash.user.save_error') + render :action => :edit + end + end end diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb new file mode 100644 index 000000000..319448046 --- /dev/null +++ b/app/mailers/user_mailer.rb @@ -0,0 +1,8 @@ +class UserMailer < ActionMailer::Base + default :from => APP_CONFIG['no-reply-email'] + + def new_user_notification(user) + @user = user + mail(:to => user.email, :subject => "Регистрация на проекте «#{APP_CONFIG['project_name']}»") + end +end diff --git a/app/models/user.rb b/app/models/user.rb index b2423b3bd..18d803aa7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,6 +1,20 @@ +require 'digest/md5' class User < ActiveRecord::Base devise :database_authenticatable, :recoverable, :rememberable, :validatable attr_accessible :email, :password, :password_confirmation, :remember_me, :name + + before_validation :generate_password, :on => :create + after_create :send_notification_email + + protected + + def generate_password + self.password = self.password_confirmation = Digest::MD5.hexdigest(Date.today.to_s)[0..6] + end + + def send_notification_email + UserMailer.new_user_notification(self).deliver + end end diff --git a/app/views/platforms/show.html.haml b/app/views/platforms/show.html.haml index c5325a14e..2f20d12e3 100644 --- a/app/views/platforms/show.html.haml +++ b/app/views/platforms/show.html.haml @@ -1,6 +1,7 @@ %h1 = t('layout.platforms.show') = @platform.name += link_to t('layout.platforms.back_to_the_list'), platforms_path %h2= t('layout.platforms.projects') - @projects.each do |project| diff --git a/app/views/user_mailer/new_user_notification.txt.haml b/app/views/user_mailer/new_user_notification.txt.haml new file mode 100644 index 000000000..85378e32a --- /dev/null +++ b/app/views/user_mailer/new_user_notification.txt.haml @@ -0,0 +1,5 @@ +== Здравствуйте, #{@user.name} + +== Вы зарегистрированы на проекте «#{APP_CONFIG['project_name']}» и теперь можете войти в систему. Ваш пароль: #{@user.password} + +== Команда поддержки #{APP_CONFIG['project_name']} diff --git a/app/views/users/edit.html.haml b/app/views/users/edit.html.haml new file mode 100644 index 000000000..6a592b9d8 --- /dev/null +++ b/app/views/users/edit.html.haml @@ -0,0 +1,11 @@ +%h1= @user.name += form_for @user do |f| + %p + = f.label :name + = f.text_field :name + %p + = f.label :email + = f.text_field :email + %p + = f.submit + = link_to t('layout.users.back_to_the_list'), users_path diff --git a/app/views/users/index.html.haml b/app/views/users/index.html.haml new file mode 100644 index 000000000..3a615f034 --- /dev/null +++ b/app/views/users/index.html.haml @@ -0,0 +1,12 @@ +%h1= t('layout.user_list') +%ul + - @users.each do |user| + %li + = link_to user.name, edit_user_path(user) + ( + %span>= user.email + ) + = link_to t('layout.delete'), user_path(user), :method => :delete, :confirm => t('layout.are_you_sure') +%p + = link_to t('layout.users.new'), new_user_path += link_to t('layout.platforms.back_to_the_list'), platforms_path diff --git a/app/views/users/new.html.haml b/app/views/users/new.html.haml new file mode 100644 index 000000000..7e26da0fa --- /dev/null +++ b/app/views/users/new.html.haml @@ -0,0 +1,11 @@ +%h1= t('layout.users.new') += form_for @user do |f| + %p + = f.label :name + = f.text_field :name + %p + = f.label :email + = f.text_field :email + %p + = f.submit + = link_to t('layout.users.back_to_the_list'), users_path diff --git a/config/initializers/load_config.rb b/config/initializers/load_config.rb index 70c906f77..0527ac9b6 100644 --- a/config/initializers/load_config.rb +++ b/config/initializers/load_config.rb @@ -1 +1 @@ -APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/application.yml")[RAILS_ENV] +APP_CONFIG = YAML.load_file("#{Rails.root}/config/application.yml")[Rails.env] diff --git a/config/locales/devise.ru.yml b/config/locales/devise.ru.yml index 202943f43..cc80364c0 100644 --- a/config/locales/devise.ru.yml +++ b/config/locales/devise.ru.yml @@ -1,9 +1,6 @@ ru: devise: - sessions: - link: 'Войти' - signed_in: 'Вы вошли.' - signed_out: 'Вы вышли.' + failure: unauthenticated: 'Вы должны войти или зарегистрироваться, прежде чем сможете продолжить.' unconfirmed: 'Вы должны подтвердить вашу учетную запись, прежде чем сможете продолжить.' locked: 'Ваша учетная запись заблокирована.' @@ -11,6 +8,10 @@ ru: invalid_token: 'Неверный ключ аутентификации.' timeout: 'Ваша сессия закончена. Пожалуйста, войдите еще раз, чтобы продолжить.' inactive: 'Ваша учетная запись еще не активирована.' + sessions: + link: 'Войти' + signed_in: 'Вы вошли.' + signed_out: 'Вы вышли.' passwords: link: 'Забыли пароль?' send_instructions: 'Вы получите письмо с инструкциями о том, как сбросить ваш пароль, через несколько минут.' diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 17ef24b5b..f3d052373 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -6,7 +6,9 @@ ru: user_list: Список пользователей cancel: Отмена create: Создать + delete: удалить save: Сохранить + are_you_sure: "Вы уверены?" platforms: list: Платформы new: Создать новую платформу @@ -14,13 +16,20 @@ ru: show: Платформа projects: Проекты products: Продукты + back_to_the_list: ⇐К списку платформ projects: new: Новый проект + users: + new: Новый пользователь + back_to_the_list: ⇐К списку пользователей flash: project: saved: Проект успешно сохранен save_error: Не удалось сохранить проект + user: + saved: Пользователь успешно сохранен + save_error: Не удалось сохранить данные о пользователе attributes: password: Пароль diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb new file mode 100644 index 000000000..8d004b3ed --- /dev/null +++ b/spec/mailers/user_mailer_spec.rb @@ -0,0 +1,5 @@ +require "spec_helper" + +describe UserMailer do + pending "add some examples to (or delete) #{__FILE__}" +end