Add more register_requests fields, change design. Apply invitation mail sending. Refactor. Refs #174

This commit is contained in:
Pavel Chipiga 2012-02-10 18:33:16 +02:00
parent 8417e8c16f
commit 704c544cbc
14 changed files with 128 additions and 37 deletions

View File

@ -53,7 +53,7 @@ end
gem 'newrelic_rpm'
group :development do
# gem 'letter_opener'
gem 'mailcatcher' # 'letter_opener'
gem 'rails3-generators'
gem 'web-app-theme'
gem 'hpricot'

View File

@ -85,6 +85,7 @@ GEM
diff-lcs (1.1.3)
erubis (2.6.6)
abstract (>= 1.0.0)
eventmachine (0.12.10)
expression_parser (0.9.0)
factory_girl (2.3.2)
activesupport
@ -121,6 +122,16 @@ GEM
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
mailcatcher (0.2.4)
eventmachine
haml
i18n
json
mail
sinatra
skinny (>= 0.1.2)
sqlite3-ruby
thin
meta-tags (1.2.4)
actionpack
mime-types (1.17.2)
@ -212,7 +223,17 @@ GEM
sinatra (1.2.8)
rack (~> 1.1)
tilt (>= 1.2.2, < 2.0)
skinny (0.2.0)
eventmachine (~> 0.12)
thin (~> 1.2)
sqlite3 (1.3.5)
sqlite3-ruby (1.3.3)
sqlite3 (>= 1.3.3)
state_machine (1.1.2)
thin (1.3.1)
daemons (>= 1.0.9)
eventmachine (>= 0.12.6)
rack (>= 1.0.0)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
@ -260,6 +281,7 @@ DEPENDENCIES
hirb
hpricot
jammit
mailcatcher
meta-tags (~> 1.2.4)
newrelic_rpm
omniauth (~> 1.0.1)

View File

@ -33,4 +33,9 @@ class UserMailer < ActionMailer::Base
format.html
end
end
def invite_approve_notification(register_request)
@register_request = register_request
mail :to => register_request.email, :subject => I18n.t("notifications.subjects.invite_approve_notification")
end
end

View File

@ -5,14 +5,21 @@ class RegisterRequest < ActiveRecord::Base
scope :approved, where(:approved => true)
scope :unprocessed, where(:approved => false, :rejected => false)
before_create :generate_token
# before_create :generate_token
before_update :invite_approve_notification
validates :name, :presence => true
validates :email, :presence => true, :uniqueness => {:case_sensitive => false}, :format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i }
protected
def generate_token
self.token = Digest::SHA1.hexdigest(name + email + Time.now.to_s + rand.to_s)
def generate_token
self.token = Digest::SHA1.hexdigest(name + email + Time.now.to_s + rand.to_s)
end
def invite_approve_notification
if approved_changed? and approved == true
generate_token
UserMailer.invite_approve_notification(self).deliver
end
end
end

View File

@ -15,13 +15,17 @@
%th &nbsp;
%th= t("activerecord.attributes.register_request.name")
%th= t("activerecord.attributes.register_request.email")
%th= t("activerecord.attributes.register_request.interest")
%th= t("activerecord.attributes.register_request.more")
%th= t("activerecord.attributes.register_request.created_at")
%th.last &nbsp;
%th
- @register_requests.each do |request|
%tr{:class => cycle("odd", "even")}
%td= check_box_tag 'request_ids[]', request.id
%td= request.name
%td= request.email
%td= request.interest
%td= request.more
%td= request.created_at
%td
= link_to t("layout.approve"), register_request_approve_path(request) if can? :approve, request

View File

@ -0,0 +1,7 @@
%p== Здравствуйте, #{@register_request.name}.
%p
Вы приглашены в проект ABF. Чтобы зарегистрироваться перейдите по
= link_to 'ссылке', new_user_registration_url(:invitation_token => @register_request.token)
%p== Команда поддержки «ROSA Build System»

View File

@ -16,6 +16,8 @@ Rosa::Application.configure do
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false
config.action_mailer.delivery_method = :smtp # :letter_opener
config.action_mailer.smtp_settings = { :host => "localhost", :port => 1025 }
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
# Print deprecation notices to the Rails logger

View File

@ -946,6 +946,7 @@ en:
new_user_notification: Registered on project «%{ project_name }»
issue_assign_notification: New task assigned
new_commit_comment_notification: New comment to commit
invite_approve_notification: Invitation to ABF
project:
category_id: Category

View File

@ -793,3 +793,4 @@ ru:
new_user_notification: Регистрация на проекте «%{ project_name }»
issue_assign_notification: Вам назначили задачу
new_commit_comment_notification: Новый комментарий к коммиту
invite_approve_notification: Приглашение в ABF

View File

@ -0,0 +1,11 @@
class AddMoreFieldsToRegisterRequests < ActiveRecord::Migration
def self.up
add_column :register_requests, :interest, :string
add_column :register_requests, :more, :text
end
def self.down
remove_column :register_requests, :interest
remove_column :register_requests, :more
end
end

View File

@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20120209135822) do
ActiveRecord::Schema.define(:version => 20120210141153) do
create_table "arches", :force => true do |t|
t.string "name", :null => false
@ -90,12 +90,12 @@ ActiveRecord::Schema.define(:version => 20120209135822) do
end
create_table "comments", :force => true do |t|
t.string "commentable_id"
t.string "commentable_type"
t.integer "user_id"
t.text "body"
t.datetime "created_at"
t.datetime "updated_at"
t.decimal "commentable_id", :precision => 50, :scale => 0
end
create_table "containers", :force => true do |t|
@ -117,6 +117,7 @@ ActiveRecord::Schema.define(:version => 20120209135822) do
t.string "locked_by"
t.datetime "created_at"
t.datetime "updated_at"
t.string "queue"
end
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
@ -253,15 +254,15 @@ ActiveRecord::Schema.define(:version => 20120209135822) do
t.text "description"
t.string "ancestry"
t.boolean "has_issues", :default => true
t.boolean "has_wiki", :default => false
t.string "srpm_file_name"
t.string "srpm_content_type"
t.integer "srpm_file_size"
t.datetime "srpm_updated_at"
t.boolean "has_wiki", :default => false
end
add_index "projects", ["category_id"], :name => "index_projects_on_category_id"
add_index "projects", ["owner_id"], :name => "index_projects_on_name_and_owner_id_and_owner_type", :unique => true
add_index "projects", ["owner_id"], :name => "index_projects_on_name_and_owner_id_and_owner_type", :unique => true, :case_sensitive => false
create_table "register_requests", :force => true do |t|
t.string "name"
@ -271,9 +272,12 @@ ActiveRecord::Schema.define(:version => 20120209135822) do
t.boolean "rejected", :default => false
t.datetime "created_at"
t.datetime "updated_at"
t.string "interest"
t.text "more"
end
add_index "register_requests", ["email"], :name => "index_register_requests_on_email", :unique => true, :case_sensitive => false
add_index "register_requests", ["token"], :name => "index_register_requests_on_token", :unique => true, :case_sensitive => false
create_table "relations", :force => true do |t|
t.integer "object_id"
@ -335,7 +339,6 @@ ActiveRecord::Schema.define(:version => 20120209135822) do
t.string "email", :default => "", :null => false
t.string "encrypted_password", :limit => 128, :default => "", :null => false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at"
t.datetime "updated_at"
@ -343,6 +346,7 @@ ActiveRecord::Schema.define(:version => 20120209135822) do
t.string "uname"
t.string "role"
t.string "language", :default => "en"
t.datetime "reset_password_sent_at"
t.integer "own_projects_count", :default => 0, :null => false
end

View File

@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сборочная среда</title>
<script type="text/javascript" src="js/html5shiv.js"></script>
<script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<link rel="stylesheet" type="text/css" href="styles/prereg.css" />
</head>
<body>
@ -24,11 +24,12 @@
<!--Page-->
<article>
<div class="left">
<p>Здравствуйте, вы попали на страницу нашего нового сервиса ABF, который сейчас проходит тестирование. <br /><br />
Это проект универсального build-сервера ABF, цель которого — автоматизировать согласование зависимостей при пересборке пакетов, облегчить работу билд-менеджеров, гарантировать, что все пакеты в образе собраны без конфликтов друг с другом.<br /><br />
<a href="#">FAQ</a>
<a href="http://wiki.rosalab.ru/index.php/ABF">Документация</a>
<a href="http://forum.rosalab.ru/viewforum.php?f=10" class="last">Обсуждение</a>
<p>
Приветствуем Вас!<br /><br />
Вы находитесь на странице размещения заявок на участие в бета-тестировании сборочного сервиса ABF компании РОСА.<br /><br />
В первую очередь одобряются заявки от потенциальных майнтейнеров и представителей дистрибутивных команд.<br /><br />
Ознакомиться с документацией можно <a href="http://wiki.rosalab.ru/index.php/ABF">здесь</a>.<br /><br />
Мы будем рады ответить на Ваши вопросы на <a href="http://forum.rosalab.ru/viewforum.php?f=10">форуме</a> проекта.
</p>
<div style="clear: both;">
@ -37,13 +38,11 @@
</div>
<div class="right">
<h3>Хочу стать бета-тестером ABF!</h3>
<form accept-charset="UTF-8" name='invite_form' action="/users/register_requests" id="new_register_request" method="post">
<p>
В настоящее время сервис работает в закрытом режиме. <br/><br/><br />
Оставьте оставьте свои контактные данные в форме ниже, если хотите поучаствовать в тестировании.
</p>
<div class="signup-left">
Имя
Имя, Фамилия
</div>
<div class="signup-right">
<input type="text" id="email" name="register_request[name]" class="registartion-input-signup" onkeydown="buttonCheck();" onClick="this.className='registartion-input-focus';disError(this);" onfocus="if(this.value=='Логин или email'){this.value='';this.className='registartion-input-focus';};" onblur="if(this.value==''){this.value='';this.className='registartion-input-signup';}else{this.className='registartion-input-no-focus';};buttonCheck();" />
@ -58,7 +57,27 @@
</div>
<div style="clear: both;">
</div>
<div class="signup-left">
Степень интереса<br>к проекту
</div>
<div class="signup-right">
<select name="register_request[interest]" class="registartion-input-signup">
<option>Общеобразовательные цели</option>
<option>Хочу стать майнтейнером РОСы</option>
<option>Хочу собрать в ABF дистрибутив</option>
</select>
</div>
<div style="clear: both;">
</div>
<div class="signup-left">
Также хочу сказать
</div>
<div class="signup-right">
<textarea name="register_request[more]" class="registartion-input-signup" rows="3"></textarea>
</div>
<div style="clear: both;">
</div>
<div class="button">
<input class="button" type="submit" value="Отправить">
</div>

View File

@ -104,7 +104,7 @@ article div.right {
article div.left a {
color: #FFF;
padding-right: 29px;
/* padding-right: 29px;*/
}
article div.left a.last {
@ -117,7 +117,7 @@ article div.right p {
article div.all a {
color: #FFF;
padding-right: 29px;
/* padding-right: 29px;*/
}
article div.all p {
@ -147,17 +147,27 @@ article div.signup-right {
article div.signup-right input {
height: 21px;
width: 170px;
width: 185px;
border: 1px solid #8199a9;
border-radius: 2px;
color: #cfcfcf;
font-family: Tahoma;
font-size: 12px;
padding-left: 10px;
/* padding-left: 10px;*/
margin-top: 6px;
margin-top: 14px;
margin-right: 15px;
}
article div.signup-right textarea, article div.signup-right select {
width: 185px;
border: 1px solid #8199a9;
border-radius: 2px;
font-family: Tahoma;
font-size: 12px;
margin-top: 6px;
margin-top: 14px;
margin-right: 15px;
}
article div.signup-right select { width: 190px; }
article div.button {
float: right;

View File

@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сборочная среда</title>
<script type="text/javascript" src="js/html5shiv.js"></script>
<script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<link rel="stylesheet" type="text/css" href="styles/prereg.css" />
</head>
<body>
@ -24,14 +24,12 @@
<!--Page-->
<article>
<div class="all">
<p><span style="font-size: 28px;">Спасибо!</span><br /><br />
Благодарим за интерес к нашему сервису ABF!<br />
Приглашение будет выслано вам по указанной электронной почте. <br /><br />
Ваши замечания-комментарии-пожелания ждем по адресу: _____<br /><br />
Подробнее с ABF можно ознакомиться по ссылкам:<br /><br />
<a href="#">FAQ</a>
<a href="http://wiki.rosalab.ru/index.php/ABF">Документация</a>
<a href="http://forum.rosalab.ru/viewforum.php?f=10">Обсуждение</a>
<p>
<span style="font-size: 28px;">Спасибо!</span><br /><br />
Благодарим за интерес к нашему сервису ABF!<br /><br />
Приглашение будет выслано вам по указанной электронной почте.<br /><br />
Приглашаем Вас на <a href="http://forum.rosalab.ru/viewforum.php?f=10">форум</a> проекта, где мы будем рады ответить на Ваши вопросы и получить Ваши пожелания.<br /><br />
Ознакомиться с документацией можно <a href="http://wiki.rosalab.ru/index.php/ABF">здесь</a>.
</p>
</div>