Commit e7464a3d47aa5a204943ccec669355fb4eede45b
Committed by
Daniela Feitosa
1 parent
4456c409
Exists in
master
and in
22 other branches
Multitask
+ Multi-processing tasks.
+ Graciously show/hide functions with the smooth slide of
+ Jquery. ^^
+ Using Unobtrusive Javascript.
+ Customized messages for each task type.
+ Button "Set all to approve/reject/skip".
+ Icons related to the task action.
* Missing
- Need to make selenium tests.
(ActionItem1527)
Showing
69 changed files
with
1528 additions
and
513 deletions
Show diff stats
app/controllers/my_profile/tasks_controller.rb
| @@ -4,26 +4,38 @@ class TasksController < MyProfileController | @@ -4,26 +4,38 @@ class TasksController < MyProfileController | ||
| 4 | 4 | ||
| 5 | def index | 5 | def index |
| 6 | @tasks = profile.all_pending_tasks.sort_by(&:created_at) | 6 | @tasks = profile.all_pending_tasks.sort_by(&:created_at) |
| 7 | + @failed = params ? params[:failed] : {} | ||
| 7 | end | 8 | end |
| 8 | 9 | ||
| 9 | def processed | 10 | def processed |
| 10 | @tasks = profile.all_finished_tasks.sort_by(&:created_at) | 11 | @tasks = profile.all_finished_tasks.sort_by(&:created_at) |
| 11 | end | 12 | end |
| 12 | 13 | ||
| 13 | - VALID_DECISIONS = [ 'finish', 'cancel' ] | 14 | + VALID_DECISIONS = [ 'finish', 'cancel', 'skip' ] |
| 14 | 15 | ||
| 15 | def close | 16 | def close |
| 16 | - decision = params[:decision] | ||
| 17 | - if request.post? && VALID_DECISIONS.include?(decision) && params[:id] | ||
| 18 | - task = profile.find_in_all_tasks(params[:id]) | ||
| 19 | - task.update_attributes(params[:task]) | ||
| 20 | - begin | ||
| 21 | - task.send(decision) | ||
| 22 | - rescue Exception => ex | ||
| 23 | - session[:notice] = ex.clean_message | 17 | + failed = {} |
| 18 | + | ||
| 19 | + params[:tasks].each do |id, value| | ||
| 20 | + decision = value[:decision] | ||
| 21 | + if request.post? && VALID_DECISIONS.include?(decision) && id && decision != 'skip' | ||
| 22 | + task = profile.find_in_all_tasks(id) | ||
| 23 | + task.update_attributes!(value[:task]) | ||
| 24 | + begin | ||
| 25 | + task.send(decision) | ||
| 26 | + rescue Exception => ex | ||
| 27 | + message = "#{task.title} (#{task.requestor ? task.requestor.name : task.author_name})" | ||
| 28 | + failed[ex.clean_message] ? failed[ex.clean_message] << message : failed[ex.clean_message] = [message] | ||
| 29 | + end | ||
| 24 | end | 30 | end |
| 25 | end | 31 | end |
| 26 | - redirect_to :action => 'index' | 32 | + |
| 33 | + if failed.blank? | ||
| 34 | + session[:notice] = _("All decisions were applied successfully.") | ||
| 35 | + else | ||
| 36 | + session[:notice] = _("Some tasks couldn't be applied.") | ||
| 37 | + end | ||
| 38 | + redirect_to params.merge!(:action => 'index', :failed => failed) | ||
| 27 | end | 39 | end |
| 28 | 40 | ||
| 29 | def new | 41 | def new |
app/helpers/application_helper.rb
| @@ -279,6 +279,19 @@ module ApplicationHelper | @@ -279,6 +279,19 @@ module ApplicationHelper | ||
| 279 | end | 279 | end |
| 280 | end | 280 | end |
| 281 | 281 | ||
| 282 | + def partial_for_task_class(klass, action) | ||
| 283 | + if klass.nil? | ||
| 284 | + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' | ||
| 285 | + end | ||
| 286 | + | ||
| 287 | + name = "#{klass.name.underscore}_#{action.to_s}" | ||
| 288 | + if File.exists?(File.join(RAILS_ROOT, 'app', 'views', params[:controller], "_#{name}.rhtml")) | ||
| 289 | + name | ||
| 290 | + else | ||
| 291 | + partial_for_task_class(klass.superclass, action) | ||
| 292 | + end | ||
| 293 | + end | ||
| 294 | + | ||
| 282 | def user | 295 | def user |
| 283 | @controller.send(:user) | 296 | @controller.send(:user) |
| 284 | end | 297 | end |
| @@ -621,7 +634,16 @@ module ApplicationHelper | @@ -621,7 +634,16 @@ module ApplicationHelper | ||
| 621 | end | 634 | end |
| 622 | 635 | ||
| 623 | def select_folder(label, object, method, collection, html_options = {}, js_options = {}) | 636 | def select_folder(label, object, method, collection, html_options = {}, js_options = {}) |
| 624 | - labelled_form_field(label, select(object, method, collection.map {|f| [ profile.identifier + '/' + f.full_name, f.id ] }, html_options.merge({:include_blank => "#{profile.identifier}"}), js_options)) | 637 | + root = profile ? profile.identifier : _("root") |
| 638 | + labelled_form_field(label, select(object, method, | ||
| 639 | + collection.map {|f| [ root + '/' + f.full_name, f.id ]}, | ||
| 640 | + {:include_blank => root}, html_options.merge(js_options))) | ||
| 641 | + end | ||
| 642 | + | ||
| 643 | + def select_profile_folder(label, object, method, profile, html_options = {}, js_options = {}) | ||
| 644 | + labelled_form_field(label, select(object, method, | ||
| 645 | + profile.folders.map {|f| [ profile.identifier + '/' + f.full_name, f.id ]}, | ||
| 646 | + {:include_blank => profile.identifier}, html_options.merge(js_options))) | ||
| 625 | end | 647 | end |
| 626 | 648 | ||
| 627 | def theme_option(opt = nil) | 649 | def theme_option(opt = nil) |
| @@ -1094,10 +1116,16 @@ module ApplicationHelper | @@ -1094,10 +1116,16 @@ module ApplicationHelper | ||
| 1094 | end | 1116 | end |
| 1095 | 1117 | ||
| 1096 | def usermenu_logged_in | 1118 | def usermenu_logged_in |
| 1119 | + pending_tasks_count = '' | ||
| 1120 | + if user && user.all_pending_tasks.count > 0 | ||
| 1121 | + pending_tasks_count = link_to(user.all_pending_tasks.count.to_s, '/myprofile/{login}/tasks', :id => 'pending-tasks-count') | ||
| 1122 | + end | ||
| 1123 | + | ||
| 1097 | (_('Welcome, %s') % link_to('<i></i><strong>{login}</strong>', '/{login}', :id => "homepage-link", :title => _('Go to your homepage'))) + | 1124 | (_('Welcome, %s') % link_to('<i></i><strong>{login}</strong>', '/{login}', :id => "homepage-link", :title => _('Go to your homepage'))) + |
| 1098 | render_environment_features(:usermenu) + | 1125 | render_environment_features(:usermenu) + |
| 1099 | link_to('<i class="icon-menu-admin"></i><strong>' + _('Administration') + '</strong>', { :controller => 'admin_panel', :action => 'index' }, :id => "controlpanel", :title => _("Configure the environment"), :class => 'admin-link', :style => 'display: none') + | 1126 | link_to('<i class="icon-menu-admin"></i><strong>' + _('Administration') + '</strong>', { :controller => 'admin_panel', :action => 'index' }, :id => "controlpanel", :title => _("Configure the environment"), :class => 'admin-link', :style => 'display: none') + |
| 1100 | link_to('<i class="icon-menu-ctrl-panel"></i><strong>' + _('Control panel') + '</strong>', '/myprofile/{login}', :id => "controlpanel", :title => _("Configure your personal account and content")) + | 1127 | link_to('<i class="icon-menu-ctrl-panel"></i><strong>' + _('Control panel') + '</strong>', '/myprofile/{login}', :id => "controlpanel", :title => _("Configure your personal account and content")) + |
| 1128 | + pending_tasks_count + | ||
| 1101 | link_to('<i class="icon-menu-logout"></i><strong>' + _('Logout') + '</strong>', { :controller => 'account', :action => 'logout'} , :id => "logout", :title => _("Leave the system")) | 1129 | link_to('<i class="icon-menu-logout"></i><strong>' + _('Logout') + '</strong>', { :controller => 'account', :action => 'logout'} , :id => "logout", :title => _("Leave the system")) |
| 1102 | end | 1130 | end |
| 1103 | 1131 | ||
| @@ -1164,4 +1192,13 @@ module ApplicationHelper | @@ -1164,4 +1192,13 @@ module ApplicationHelper | ||
| 1164 | content_tag(:div, _('Source: %s') % source_url, :id => 'article-source') unless source_url.nil? | 1192 | content_tag(:div, _('Source: %s') % source_url, :id => 'article-source') unless source_url.nil? |
| 1165 | end | 1193 | end |
| 1166 | 1194 | ||
| 1195 | + def task_information(task) | ||
| 1196 | + values = {} | ||
| 1197 | + values.merge!({:requestor => link_to(task.requestor.name, task.requestor.public_profile_url)}) if task.requestor | ||
| 1198 | + values.merge!({:subject => content_tag('span', task.subject, :class=>'task_target')}) if task.subject | ||
| 1199 | + values.merge!({:linked_subject => link_to(content_tag('span', task.linked_subject[:text], :class => 'task_target'), task.linked_subject[:url])}) if task.linked_subject | ||
| 1200 | + values.merge!(task.information[:variables]) if task.information[:variables] | ||
| 1201 | + task.information[:message] % values | ||
| 1202 | + end | ||
| 1203 | + | ||
| 1167 | end | 1204 | end |
app/models/add_friend.rb
| @@ -6,7 +6,7 @@ class AddFriend < Task | @@ -6,7 +6,7 @@ class AddFriend < Task | ||
| 6 | 6 | ||
| 7 | validates_uniqueness_of :target_id, :scope => [ :requestor_id ] | 7 | validates_uniqueness_of :target_id, :scope => [ :requestor_id ] |
| 8 | 8 | ||
| 9 | - validates_length_of :group_for_person, :group_for_friend, :maximum => 150, :allow_nil => true | 9 | + validates_length_of :group_for_person, :group_for_friend, :maximum => 150, :allow_nil => true |
| 10 | 10 | ||
| 11 | alias :person :requestor | 11 | alias :person :requestor |
| 12 | alias :person= :requestor= | 12 | alias :person= :requestor= |
| @@ -19,17 +19,29 @@ class AddFriend < Task | @@ -19,17 +19,29 @@ class AddFriend < Task | ||
| 19 | requestor.add_friend(target, group_for_person) | 19 | requestor.add_friend(target, group_for_person) |
| 20 | end | 20 | end |
| 21 | 21 | ||
| 22 | - def description | ||
| 23 | - _('%s wants to be your friend.') % requestor.name | ||
| 24 | - end | ||
| 25 | - | ||
| 26 | def permission | 22 | def permission |
| 27 | :manage_friends | 23 | :manage_friends |
| 28 | end | 24 | end |
| 29 | 25 | ||
| 30 | def target_notification_message | 26 | def target_notification_message |
| 31 | - description + "\n\n" + | 27 | + _('%{requestor} wants to be your friend.') % {:requestor => requestor.name} + "\n\n" + |
| 32 | _('You need to login to %{system} in order to accept %{requestor} as your friend.') % { :system => target.environment.name, :requestor => requestor.name } | 28 | _('You need to login to %{system} in order to accept %{requestor} as your friend.') % { :system => target.environment.name, :requestor => requestor.name } |
| 33 | end | 29 | end |
| 34 | 30 | ||
| 31 | + def title | ||
| 32 | + _("New friend") | ||
| 33 | + end | ||
| 34 | + | ||
| 35 | + def information | ||
| 36 | + {:message => _('%{requestor} wants to be your friend.') } | ||
| 37 | + end | ||
| 38 | + | ||
| 39 | + def accept_details | ||
| 40 | + true | ||
| 41 | + end | ||
| 42 | + | ||
| 43 | + def icon | ||
| 44 | + {:type => :profile_image, :profile => requestor, :url => requestor.url} | ||
| 45 | + end | ||
| 46 | + | ||
| 35 | end | 47 | end |
app/models/add_member.rb
| @@ -15,8 +15,20 @@ class AddMember < Task | @@ -15,8 +15,20 @@ class AddMember < Task | ||
| 15 | target.affiliate(requestor, self.roles.select{|r| !r.to_i.zero? }.map{|i| Role.find(i)}) | 15 | target.affiliate(requestor, self.roles.select{|r| !r.to_i.zero? }.map{|i| Role.find(i)}) |
| 16 | end | 16 | end |
| 17 | 17 | ||
| 18 | - def description | ||
| 19 | - _('%s wants to be a member of "%s".') % [requestor.name, organization.name] | 18 | + def title |
| 19 | + _("New member") | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + def information | ||
| 23 | + {:message => _('%{requestor} wants to be a member of this community.')} | ||
| 24 | + end | ||
| 25 | + | ||
| 26 | + def accept_details | ||
| 27 | + true | ||
| 28 | + end | ||
| 29 | + | ||
| 30 | + def icon | ||
| 31 | + {:type => :profile_image, :profile => requestor, :url => requestor.url} | ||
| 20 | end | 32 | end |
| 21 | 33 | ||
| 22 | def permission | 34 | def permission |
| @@ -24,7 +36,7 @@ class AddMember < Task | @@ -24,7 +36,7 @@ class AddMember < Task | ||
| 24 | end | 36 | end |
| 25 | 37 | ||
| 26 | def target_notification_message | 38 | def target_notification_message |
| 27 | - description + "\n\n" + | 39 | + _('%{requestor} wants to be a member of this community.') % {:requestor => requestor.name} + "\n\n" + |
| 28 | _('You will need login to %{system} in order to accept or reject %{requestor} as a member of %{organization}.') % { :system => target.environment.name, :requestor => requestor.name, :organization => organization.name } | 40 | _('You will need login to %{system} in order to accept or reject %{requestor} as a member of %{organization}.') % { :system => target.environment.name, :requestor => requestor.name, :organization => organization.name } |
| 29 | end | 41 | end |
| 30 | 42 |
app/models/approve_article.rb
| @@ -3,10 +3,6 @@ class ApproveArticle < Task | @@ -3,10 +3,6 @@ class ApproveArticle < Task | ||
| 3 | 3 | ||
| 4 | validates_presence_of :requestor_id, :target_id | 4 | validates_presence_of :requestor_id, :target_id |
| 5 | 5 | ||
| 6 | - def description | ||
| 7 | - _('%{author} wants to publish "%{article}" on %{community}') % { :author => requestor.name, :article => article_title, :community => target.name } | ||
| 8 | - end | ||
| 9 | - | ||
| 10 | def article_title | 6 | def article_title |
| 11 | article ? article.title : _('(The original text was removed)') | 7 | article ? article.title : _('(The original text was removed)') |
| 12 | end | 8 | end |
| @@ -24,7 +20,7 @@ class ApproveArticle < Task | @@ -24,7 +20,7 @@ class ApproveArticle < Task | ||
| 24 | end | 20 | end |
| 25 | 21 | ||
| 26 | def name | 22 | def name |
| 27 | - data[:name].blank? ? article.name : data[:name] | 23 | + data[:name].blank? ? (article ? article.name : _("Article removed.")) : data[:name] |
| 28 | end | 24 | end |
| 29 | 25 | ||
| 30 | def name= value | 26 | def name= value |
| @@ -68,7 +64,7 @@ class ApproveArticle < Task | @@ -68,7 +64,7 @@ class ApproveArticle < Task | ||
| 68 | end | 64 | end |
| 69 | 65 | ||
| 70 | def abstract | 66 | def abstract |
| 71 | - data[:abstract].blank? ? article.abstract : data[:abstract] | 67 | + data[:abstract].blank? ? (article ? article.abstract : '') : data[:abstract] |
| 72 | end | 68 | end |
| 73 | 69 | ||
| 74 | def body= value | 70 | def body= value |
| @@ -76,17 +72,63 @@ class ApproveArticle < Task | @@ -76,17 +72,63 @@ class ApproveArticle < Task | ||
| 76 | end | 72 | end |
| 77 | 73 | ||
| 78 | def body | 74 | def body |
| 79 | - data[:body].blank? ? article.body : data[:body] | 75 | + data[:body].blank? ? (article ? article.body : "") : data[:body] |
| 80 | end | 76 | end |
| 81 | 77 | ||
| 82 | def perform | 78 | def perform |
| 83 | article.copy!(:name => name, :abstract => abstract, :body => body, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source) | 79 | article.copy!(:name => name, :abstract => abstract, :body => body, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source) |
| 84 | end | 80 | end |
| 85 | 81 | ||
| 82 | + def title | ||
| 83 | + _("New article") | ||
| 84 | + end | ||
| 85 | + | ||
| 86 | + def icon | ||
| 87 | + result = {:type => :defined_image, :src => '/images/icons-app/article-minor.png', :name => name} | ||
| 88 | + result.merge({:url => article.url}) if article | ||
| 89 | + return result | ||
| 90 | + end | ||
| 91 | + | ||
| 92 | + def linked_subject | ||
| 93 | + {:text => name, :url => article.url} if article | ||
| 94 | + end | ||
| 95 | + | ||
| 96 | + def information | ||
| 97 | + if article | ||
| 98 | + {:message => _('%{requestor} wants to publish the article: %{linked_subject}.')} | ||
| 99 | + else | ||
| 100 | + {:message => _("The article was removed.")} | ||
| 101 | + end | ||
| 102 | + end | ||
| 103 | + | ||
| 104 | + def accept_details | ||
| 105 | + true | ||
| 106 | + end | ||
| 107 | + | ||
| 108 | + def default_decision | ||
| 109 | + if article | ||
| 110 | + 'skip' | ||
| 111 | + else | ||
| 112 | + 'reject' | ||
| 113 | + end | ||
| 114 | + end | ||
| 115 | + | ||
| 116 | + def accept_disabled? | ||
| 117 | + article.blank? | ||
| 118 | + end | ||
| 119 | + | ||
| 86 | def target_notification_message | 120 | def target_notification_message |
| 87 | return nil if target.organization? && !target.moderated_articles? | 121 | return nil if target.organization? && !target.moderated_articles? |
| 88 | - description + "\n\n" + | 122 | + _('%{requestor} wants to publish the article: %{article}.') % {:requestor => requestor.name, :article => article.name} + "\n\n" |
| 89 | _('You need to login on %{system} in order to approve or reject this article.') % { :system => target.environment.name } | 123 | _('You need to login on %{system} in order to approve or reject this article.') % { :system => target.environment.name } |
| 90 | end | 124 | end |
| 91 | 125 | ||
| 126 | + def task_finished_message | ||
| 127 | + if !closing_statment.blank? | ||
| 128 | + _("Your request for publishing the article \"%{article}\" was approved. Here is the comment left by the admin who approved your article:\n\n%{comment} ") % {:article => name, :comment => closing_statment} | ||
| 129 | + else | ||
| 130 | + _('Your request for publishing the article "%{article}" was approved.') % {:article => name} | ||
| 131 | + end | ||
| 132 | + end | ||
| 133 | + | ||
| 92 | end | 134 | end |
app/models/change_password.rb
| @@ -61,6 +61,18 @@ class ChangePassword < Task | @@ -61,6 +61,18 @@ class ChangePassword < Task | ||
| 61 | self[:data] = {} | 61 | self[:data] = {} |
| 62 | end | 62 | end |
| 63 | 63 | ||
| 64 | + def title | ||
| 65 | + _("Change password") | ||
| 66 | + end | ||
| 67 | + | ||
| 68 | + def information | ||
| 69 | + {:message => _('%{requestor} wants to change its password.')} | ||
| 70 | + end | ||
| 71 | + | ||
| 72 | + def icon | ||
| 73 | + {:type => :profile_image, :profile => requestor, :url => requestor.url} | ||
| 74 | + end | ||
| 75 | + | ||
| 64 | def perform | 76 | def perform |
| 65 | user = self.requestor.user | 77 | user = self.requestor.user |
| 66 | user.force_change_password!(self.password, self.password_confirmation) | 78 | user.force_change_password!(self.password, self.password_confirmation) |
| @@ -87,10 +99,6 @@ class ChangePassword < Task | @@ -87,10 +99,6 @@ class ChangePassword < Task | ||
| 87 | end | 99 | end |
| 88 | end | 100 | end |
| 89 | 101 | ||
| 90 | - def description | ||
| 91 | - _('Password change request') | ||
| 92 | - end | ||
| 93 | - | ||
| 94 | def environment | 102 | def environment |
| 95 | self.requestor.environment | 103 | self.requestor.environment |
| 96 | end | 104 | end |
app/models/community.rb
| @@ -39,6 +39,10 @@ class Community < Organization | @@ -39,6 +39,10 @@ class Community < Organization | ||
| 39 | end | 39 | end |
| 40 | end | 40 | end |
| 41 | 41 | ||
| 42 | + def display_name | ||
| 43 | + self.name | ||
| 44 | + end | ||
| 45 | + | ||
| 42 | def active_fields | 46 | def active_fields |
| 43 | environment ? environment.active_community_fields : [] | 47 | environment ? environment.active_community_fields : [] |
| 44 | end | 48 | end |
app/models/create_community.rb
| @@ -48,16 +48,34 @@ class CreateCommunity < Task | @@ -48,16 +48,34 @@ class CreateCommunity < Task | ||
| 48 | community.add_admin(self.requestor) | 48 | community.add_admin(self.requestor) |
| 49 | end | 49 | end |
| 50 | 50 | ||
| 51 | - def description | ||
| 52 | - _('%s wants to create community %s.') % [requestor.name, self.name] | 51 | + def title |
| 52 | + _("New community") | ||
| 53 | end | 53 | end |
| 54 | 54 | ||
| 55 | - def closing_statement | ||
| 56 | - data[:closing_statement] | 55 | + def icon |
| 56 | + src = image ? image.public_filename(:minor) : '/images/icons-app/community-minor.png' | ||
| 57 | + {:type => :defined_image, :src => src, :name => name} | ||
| 57 | end | 58 | end |
| 58 | 59 | ||
| 59 | - def closing_statement= value | ||
| 60 | - data[:closing_statement] = value | 60 | + def subject |
| 61 | + name | ||
| 62 | + end | ||
| 63 | + | ||
| 64 | + def information | ||
| 65 | + if description.blank? | ||
| 66 | + { :message => _('%{requestor} wants to create community %{subject} with no description.') } | ||
| 67 | + else | ||
| 68 | + { :message => _('%{requestor} wants to create community %{subject} with this description:<p><em>%{description}</em></p>'), | ||
| 69 | + :variables => {:description => description} } | ||
| 70 | + end | ||
| 71 | + end | ||
| 72 | + | ||
| 73 | + def reject_details | ||
| 74 | + true | ||
| 75 | + end | ||
| 76 | + | ||
| 77 | + def display_name | ||
| 78 | + self.name | ||
| 61 | end | 79 | end |
| 62 | 80 | ||
| 63 | # tells if this request was rejected | 81 | # tells if this request was rejected |
| @@ -71,7 +89,6 @@ class CreateCommunity < Task | @@ -71,7 +89,6 @@ class CreateCommunity < Task | ||
| 71 | end | 89 | end |
| 72 | 90 | ||
| 73 | def target_notification_message | 91 | def target_notification_message |
| 74 | - description + "\n\n" + | ||
| 75 | _("User \"%{user}\" just requested to create community %{community}. You have to approve or reject it through the \"Pending Validations\" section in your control panel.\n") % { :user => self.requestor.name, :community => self.name } | 92 | _("User \"%{user}\" just requested to create community %{community}. You have to approve or reject it through the \"Pending Validations\" section in your control panel.\n") % { :user => self.requestor.name, :community => self.name } |
| 76 | end | 93 | end |
| 77 | 94 | ||
| @@ -82,7 +99,7 @@ class CreateCommunity < Task | @@ -82,7 +99,7 @@ class CreateCommunity < Task | ||
| 82 | end | 99 | end |
| 83 | 100 | ||
| 84 | def task_cancelled_message | 101 | def task_cancelled_message |
| 85 | - _("Your request for registering community %{community} at %{environment} was not approved by the environment administrator. The following explanation was given: \n\n%{explanation}") % { :community => self.name, :environment => self.environment, :explanation => self.closing_statement } | 102 | + _("Your request for registering community %{community} at %{environment} was not approved by the environment administrator. The following explanation was given: \n\n%{explanation}") % { :community => self.name, :environment => self.environment, :explanation => self.reject_explanation } |
| 86 | end | 103 | end |
| 87 | 104 | ||
| 88 | def task_finished_message | 105 | def task_finished_message |
app/models/create_enterprise.rb
| @@ -11,7 +11,7 @@ class CreateEnterprise < Task | @@ -11,7 +11,7 @@ class CreateEnterprise < Task | ||
| 11 | N_('Economic activity') | 11 | N_('Economic activity') |
| 12 | N_('Management information') | 12 | N_('Management information') |
| 13 | 13 | ||
| 14 | - DATA_FIELDS = Enterprise.fields + %w[name identifier region_id reject_explanation] | 14 | + DATA_FIELDS = Enterprise.fields + %w[name identifier region_id] |
| 15 | 15 | ||
| 16 | serialize :data, Hash | 16 | serialize :data, Hash |
| 17 | attr_protected :data | 17 | attr_protected :data |
| @@ -48,7 +48,6 @@ class CreateEnterprise < Task | @@ -48,7 +48,6 @@ class CreateEnterprise < Task | ||
| 48 | 48 | ||
| 49 | # check for explanation when rejecting | 49 | # check for explanation when rejecting |
| 50 | validates_presence_of :reject_explanation, :if => (lambda { |record| record.status == Task::Status::CANCELLED } ) | 50 | validates_presence_of :reject_explanation, :if => (lambda { |record| record.status == Task::Status::CANCELLED } ) |
| 51 | - | ||
| 52 | xss_terminate :only => [ :acronym, :address, :contact_person, :contact_phone, :economic_activity, :legal_form, :management_information, :name ], :on => 'validation' | 51 | xss_terminate :only => [ :acronym, :address, :contact_person, :contact_phone, :economic_activity, :legal_form, :management_information, :name ], :on => 'validation' |
| 53 | 52 | ||
| 54 | def validate | 53 | def validate |
| @@ -153,8 +152,24 @@ class CreateEnterprise < Task | @@ -153,8 +152,24 @@ class CreateEnterprise < Task | ||
| 153 | enterprise.add_admin(enterprise.user.person) | 152 | enterprise.add_admin(enterprise.user.person) |
| 154 | end | 153 | end |
| 155 | 154 | ||
| 156 | - def description | ||
| 157 | - __('Enterprise registration: "%s"') % self.name | 155 | + def title |
| 156 | + _("Enterprise registration") | ||
| 157 | + end | ||
| 158 | + | ||
| 159 | + def icon | ||
| 160 | + {:type => :defined_image, :src => '/images/icons-app/enterprise-minor.png', :name => name} | ||
| 161 | + end | ||
| 162 | + | ||
| 163 | + def subject | ||
| 164 | + name | ||
| 165 | + end | ||
| 166 | + | ||
| 167 | + def information | ||
| 168 | + {:message => _('%{requestor} wants to create enterprise %{subject}.')} | ||
| 169 | + end | ||
| 170 | + | ||
| 171 | + def reject_details | ||
| 172 | + true | ||
| 158 | end | 173 | end |
| 159 | 174 | ||
| 160 | def task_created_message | 175 | def task_created_message |
app/models/email_activation.rb
| @@ -11,8 +11,20 @@ class EmailActivation < Task | @@ -11,8 +11,20 @@ class EmailActivation < Task | ||
| 11 | end | 11 | end |
| 12 | end | 12 | end |
| 13 | 13 | ||
| 14 | - def description | ||
| 15 | - _("'%{user} wants to activate email '%{email}'") % { :user => person.name, :email => person.email_addresses.join(', ') } | 14 | + def title |
| 15 | + _("Email activation") | ||
| 16 | + end | ||
| 17 | + | ||
| 18 | + def subject | ||
| 19 | + person.email_addresses.join(', ') | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + def information | ||
| 23 | + {:message => _("%{requestor} wants to activate the following email: %{subject}.")} | ||
| 24 | + end | ||
| 25 | + | ||
| 26 | + def icon | ||
| 27 | + {:type => :profile_image, :profile => requestor, :url => requestor.url} | ||
| 16 | end | 28 | end |
| 17 | 29 | ||
| 18 | def perform | 30 | def perform |
app/models/enterprise_activation.rb
| @@ -20,4 +20,20 @@ class EnterpriseActivation < Task | @@ -20,4 +20,20 @@ class EnterpriseActivation < Task | ||
| 20 | self.enterprise.enable(requestor) | 20 | self.enterprise.enable(requestor) |
| 21 | end | 21 | end |
| 22 | 22 | ||
| 23 | + def title | ||
| 24 | + _("Enterprise activation") | ||
| 25 | + end | ||
| 26 | + | ||
| 27 | + def linked_subject | ||
| 28 | + {:text => target.name, :url => target.public_profile_url} | ||
| 29 | + end | ||
| 30 | + | ||
| 31 | + def information | ||
| 32 | + {:message => _('%{requestor} wants to activate enterprise %{linked_subject}.')} | ||
| 33 | + end | ||
| 34 | + | ||
| 35 | + def icon | ||
| 36 | + {:type => :profile_image, :profile => requestor, :url => requestor.url} | ||
| 37 | + end | ||
| 38 | + | ||
| 23 | end | 39 | end |
app/models/invite_friend.rb
| @@ -7,8 +7,20 @@ class InviteFriend < Invitation | @@ -7,8 +7,20 @@ class InviteFriend < Invitation | ||
| 7 | friend.add_friend(person, group_for_friend) | 7 | friend.add_friend(person, group_for_friend) |
| 8 | end | 8 | end |
| 9 | 9 | ||
| 10 | - def description | ||
| 11 | - _('%s invited you to join %s') % [person.name, person.environment.name] | 10 | + def title |
| 11 | + _("New friend") | ||
| 12 | + end | ||
| 13 | + | ||
| 14 | + def information | ||
| 15 | + {:message => _('%{requestor} wants to be your friend.')} | ||
| 16 | + end | ||
| 17 | + | ||
| 18 | + def accept_details | ||
| 19 | + true | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + def icon | ||
| 23 | + {:type => :profile_image, :profile => requestor, :url => requestor.url} | ||
| 12 | end | 24 | end |
| 13 | 25 | ||
| 14 | def permission | 26 | def permission |
app/models/invite_member.rb
| @@ -15,8 +15,24 @@ class InviteMember < Invitation | @@ -15,8 +15,24 @@ class InviteMember < Invitation | ||
| 15 | community.add_member(friend) | 15 | community.add_member(friend) |
| 16 | end | 16 | end |
| 17 | 17 | ||
| 18 | - def description | ||
| 19 | - _('%s invited you to join the community %s') % [person.name, community.name] | 18 | + def title |
| 19 | + _("Community invitation") | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + def linked_subject | ||
| 23 | + {:text => community.name, :url => community.public_profile_url} | ||
| 24 | + end | ||
| 25 | + | ||
| 26 | + def information | ||
| 27 | + {:message => _('%{requestor} invited you to join %{linked_subject}.')} | ||
| 28 | + end | ||
| 29 | + | ||
| 30 | + def url | ||
| 31 | + community.url | ||
| 32 | + end | ||
| 33 | + | ||
| 34 | + def icon | ||
| 35 | + {:type => :profile_image, :profile => community, :url => community.url} | ||
| 20 | end | 36 | end |
| 21 | 37 | ||
| 22 | def expanded_message | 38 | def expanded_message |
app/models/suggest_article.rb
| @@ -7,10 +7,6 @@ class SuggestArticle < Task | @@ -7,10 +7,6 @@ class SuggestArticle < Task | ||
| 7 | 7 | ||
| 8 | validates_presence_of :target_id, :article_name, :email, :name, :article_body | 8 | validates_presence_of :target_id, :article_name, :email, :name, :article_body |
| 9 | 9 | ||
| 10 | - def description | ||
| 11 | - _('%{sender} suggested to publish "%{article}" on %{community}') % { :sender => sender, :article => article_name, :community => target.name } | ||
| 12 | - end | ||
| 13 | - | ||
| 14 | settings_items :email, :type => String | 10 | settings_items :email, :type => String |
| 15 | settings_items :name, :type => String | 11 | settings_items :name, :type => String |
| 16 | settings_items :article_name, :type => String | 12 | settings_items :article_name, :type => String |
| @@ -39,8 +35,30 @@ class SuggestArticle < Task | @@ -39,8 +35,30 @@ class SuggestArticle < Task | ||
| 39 | ) | 35 | ) |
| 40 | end | 36 | end |
| 41 | 37 | ||
| 38 | + def title | ||
| 39 | + _("Article suggestion") | ||
| 40 | + end | ||
| 41 | + | ||
| 42 | + def subject | ||
| 43 | + article_name | ||
| 44 | + end | ||
| 45 | + | ||
| 46 | + def information | ||
| 47 | + { :message => _('%{sender} suggested the publication of the article: %{subject}.'), | ||
| 48 | + :variables => {:sender => sender} } | ||
| 49 | + end | ||
| 50 | + | ||
| 51 | + def accept_details | ||
| 52 | + true | ||
| 53 | + end | ||
| 54 | + | ||
| 55 | + def icon | ||
| 56 | + result = {:type => :defined_image, :src => '/images/icons-app/article-minor.png', :name => article_name} | ||
| 57 | + end | ||
| 58 | + | ||
| 42 | def target_notification_message | 59 | def target_notification_message |
| 43 | - description + "\n\n" + | 60 | + _('%{sender} suggested the publication of the article: %{article}.') % |
| 61 | + {:sender => sender, :article => article_name} + "\n\n" + | ||
| 44 | _('You need to login on %{system} in order to approve or reject this article.') % { :system => target.environment.name } | 62 | _('You need to login on %{system} in order to approve or reject this article.') % { :system => target.environment.name } |
| 45 | end | 63 | end |
| 46 | 64 |
app/models/task.rb
| @@ -11,6 +11,8 @@ | @@ -11,6 +11,8 @@ | ||
| 11 | # will need to declare <ttserialize</tt> itself). | 11 | # will need to declare <ttserialize</tt> itself). |
| 12 | class Task < ActiveRecord::Base | 12 | class Task < ActiveRecord::Base |
| 13 | 13 | ||
| 14 | + acts_as_having_settings :field => :data | ||
| 15 | + | ||
| 14 | module Status | 16 | module Status |
| 15 | # the status of tasks just created | 17 | # the status of tasks just created |
| 16 | ACTIVE = 1 | 18 | ACTIVE = 1 |
| @@ -86,6 +88,14 @@ class Task < ActiveRecord::Base | @@ -86,6 +88,14 @@ class Task < ActiveRecord::Base | ||
| 86 | def after_finish | 88 | def after_finish |
| 87 | end | 89 | end |
| 88 | 90 | ||
| 91 | + def reject_explanation=(reject_explanation='') | ||
| 92 | + self.data[:reject_explanation] = reject_explanation | ||
| 93 | + end | ||
| 94 | + | ||
| 95 | + def reject_explanation | ||
| 96 | + self.data[:reject_explanation] | ||
| 97 | + end | ||
| 98 | + | ||
| 89 | # this method cancels the task. At the end a message (as returned by | 99 | # this method cancels the task. At the end a message (as returned by |
| 90 | # #cancel_message) is sent to the requestor with #notify_requestor. | 100 | # #cancel_message) is sent to the requestor with #notify_requestor. |
| 91 | def cancel | 101 | def cancel |
| @@ -101,13 +111,50 @@ class Task < ActiveRecord::Base | @@ -101,13 +111,50 @@ class Task < ActiveRecord::Base | ||
| 101 | end | 111 | end |
| 102 | end | 112 | end |
| 103 | 113 | ||
| 114 | + # Here are the tasks customizable options. | ||
| 104 | 115 | ||
| 105 | - # Returns the description of the task. | ||
| 106 | - # | ||
| 107 | - # This method +must+ be overriden in subclasses to return something | ||
| 108 | - # meaningful for each kind of task | ||
| 109 | - def description | ||
| 110 | - _('Generic task') | 116 | + def title |
| 117 | + _("Task") | ||
| 118 | + end | ||
| 119 | + | ||
| 120 | + def subject | ||
| 121 | + nil | ||
| 122 | + end | ||
| 123 | + | ||
| 124 | + def linked_subject | ||
| 125 | + nil | ||
| 126 | + end | ||
| 127 | + | ||
| 128 | + def information | ||
| 129 | + {:message => _('%{requestor} sent you a task.')} | ||
| 130 | + end | ||
| 131 | + | ||
| 132 | + def accept_details | ||
| 133 | + false | ||
| 134 | + end | ||
| 135 | + | ||
| 136 | + def reject_details | ||
| 137 | + false | ||
| 138 | + end | ||
| 139 | + | ||
| 140 | + def icon | ||
| 141 | + {:type => :defined_image, :src => "/images/icons-app/user-minor.png", :name => requestor.name, :url => requestor.url} | ||
| 142 | + end | ||
| 143 | + | ||
| 144 | + def default_decision | ||
| 145 | + 'skip' | ||
| 146 | + end | ||
| 147 | + | ||
| 148 | + def accept_disabled? | ||
| 149 | + false | ||
| 150 | + end | ||
| 151 | + | ||
| 152 | + def reject_disabled? | ||
| 153 | + false | ||
| 154 | + end | ||
| 155 | + | ||
| 156 | + def skip_disabled? | ||
| 157 | + false | ||
| 111 | end | 158 | end |
| 112 | 159 | ||
| 113 | # The message that will be sent to the requestor of the task when the task is | 160 | # The message that will be sent to the requestor of the task when the task is |
app/models/task_mailer.rb
| @@ -17,7 +17,7 @@ class TaskMailer < ActionMailer::Base | @@ -17,7 +17,7 @@ class TaskMailer < ActionMailer::Base | ||
| 17 | url_for_tasks_list = task.target.kind_of?(Environment) ? '' : url_for(task.target.url.merge(:controller => 'tasks', :action => 'index')) | 17 | url_for_tasks_list = task.target.kind_of?(Environment) ? '' : url_for(task.target.url.merge(:controller => 'tasks', :action => 'index')) |
| 18 | 18 | ||
| 19 | from self.class.generate_from(task) | 19 | from self.class.generate_from(task) |
| 20 | - subject '[%s] %s' % [task.environment.name, task.description] | 20 | + subject '[%s] %s' % [task.environment.name, task.information] |
| 21 | body :target => task.target.name, | 21 | body :target => task.target.name, |
| 22 | :message => msg, | 22 | :message => msg, |
| 23 | :environment => task.environment.name, | 23 | :environment => task.environment.name, |
| @@ -32,7 +32,7 @@ class TaskMailer < ActionMailer::Base | @@ -32,7 +32,7 @@ class TaskMailer < ActionMailer::Base | ||
| 32 | recipients task.friend_email | 32 | recipients task.friend_email |
| 33 | 33 | ||
| 34 | from self.class.generate_from(task) | 34 | from self.class.generate_from(task) |
| 35 | - subject '[%s] %s' % [ task.requestor.environment.name, task.description ] | 35 | + subject '[%s] %s' % [ task.requestor.environment.name, task.information ] |
| 36 | body :message => msg | 36 | body :message => msg |
| 37 | end | 37 | end |
| 38 | 38 | ||
| @@ -52,7 +52,7 @@ class TaskMailer < ActionMailer::Base | @@ -52,7 +52,7 @@ class TaskMailer < ActionMailer::Base | ||
| 52 | 52 | ||
| 53 | recipients task.requestor.notification_emails | 53 | recipients task.requestor.notification_emails |
| 54 | from self.class.generate_from(task) | 54 | from self.class.generate_from(task) |
| 55 | - subject '[%s] %s' % [task.requestor.environment.name, task.description] | 55 | + subject '[%s] %s' % [task.requestor.environment.name, task.information] |
| 56 | body :requestor => task.requestor.name, | 56 | body :requestor => task.requestor.name, |
| 57 | :message => text, | 57 | :message => text, |
| 58 | :environment => task.requestor.environment.name, | 58 | :environment => task.requestor.environment.name, |
app/models/ticket.rb
app/views/pending_task_notifier/notification.rhtml
| @@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
| 11 | <% pending_tasks = @person.pending_tasks_for_organization(organization) %> | 11 | <% pending_tasks = @person.pending_tasks_for_organization(organization) %> |
| 12 | <%= _("%s has %d pending task(s).") % [organization.name, pending_tasks.size] %> | 12 | <%= _("%s has %d pending task(s).") % [organization.name, pending_tasks.size] %> |
| 13 | 13 | ||
| 14 | -<%= pending_tasks.map{|i| " * #{i.description}"}.join("\n") %> | 14 | +<%= pending_tasks.map{|i| " * #{i.information}"}.join("\n") %> |
| 15 | 15 | ||
| 16 | <%= _("Click in address below to process task(s):") %> | 16 | <%= _("Click in address below to process task(s):") %> |
| 17 | 17 |
app/views/profile_editor/_pending_tasks.rhtml
| 1 | +<%= stylesheet_link_tag 'tasks' %> | ||
| 2 | + | ||
| 1 | <% unless @pending_tasks.empty? %> | 3 | <% unless @pending_tasks.empty? %> |
| 2 | <div class='pending-tasks'> | 4 | <div class='pending-tasks'> |
| 3 | <h2><%= _('You have pending requests') %></h2> | 5 | <h2><%= _('You have pending requests') %></h2> |
| 4 | <ul> | 6 | <ul> |
| 5 | - <%= @pending_tasks.map {|item| content_tag('li', item.description)} %> | 7 | + <%= @pending_tasks.map {|task| content_tag('li', task_information(task))} %> |
| 6 | </ul> | 8 | </ul> |
| 7 | <%= button(:todo, _('Process requests'), :controller => 'tasks', :action => 'index') %> | 9 | <%= button(:todo, _('Process requests'), :controller => 'tasks', :action => 'index') %> |
| 8 | </div> | 10 | </div> |
app/views/tasks/_add_friend.rhtml
| @@ -1,40 +0,0 @@ | @@ -1,40 +0,0 @@ | ||
| 1 | -<h2><%= _('New friend') %></h2> | ||
| 2 | - | ||
| 3 | -<%= link_to( profile_image(task.requestor, :minor, :border => 0), task.requestor.public_profile_url ) %> | ||
| 4 | - | ||
| 5 | -<%= _('%s wants to be your friend.') % | ||
| 6 | - content_tag('strong', link_to( task.requestor.name, task.requestor.public_profile_url ) ) %> | ||
| 7 | - | ||
| 8 | -<% form_for('task', task, :url => { :action => 'close', :id => task.id } ) do |f| %> | ||
| 9 | - | ||
| 10 | - <div> | ||
| 11 | - | ||
| 12 | - <%= radio_button_tag(:decision, 'finish', true, | ||
| 13 | - :id => "decision-finish-#{task.id}", | ||
| 14 | - :onclick => "Element.show('group-for-friend-#{task.id}')") %> | ||
| 15 | - <label for="<%= "decision-finish-#{task.id}" %>"><b><%= _('Accept') %></b></label> | ||
| 16 | - | ||
| 17 | - | ||
| 18 | - | ||
| 19 | - <%= radio_button_tag(:decision, 'cancel', false, | ||
| 20 | - :id => "decision-cancel-#{task.id}", | ||
| 21 | - :onclick => "Element.hide('group-for-friend-#{task.id}')") %> | ||
| 22 | - <label for="<%= "decision-cancel-#{task.id}" %>"><b><%= _('Ignore') %></b></label> | ||
| 23 | - | ||
| 24 | - <% content_tag('div', :id => "group-for-friend-#{task.id}", :class => "add-friend-tags") do %> | ||
| 25 | - <%= _('Classify your new friend:') %> | ||
| 26 | - <%= text_field_with_local_autocomplete("task[group_for_friend]", | ||
| 27 | - profile.suggested_friend_groups, | ||
| 28 | - {:id => "field-group-for-friend-#{task.id}", :maxlength => 150}) %> | ||
| 29 | - | ||
| 30 | - <p class="friend-classify-suggestions"> | ||
| 31 | - <%= _('Suggestions: %s') % profile.suggested_friend_groups.join(', ') %> | ||
| 32 | - </p> | ||
| 33 | - <% end %> | ||
| 34 | - | ||
| 35 | - </div> | ||
| 36 | - | ||
| 37 | - <% button_bar do %> | ||
| 38 | - <%= submit_button(:ok, _('Ok!')) %> | ||
| 39 | - <% end %> | ||
| 40 | -<% end %> |
| @@ -0,0 +1,8 @@ | @@ -0,0 +1,8 @@ | ||
| 1 | +<%=_('Classify your new friend:') + | ||
| 2 | +text_field_with_local_autocomplete("tasks[#{task.id}][task][group_for_friend]", | ||
| 3 | + task.target.suggested_friend_groups, | ||
| 4 | + {:id => "field-group-for-friend-#{task.id}", :maxlength => 150}) | ||
| 5 | +%> | ||
| 6 | +<p class="friend-classify-suggestions"> | ||
| 7 | + <%=_('Suggestions: %s') % task.target.suggested_friend_groups.join(', ') %> | ||
| 8 | +</p> |
app/views/tasks/_add_member.rhtml
| @@ -1,38 +0,0 @@ | @@ -1,38 +0,0 @@ | ||
| 1 | -<h2><%= _('New member') %></h2> | ||
| 2 | - | ||
| 3 | -<%= link_to( profile_image(task.requestor, :minor, :border => 0), task.requestor.public_profile_url ) %> | ||
| 4 | - | ||
| 5 | -<%= _('%s wants to be a member of %s.') % | ||
| 6 | - [content_tag('strong', link_to( task.requestor.name, task.requestor.public_profile_url ) ), | ||
| 7 | - content_tag('strong', link_to( task.target.name, task.target.public_profile_url ) )] %> | ||
| 8 | - | ||
| 9 | -<% form_for('task', task, :url => { :action => 'close', :id => task.id } ) do |f| %> | ||
| 10 | - | ||
| 11 | - <div> | ||
| 12 | - <%= radio_button_tag(:decision, 'finish', true, | ||
| 13 | - :id => "decision-finish-#{task.id}", | ||
| 14 | - :onclick => "Element.show('group-for-friend-#{task.id}')") %> | ||
| 15 | - <label for="<%= "decision-finish-#{task.id}" %>"><b><%= _('Accept') %></b></label> | ||
| 16 | - | ||
| 17 | - | ||
| 18 | - | ||
| 19 | - <%= radio_button_tag(:decision, 'cancel', false, | ||
| 20 | - :id => "decision-cancel-#{task.id}", | ||
| 21 | - :onclick => "Element.hide('group-for-friend-#{task.id}')") %> | ||
| 22 | - <label for="<%= "decision-cancel-#{task.id}" %>"><b><%= _('Ignore') %></b></label> | ||
| 23 | - | ||
| 24 | - <p class="member-classify-suggestions"> | ||
| 25 | - <%= _('Roles:') %> <br> | ||
| 26 | - <% | ||
| 27 | - @roles = task.target.environment.roles.find(:all).select{ |r| r.has_kind?('Profile') } | ||
| 28 | - %> | ||
| 29 | - <% @roles.each do |r| %> | ||
| 30 | - <%= labelled_check_box(r.name, 'task[roles][]', r.id, ( task.target.members.empty? ? true : ( r.id == Profile::Roles.member(r.environment.id).id ) ) ) %><br/> | ||
| 31 | - <% end %> | ||
| 32 | - </p> | ||
| 33 | - </div> | ||
| 34 | - | ||
| 35 | - <% button_bar do %> | ||
| 36 | - <%= submit_button(:ok, _('Ok!')) %> | ||
| 37 | - <% end %> | ||
| 38 | -<% end %> |
| @@ -0,0 +1,8 @@ | @@ -0,0 +1,8 @@ | ||
| 1 | +<%= content = _("Roles:")+"<br />" | ||
| 2 | +roles = Profile::Roles.organization_member_roles(task.target.environment.id) | ||
| 3 | +roles.each do |role| | ||
| 4 | + content += labelled_check_box(role.name, "tasks[#{task.id}][roles][]", role.id, false)+"<br />" | ||
| 5 | +end | ||
| 6 | +content_tag('p', content, :class => 'member-classify-suggestion') | ||
| 7 | +%> | ||
| 8 | + |
app/views/tasks/_approve_article.rhtml
| @@ -1,43 +0,0 @@ | @@ -1,43 +0,0 @@ | ||
| 1 | -<h2><%= _('New article') %></h2> | ||
| 2 | - | ||
| 3 | -<% form_for('task', task, :url => { :action => 'close', :id => task.id } ) do |f| %> | ||
| 4 | - | ||
| 5 | - <% if task.article.nil? %> | ||
| 6 | - <%= _('%s wanted to publish some content, but this content was deleted and cannot be published anymore.') % content_tag('strong', link_to( task.requestor.name, task.requestor.public_profile_url ) ) %> | ||
| 7 | - <%= hidden_field_tag(:decision, 'cancel') %> | ||
| 8 | - <% else %> | ||
| 9 | - <%= _('%s wants to publish content: %s.') % | ||
| 10 | - [content_tag('strong', link_to( task.requestor.name, task.requestor.public_profile_url ) ), | ||
| 11 | - content_tag('strong', link_to( task.article.name, task.article.url ) )] %> | ||
| 12 | - | ||
| 13 | - <div> | ||
| 14 | - <%= radio_button_tag(:decision, 'finish', true, | ||
| 15 | - :id => "decision-finish-#{task.id}", | ||
| 16 | - :onclick => "Element.show('group-for-friend-#{task.id}')") %> | ||
| 17 | - <label for="<%= "decision-finish-#{task.id}" %>"><b><%= _('Accept') %></b></label> | ||
| 18 | - | ||
| 19 | - | ||
| 20 | - | ||
| 21 | - <%= radio_button_tag(:decision, 'cancel', false, | ||
| 22 | - :id => "decision-cancel-#{task.id}", | ||
| 23 | - :onclick => "Element.hide('group-for-friend-#{task.id}')") %> | ||
| 24 | - <label for="<%= "decision-cancel-#{task.id}" %>"><b><%= _('Ignore') %></b></label> | ||
| 25 | - | ||
| 26 | - <%= labelled_form_field _('Name for publishing'), f.text_field(:name, :style => 'width:80%;') %> | ||
| 27 | - | ||
| 28 | - <%= select_folder(_('Select the folder where the article must be published'), 'task', 'article_parent_id', task.target.folders) %> | ||
| 29 | - <div> | ||
| 30 | - <%= f.check_box(:highlighted) %> | ||
| 31 | - <label for="article_highlighted"><%= _('Highlight this article')%></label> | ||
| 32 | - </div> | ||
| 33 | - | ||
| 34 | - <%= labelled_form_field _('Comment for author'), f.text_field(:closing_statment, :style => 'width:80%;') %> | ||
| 35 | - <%= render :partial => partial_for_class(task.article.class), :locals => { :f => f } %> | ||
| 36 | - | ||
| 37 | - </div> | ||
| 38 | - <% end %> | ||
| 39 | - | ||
| 40 | - <% button_bar do %> | ||
| 41 | - <%= submit_button(:ok, _('Ok!')) %> | ||
| 42 | - <% end %> | ||
| 43 | -<% end %> |
| @@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
| 1 | +<%= labelled_form_field(_('Name for publishing'), f.text_field(:name)) %> | ||
| 2 | +<%= select_profile_folder(_('Select the folder where the article must be published'), "tasks[#{task.id}][task]", 'article_parent_id', task.target) %> | ||
| 3 | +<%= labelled_form_field(_('Highlight this article'), f.check_box(:highlighted)) %> | ||
| 4 | + | ||
| 5 | +<div> | ||
| 6 | + <%= labelled_form_field(_('Lead'), f.text_area(:abstract, :style => 'width: 482px; height: 200px;')) %> | ||
| 7 | +</div> | ||
| 8 | +<em><%= _('Used when a short version your text is needed.') %></em> | ||
| 9 | + | ||
| 10 | +<div style="margin-top: 10px;"> | ||
| 11 | + <%= labelled_form_field(_('Text'), f.text_area(:body, :style => 'width:482px; height: 500px;')) %> | ||
| 12 | +</div> | ||
| 13 | +<%= labelled_form_field _('Comment for author'), f.text_field(:closing_statment, :style => 'width: 488px;') %> | ||
| 14 | + |
app/views/tasks/_create_community.rhtml
| @@ -1,47 +0,0 @@ | @@ -1,47 +0,0 @@ | ||
| 1 | -<h2><%= _('New community') %></h2> | ||
| 2 | - | ||
| 3 | -<%= link_to( profile_image(task.requestor, :minor, :border => 0), task.requestor.public_profile_url ) %> | ||
| 4 | - | ||
| 5 | -<%= _('%s wants to create community %s.') % | ||
| 6 | - [content_tag('strong', link_to( task.requestor.name, task.requestor.public_profile_url ) ), | ||
| 7 | - content_tag('strong', task.name )] %> | ||
| 8 | - | ||
| 9 | -<% form_for('task', task, :url => { :action => 'close', :id => task.id } ) do |f| %> | ||
| 10 | - | ||
| 11 | - <div> | ||
| 12 | - <% if !Profile.is_available?(task.name.to_slug, environment) %> | ||
| 13 | - <p><b><%= _('This name was already taken, this community cannot be approved') %></b></p> | ||
| 14 | - <%= hidden_field_tag(:decision, 'cancel') %> | ||
| 15 | - <% else %> | ||
| 16 | - <%= radio_button_tag(:decision, 'finish', true, | ||
| 17 | - :id => "decision-finish-#{task.id}", | ||
| 18 | - :onclick => "hide_closing_statement_area(#{task.id})") %> | ||
| 19 | - <label for="<%= "decision-finish-#{task.id}" %>"><b><%= _('Approve') %></b></label> | ||
| 20 | - | ||
| 21 | - | ||
| 22 | - | ||
| 23 | - <%= radio_button_tag(:decision, 'cancel', false, | ||
| 24 | - :id => "decision-cancel-#{task.id}", | ||
| 25 | - :onclick => "show_closing_statement_area(#{task.id})") %> | ||
| 26 | - <label for="<%= "decision-cancel-#{task.id}" %>"><b><%= _('Reject') %></b></label> | ||
| 27 | - <% end %> | ||
| 28 | - | ||
| 29 | - <script type='text/javascript'> | ||
| 30 | - function show_closing_statement_area(id) { | ||
| 31 | - $('task-closing-statement-' + id).show(); | ||
| 32 | - } | ||
| 33 | - function hide_closing_statement_area(id) { | ||
| 34 | - $('task-closing-statement-' + id).hide(); | ||
| 35 | - } | ||
| 36 | - </script> | ||
| 37 | - | ||
| 38 | - <div style='display:none' id=<%= "task-closing-statement-#{task.id}" %> > | ||
| 39 | - <%= labelled_form_field _('Please provide an explanation for the rejection'), f.text_area(:closing_statement, :style => 'height:200px; width:80%;') %> | ||
| 40 | - </div> | ||
| 41 | - | ||
| 42 | - </div> | ||
| 43 | - | ||
| 44 | - <% button_bar do %> | ||
| 45 | - <%= submit_button(:ok, _('Ok!')) %> | ||
| 46 | - <% end %> | ||
| 47 | -<% end %> |
app/views/tasks/_invite_friend.rhtml
| @@ -1 +0,0 @@ | @@ -1 +0,0 @@ | ||
| 1 | -<%= render :partial => 'add_friend', :locals => {:task => task} %> |
app/views/tasks/_invite_member.rhtml
| @@ -1,29 +0,0 @@ | @@ -1,29 +0,0 @@ | ||
| 1 | -<h2><%= _('Join community') %></h2> | ||
| 2 | - | ||
| 3 | -<%= link_to( profile_image(task.requestor, :minor, :border => 0), task.requestor.public_profile_url ) %> | ||
| 4 | - | ||
| 5 | -<%= _('%s invited you to join the community %s') % | ||
| 6 | - [content_tag('strong', link_to( task.requestor.name, task.requestor.public_profile_url ) ), | ||
| 7 | - content_tag('strong', link_to( task.community.name, task.community.public_profile_url ) )] %> | ||
| 8 | - | ||
| 9 | -<% form_for('task', task, :url => { :action => 'close', :id => task.id } ) do |f| %> | ||
| 10 | - | ||
| 11 | - <div> | ||
| 12 | - <%= radio_button_tag(:decision, 'finish', true, | ||
| 13 | - :id => "decision-finish-#{task.id}", | ||
| 14 | - :onclick => "Element.show('group-for-friend-#{task.id}')") %> | ||
| 15 | - <label for="<%= "decision-finish-#{task.id}" %>"><b><%= _('Accept') %></b></label> | ||
| 16 | - | ||
| 17 | - | ||
| 18 | - | ||
| 19 | - <%= radio_button_tag(:decision, 'cancel', false, | ||
| 20 | - :id => "decision-cancel-#{task.id}", | ||
| 21 | - :onclick => "Element.hide('group-for-friend-#{task.id}')") %> | ||
| 22 | - <label for="<%= "decision-cancel-#{task.id}" %>"><b><%= _('Reject') %></b></label> | ||
| 23 | - | ||
| 24 | - </div> | ||
| 25 | - | ||
| 26 | - <% button_bar do %> | ||
| 27 | - <%= submit_button(:ok, _('Ok!')) %> | ||
| 28 | - <% end %> | ||
| 29 | -<% end %> |
app/views/tasks/_suggest_article.rhtml
| @@ -1,41 +0,0 @@ | @@ -1,41 +0,0 @@ | ||
| 1 | -<h2><%= _('Processing task: %s') % task.description %></h2> | ||
| 2 | - | ||
| 3 | -<%= render :file => 'shared/tiny_mce' %> | ||
| 4 | - | ||
| 5 | -<% form_for('task', task, :url => { :action => 'close', :id => task.id}) do |f| %> | ||
| 6 | - | ||
| 7 | - | ||
| 8 | - <%= labelled_form_field(_("Sent by: "), f.text_field(:name)) %> | ||
| 9 | - <p><%= label_tag(_("Email: %s") % task.email) %> </p> | ||
| 10 | - <%= required labelled_form_field(_('Title'), f.text_field(:article_name, :size => 50)) %> | ||
| 11 | - <%= labelled_form_field(_('Source'), f.text_field(:source_name)) %> | ||
| 12 | - <%= labelled_form_field(_("Source URL"), f.text_field(:source)) %> | ||
| 13 | - | ||
| 14 | - <%= select_folder(_('Select the folder where the article must be published'), 'task', 'article_parent_id', task.target.folders) %> | ||
| 15 | - | ||
| 16 | - <br style="clear: both;"/> | ||
| 17 | - <%= button :add, _("Lead"), '#', :id => "lead-button", :style => "margin-left: 0px;" %> | ||
| 18 | - <em><%= _('Used when a short version your text is needed.') %></em> | ||
| 19 | - | ||
| 20 | - <div id="article-lead"> | ||
| 21 | - <%= labelled_form_field(_('Lead'), text_area_tag('task[article_abstract]', task.article_abstract, :style => 'width: 100%; height: 200px;')) %> | ||
| 22 | - </div> | ||
| 23 | - <div style="margin-top: 10px;"> | ||
| 24 | - <%= labelled_form_field(_('Text'), text_area_tag('task[article_body]', task.article_body, :style => 'width:100%; height: 500px;')) %> | ||
| 25 | - </div> | ||
| 26 | - | ||
| 27 | - <div> | ||
| 28 | - <%= labelled_radio_button _('OK'), :decision, 'finish', true, :onclick => "if(this.checked) $('rejection-field-#{task.id}').style.display='none'" %> | ||
| 29 | - </div> | ||
| 30 | - <div> | ||
| 31 | - <%= labelled_radio_button _('Cancel'), :decision, 'cancel', false, :onclick => "if(this.checked) $('rejection-field-#{task.id}').style.display='block'" %> | ||
| 32 | - </div> | ||
| 33 | - | ||
| 34 | - <% button_bar do %> | ||
| 35 | - <%= submit_button(:ok, _('OK')) %> | ||
| 36 | - <% end %> | ||
| 37 | - | ||
| 38 | -<% end %> | ||
| 39 | - | ||
| 40 | -<%= javascript_include_tag 'article' %> | ||
| 41 | - |
| @@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
| 1 | +<%= render :file => 'shared/tiny_mce' %> | ||
| 2 | + | ||
| 3 | +<%= labelled_form_field(_("Sent by: "), f.text_field(:name)) %> | ||
| 4 | +<p><%= label_tag(_("Email: %s") % task.email) %> </p> | ||
| 5 | +<%= required labelled_form_field(_('Title'), f.text_field(:article_name, :size => 50)) %> | ||
| 6 | +<%= labelled_form_field(_('Source'), f.text_field(:source_name)) %> | ||
| 7 | +<%= labelled_form_field(_("Source URL"), f.text_field(:source)) %> | ||
| 8 | + | ||
| 9 | +<%= select_profile_folder(_('Select the folder where the article must be published'), "tasks[#{task.id}][task]", 'article_parent_id', task.target) %> | ||
| 10 | + | ||
| 11 | +<div> | ||
| 12 | + <%= labelled_form_field(_('Lead'), f.text_area(:article_abstract, :style => 'width: 482px; height: 200px;')) %> | ||
| 13 | +</div> | ||
| 14 | +<em><%= _('Used when a short version your text is needed.') %></em> | ||
| 15 | + | ||
| 16 | +<div style="margin-top: 10px;"> | ||
| 17 | + <%= labelled_form_field(_('Text'), f.text_area(:article_body, :style => 'width:482px; height: 500px;')) %> | ||
| 18 | +</div> |
app/views/tasks/_task.rhtml
| 1 | -<%# a generic task solver %> | ||
| 2 | -<h2><%= _('Processing task: %s') % task.description %></h2> | 1 | +<div class="task_box"> |
| 3 | 2 | ||
| 4 | -<% form_for('task', task, :url => { :action => 'close', :id => task.id}) do |f| %> | 3 | + <div class="task_icon"> |
| 4 | + <% | ||
| 5 | + icon_info = task.icon | ||
| 6 | + if icon_info[:type] == :profile_image | ||
| 7 | + icon = profile_image(icon_info[:profile], :minor) | ||
| 8 | + elsif icon_info[:type] == :defined_image | ||
| 9 | + icon = "<img src='#{icon_info[:src]}' alt='#{icon_info[:name]}' />" | ||
| 10 | + end | ||
| 11 | + %> | ||
| 12 | + <%= | ||
| 13 | + if icon_info[:url] | ||
| 14 | + link_to(icon, icon_info[:url]) | ||
| 15 | + else | ||
| 16 | + icon | ||
| 17 | + end | ||
| 18 | + %> | ||
| 5 | 19 | ||
| 6 | - <div> | ||
| 7 | - <%= labelled_radio_button _('OK'), :decision, 'finish', true, :onclick => "if(this.checked) $('rejection-field-#{task.id}').style.display='none'" %> | ||
| 8 | - </div> | ||
| 9 | - <div> | ||
| 10 | - <%= labelled_radio_button _('Cancel'), :decision, 'cancel', false, :onclick => "if(this.checked) $('rejection-field-#{task.id}').style.display='block'" %> | ||
| 11 | </div> | 20 | </div> |
| 12 | 21 | ||
| 13 | - <div id="rejection-field-<%= task.id %>" style='display: none'> | ||
| 14 | - <%= required labelled_form_field(_('Rejection explanation'), text_area(:task, :reject_explanation, :rows => 5))%> | 22 | + <div class="task_decisions"> |
| 23 | + <%= | ||
| 24 | + labelled_radio_button(_("Accept"), "tasks[#{task.id}][decision]", 'finish', task.default_decision == 'accept', | ||
| 25 | + :id => "decision-finish-#{task.id}", | ||
| 26 | + :class => 'task_accept_radio', | ||
| 27 | + :disabled => task.accept_disabled?, | ||
| 28 | + :task_id => "#{task.id}") + | ||
| 29 | + labelled_radio_button(_("Reject"), "tasks[#{task.id}][decision]", 'cancel', task.default_decision == 'reject', | ||
| 30 | + :id => "decision-cancel-#{task.id}", | ||
| 31 | + :class => 'task_reject_radio', | ||
| 32 | + :disabled => task.reject_disabled?, | ||
| 33 | + :task_id => "#{task.id}") + | ||
| 34 | + labelled_radio_button(_("Skip"), "tasks[#{task.id}][decision]", 'skip', task.default_decision == 'skip', | ||
| 35 | + :id => "decision-skip-#{task.id}", | ||
| 36 | + :class => 'task_skip_radio', | ||
| 37 | + :disabled => task.skip_disabled?, | ||
| 38 | + :task_id => "#{task.id}") | ||
| 39 | + %> | ||
| 40 | + </div><!-- class="task_decisions" --> | ||
| 41 | + | ||
| 42 | + <strong class="task_title"> | ||
| 43 | + <%= task.title %> | ||
| 44 | + </strong> | ||
| 45 | + | ||
| 46 | + <div class="task_information"> | ||
| 47 | + <%= task_information(task) %> | ||
| 15 | </div> | 48 | </div> |
| 16 | 49 | ||
| 17 | - <% button_bar do %> | ||
| 18 | - <%= submit_button(:ok, _('OK')) %> | 50 | + <% fields_for "tasks[#{task.id}][task]", task do |f| %> |
| 51 | + <% if task.accept_details %> | ||
| 52 | + <div id="on-accept-information-<%=task.id%>" style="display: none"> | ||
| 53 | + <%= render :partial => partial_for_task_class(task.class, :accept_details), :locals => {:task => task, :f => f} %> | ||
| 54 | + </div> | ||
| 55 | + <% end %> | ||
| 56 | + | ||
| 57 | + <% if task.reject_details %> | ||
| 58 | + <div id="on-reject-information-<%=task.id%>" style="display: none"> | ||
| 59 | + <%= render :partial => partial_for_task_class(task.class, :reject_details), :locals => {:task => task, :f => f} %> | ||
| 60 | + </div> | ||
| 61 | + <% end %> | ||
| 19 | <% end %> | 62 | <% end %> |
| 20 | 63 | ||
| 21 | -<% end %> | 64 | +</div><!-- class="task_box" --> |
| @@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
| 1 | +<%= labelled_form_field(_('Rejection explanation'), f.text_area(:reject_explanation, :rows => 5)) %> |
app/views/tasks/_ticket.rhtml
| @@ -1,22 +0,0 @@ | @@ -1,22 +0,0 @@ | ||
| 1 | -<h2><%= _('Processing ticket: %s') % task.title %></h2> | ||
| 2 | - | ||
| 3 | -<%= task.description %> | ||
| 4 | - | ||
| 5 | -<% form_for('task', task, :url => { :action => 'close', :id => task.id}) do |f| %> | ||
| 6 | - | ||
| 7 | - <%= labelled_form_field(_('Closing statment'), f.text_area(:closing_statment) ) %> | ||
| 8 | - | ||
| 9 | - <div> | ||
| 10 | - <%= radio_button_tag(:decision, 'finish', true) %> | ||
| 11 | - <%= _('OK') %> | ||
| 12 | - </div> | ||
| 13 | - <div> | ||
| 14 | - <%= radio_button_tag(:decision, 'cancel', false) %> | ||
| 15 | - <%= _('Cancel') %> | ||
| 16 | - </div> | ||
| 17 | - | ||
| 18 | - <% button_bar do %> | ||
| 19 | - <%= submit_button(:ok, _('OK')) %> | ||
| 20 | - <% end %> | ||
| 21 | - | ||
| 22 | -<% end %> |
app/views/tasks/index.rhtml
| 1 | -<h1><%= _("%s's pending tasks") % profile.name %></h1> | 1 | +<%= stylesheet_link_tag 'tasks' %> |
| 2 | 2 | ||
| 3 | +<h1><%= _("%s's pending tasks") % profile.name %></h1> | ||
| 3 | <p> | 4 | <p> |
| 5 | + | ||
| 6 | +<% if !@failed.blank? %> | ||
| 7 | + <div id="errorExplanation"> | ||
| 8 | + <% @failed.each do |error, tasks_descriptions|%> | ||
| 9 | + <h2> <%= error %></h2> | ||
| 10 | + <p><%=_("This error happened with the following tasks: ")%></p> | ||
| 11 | + <ul> | ||
| 12 | + <% tasks_descriptions.each do |description| %> | ||
| 13 | + <li> <%= description %> </li> | ||
| 14 | + <% end %> | ||
| 15 | + </ul> | ||
| 16 | + <% end %> | ||
| 17 | + </div> | ||
| 18 | +<% end %> | ||
| 19 | + | ||
| 4 | <% if @tasks.empty? %> | 20 | <% if @tasks.empty? %> |
| 5 | <em><%= _('No pending tasks for %s') % profile.name %></em> | 21 | <em><%= _('No pending tasks for %s') % profile.name %></em> |
| 6 | <% else %> | 22 | <% else %> |
| 7 | - <ul class='task-list'> | ||
| 8 | - <% @tasks.each do |item| %> | ||
| 9 | - <li class="task-<%= item.class %>"><%= render :partial => partial_for_class(item.class), :locals => { :task => item } %></li> | 23 | + <% form_tag :action => 'close' do%> |
| 24 | + <% button_bar do %> | ||
| 25 | + <%# FiXME button(:edit, _('View my requests'), :action => 'list_requested') %> | ||
| 26 | + <%# FIXME button('menu-mail', _('Send request'), :action => 'new') %> | ||
| 27 | + <%= submit_button :save, _("Apply!") %> | ||
| 28 | + <%= button(:edit, _('View processed tasks'), :action => 'processed') %> | ||
| 29 | + <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %> | ||
| 10 | <% end %> | 30 | <% end %> |
| 11 | - </ul> | 31 | + |
| 32 | + <ul class='task-list'> | ||
| 33 | + <p> | ||
| 34 | + <%= labelled_select(_("Set all to: "), 'set-decisions', 'downcase', 'to_s', nil, ["","Accept", "Reject", "Skip"], :id => "up-set-all-tasks-to") %> | ||
| 35 | + </p> | ||
| 36 | + <% @tasks.each do |task| %> | ||
| 37 | + <%= render :partial => 'task', :locals => { :task => task } %> | ||
| 38 | + <% end %> | ||
| 39 | + <p> | ||
| 40 | + <%= labelled_select(_("Set all to: "), 'set-decisions', 'downcase', 'to_s', nil, ["","Accept", "Reject", "Skip"], :id => "down-set-all-tasks-to") %> | ||
| 41 | + </p> | ||
| 42 | + </ul> | ||
| 43 | + | ||
| 44 | + <% button_bar do %> | ||
| 45 | + <%# FiXME button(:edit, _('View my requests'), :action => 'list_requested') %> | ||
| 46 | + <%# FIXME button('menu-mail', _('Send request'), :action => 'new') %> | ||
| 47 | + <%= submit_button :save, _("Apply!") %> | ||
| 48 | + <%= button(:edit, _('View processed tasks'), :action => 'processed') %> | ||
| 49 | + <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %> | ||
| 50 | + <% end %> | ||
| 51 | + <% end %> | ||
| 12 | <% end %> | 52 | <% end %> |
| 13 | </p> | 53 | </p> |
| 14 | 54 | ||
| 15 | -<% button_bar do %> | ||
| 16 | - <%= button(:edit, _('View processed tasks'), :action => 'processed') %> | ||
| 17 | - <%# FiXME button(:edit, _('View my requests'), :action => 'list_requested') %> | ||
| 18 | - <%# FIXME button('menu-mail', _('Send request'), :action => 'new') %> | ||
| 19 | - <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %> | ||
| 20 | -<% end %> | 55 | + |
| 56 | +<%= javascript_include_tag 'tasks' %> |
app/views/tasks/list_requested.rhtml
| @@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
| 3 | <ul> | 3 | <ul> |
| 4 | <% @tasks.each do |task| %> | 4 | <% @tasks.each do |task| %> |
| 5 | <li> | 5 | <li> |
| 6 | - <strong><%= task.respond_to?(:title) ? link_to( task.title, :action => 'ticket_details', :id => task.id) : task.description %></strong><br/> | 6 | + <strong><%= task.respond_to?(:title) ? link_to( task.title, :action => 'ticket_details', :id => task.id) : task.information %></strong><br/> |
| 7 | <small> | 7 | <small> |
| 8 | <%= _('Created:') + ' ' + show_date(task.created_at) %> | 8 | <%= _('Created:') + ' ' + show_date(task.created_at) %> |
| 9 | — | 9 | — |
app/views/tasks/new.rhtml
| @@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
| 9 | <% end %> | 9 | <% end %> |
| 10 | <%= hidden_field_tag 'ticket[target_type]', 'Profile' %> | 10 | <%= hidden_field_tag 'ticket[target_type]', 'Profile' %> |
| 11 | <%= f.text_field :title, :style => 'width:80%;' %> | 11 | <%= f.text_field :title, :style => 'width:80%;' %> |
| 12 | - <%= f.text_area :description, :style => 'height:200px; width:80%;' %> | 12 | + <%= f.text_area :message, :style => 'height:200px; width:80%;' %> |
| 13 | 13 | ||
| 14 | <% button_bar do %> | 14 | <% button_bar do %> |
| 15 | <%= submit_button(:ok, _('Send'), :cancel => {:action => 'index'}) %> | 15 | <%= submit_button(:ok, _('Send'), :cancel => {:action => 'index'}) %> |
app/views/tasks/processed.rhtml
| @@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
| 7 | <ul> | 7 | <ul> |
| 8 | <% @tasks.each do |item| %> | 8 | <% @tasks.each do |item| %> |
| 9 | <li> | 9 | <li> |
| 10 | - <strong><%= item.description %></strong> <br/> | 10 | + <strong><%= item.information %></strong> <br/> |
| 11 | <small> | 11 | <small> |
| 12 | <%= _('Created:') +' '+ show_date(item.created_at) %> | 12 | <%= _('Created:') +' '+ show_date(item.created_at) %> |
| 13 | — | 13 | — |
features/approve_article.feature
| @@ -28,7 +28,8 @@ Feature: approve article | @@ -28,7 +28,8 @@ Feature: approve article | ||
| 28 | And I go to Sample Community's control panel | 28 | And I go to Sample Community's control panel |
| 29 | And I follow "Process requests" | 29 | And I follow "Process requests" |
| 30 | And I fill in "Text" with "This is an article edited" | 30 | And I fill in "Text" with "This is an article edited" |
| 31 | - And I press "Ok!" | 31 | + And I choose "Accept" |
| 32 | + And I press "Apply!" | ||
| 32 | And I go to Sample Community's sitemap | 33 | And I go to Sample Community's sitemap |
| 33 | When I follow "Sample Article" | 34 | When I follow "Sample Article" |
| 34 | Then I should see "This is an article edited" | 35 | Then I should see "This is an article edited" |
features/create_community.feature
| @@ -51,8 +51,8 @@ Feature: create community | @@ -51,8 +51,8 @@ Feature: create community | ||
| 51 | And I go to the Control panel | 51 | And I go to the Control panel |
| 52 | And I follow "Process requests" | 52 | And I follow "Process requests" |
| 53 | And I should see "admin_user wants to create community Community for approval" | 53 | And I should see "admin_user wants to create community Community for approval" |
| 54 | - And I choose "Approve" | ||
| 55 | - When I press "Ok!" | 54 | + And I choose "Accept" |
| 55 | + When I press "Apply!" | ||
| 56 | Then I should not see "admin_user wants to create community Community for approval" | 56 | Then I should not see "admin_user wants to create community Community for approval" |
| 57 | When I go to the Control panel | 57 | When I go to the Control panel |
| 58 | And I follow "Manage my groups" | 58 | And I follow "Manage my groups" |
| @@ -66,7 +66,7 @@ Feature: create community | @@ -66,7 +66,7 @@ Feature: create community | ||
| 66 | And I follow "Process requests" | 66 | And I follow "Process requests" |
| 67 | And I should see "admin_user wants to create community Community for approval" | 67 | And I should see "admin_user wants to create community Community for approval" |
| 68 | And I choose "Reject" | 68 | And I choose "Reject" |
| 69 | - When I press "Ok!" | 69 | + When I press "Apply!" |
| 70 | Then I should not see "admin_user wants to create community Community for approval" | 70 | Then I should not see "admin_user wants to create community Community for approval" |
| 71 | When I go to the Control panel | 71 | When I go to the Control panel |
| 72 | And I follow "Manage my groups" | 72 | And I follow "Manage my groups" |
| @@ -89,12 +89,3 @@ Feature: create community | @@ -89,12 +89,3 @@ Feature: create community | ||
| 89 | When I go to the Control panel | 89 | When I go to the Control panel |
| 90 | And I follow "Manage my groups" | 90 | And I follow "Manage my groups" |
| 91 | Then I should not see "Community for approval" | 91 | Then I should not see "Community for approval" |
| 92 | - | ||
| 93 | - Scenario: environment admin accepts new community task but identifier was already taken | ||
| 94 | - Given I am logged in as admin | ||
| 95 | - And feature "admin_must_approve_new_communities" is enabled on environment | ||
| 96 | - And I create community "Community for approval" | ||
| 97 | - And I create community "Community for approval" | ||
| 98 | - When I approve community "Community for approval" | ||
| 99 | - Then I should see "This name was already taken, this community cannot be approved" | ||
| 100 | - And I should see "admin_user wants to create community Community for approval" |
features/invitation.feature
| @@ -93,7 +93,7 @@ Feature: invitation | @@ -93,7 +93,7 @@ Feature: invitation | ||
| 93 | Given there are no pending jobs | 93 | Given there are no pending jobs |
| 94 | When I am logged in as "josesantos" | 94 | When I am logged in as "josesantos" |
| 95 | And I go to the Control panel | 95 | And I go to the Control panel |
| 96 | - And I should see "josesilva invited you to join the community 26 Bsslines" | 96 | + And I should see "josesilva invited you to join 26 Bsslines." |
| 97 | 97 | ||
| 98 | Scenario: noosfero user accepts to join community | 98 | Scenario: noosfero user accepts to join community |
| 99 | Given I invite email "santos@invalid.br" to join community "26 Bsslines" | 99 | Given I invite email "santos@invalid.br" to join community "26 Bsslines" |
| @@ -101,10 +101,10 @@ Feature: invitation | @@ -101,10 +101,10 @@ Feature: invitation | ||
| 101 | When I am logged in as "josesantos" | 101 | When I am logged in as "josesantos" |
| 102 | And I go to the Control panel | 102 | And I go to the Control panel |
| 103 | And I follow "Process requests" | 103 | And I follow "Process requests" |
| 104 | - And I should see "josesilva invited you to join the community 26 Bsslines" | 104 | + And I should see "josesilva invited you to join 26 Bsslines." |
| 105 | And I choose "Accept" | 105 | And I choose "Accept" |
| 106 | - When I press "Ok!" | ||
| 107 | - Then I should not see "josesilva invited you to join the community 26 Bsslines" | 106 | + When I press "Apply!" |
| 107 | + Then I should not see "josesilva invited you to join 26 Bsslines." | ||
| 108 | When I go to the Control panel | 108 | When I go to the Control panel |
| 109 | And I follow "Manage my groups" | 109 | And I follow "Manage my groups" |
| 110 | Then I should see "26 Bsslines" | 110 | Then I should see "26 Bsslines" |
| @@ -115,10 +115,10 @@ Feature: invitation | @@ -115,10 +115,10 @@ Feature: invitation | ||
| 115 | When I am logged in as "josesantos" | 115 | When I am logged in as "josesantos" |
| 116 | And I go to the Control panel | 116 | And I go to the Control panel |
| 117 | And I follow "Process requests" | 117 | And I follow "Process requests" |
| 118 | - And I should see "josesilva invited you to join the community 26 Bsslines" | 118 | + And I should see "josesilva invited you to join 26 Bsslines." |
| 119 | And I choose "Reject" | 119 | And I choose "Reject" |
| 120 | - When I press "Ok!" | ||
| 121 | - Then I should not see "josesilva invited you to join the community 26 Bsslines" | 120 | + When I press "Apply!" |
| 121 | + Then I should not see "josesilva invited you to join 26 Bsslines." | ||
| 122 | When I go to the Control panel | 122 | When I go to the Control panel |
| 123 | And I follow "Manage my groups" | 123 | And I follow "Manage my groups" |
| 124 | Then I should not see "26 Bsslines" | 124 | Then I should not see "26 Bsslines" |
| @@ -135,7 +135,7 @@ Feature: invitation | @@ -135,7 +135,7 @@ Feature: invitation | ||
| 135 | When I am logged in as "josesantos" | 135 | When I am logged in as "josesantos" |
| 136 | And I go to the Control panel | 136 | And I go to the Control panel |
| 137 | And I follow "Process requests" | 137 | And I follow "Process requests" |
| 138 | - And I should see "josesilva wants to be your friend." | 138 | + Then I should see "josesilva wants to be your friend." |
| 139 | 139 | ||
| 140 | Scenario: noosfero user accepts to be friend | 140 | Scenario: noosfero user accepts to be friend |
| 141 | Given I invite email "santos@invalid.br" to be my friend | 141 | Given I invite email "santos@invalid.br" to be my friend |
| @@ -145,7 +145,7 @@ Feature: invitation | @@ -145,7 +145,7 @@ Feature: invitation | ||
| 145 | And I follow "Process requests" | 145 | And I follow "Process requests" |
| 146 | And I should see "josesilva wants to be your friend." | 146 | And I should see "josesilva wants to be your friend." |
| 147 | And I choose "Accept" | 147 | And I choose "Accept" |
| 148 | - When I press "Ok!" | 148 | + When I press "Apply!" |
| 149 | And I should not see "josesilva wants to be your friend." | 149 | And I should not see "josesilva wants to be your friend." |
| 150 | When I go to the Control panel | 150 | When I go to the Control panel |
| 151 | And I follow "Manage friends" | 151 | And I follow "Manage friends" |
| @@ -158,8 +158,8 @@ Feature: invitation | @@ -158,8 +158,8 @@ Feature: invitation | ||
| 158 | And I go to the Control panel | 158 | And I go to the Control panel |
| 159 | And I follow "Process requests" | 159 | And I follow "Process requests" |
| 160 | And I should see "josesilva wants to be your friend." | 160 | And I should see "josesilva wants to be your friend." |
| 161 | - And I choose "Ignore" | ||
| 162 | - When I press "Ok!" | 161 | + And I choose "Reject" |
| 162 | + When I press "Apply!" | ||
| 163 | And I should not see "josesilva wants to be your friend." | 163 | And I should not see "josesilva wants to be your friend." |
| 164 | When I go to the Control panel | 164 | When I go to the Control panel |
| 165 | And I follow "Manage friends" | 165 | And I follow "Manage friends" |
features/publish_article.feature
| @@ -95,6 +95,33 @@ Feature: publish article | @@ -95,6 +95,33 @@ Feature: publish article | ||
| 95 | When I go to Another Community2's sitemap | 95 | When I go to Another Community2's sitemap |
| 96 | Then I should see "Sample Article" | 96 | Then I should see "Sample Article" |
| 97 | 97 | ||
| 98 | + Scenario: publishing articles with the same name in a moderated community | ||
| 99 | + Given I am logged in as "joaosilva" | ||
| 100 | + And "Joao Silva" is a member of "Sample Community" | ||
| 101 | + And "Joao Silva" is admin of "Sample Community" | ||
| 102 | + And I am on Sample Community's control panel | ||
| 103 | + And I follow "Community Info and settings" | ||
| 104 | + And I choose "profile_data_moderated_articles_true" | ||
| 105 | + And I press "Save" | ||
| 106 | + And I am on Joao Silva's control panel | ||
| 107 | + And I follow "Manage Content" | ||
| 108 | + And I follow "Spread" | ||
| 109 | + And I check "Sample Community" | ||
| 110 | + And I press "Spread this" | ||
| 111 | + And I am on Joao Silva's control panel | ||
| 112 | + And I follow "Manage Content" | ||
| 113 | + And I follow "Spread" | ||
| 114 | + And I check "Sample Community" | ||
| 115 | + And I press "Spread this" | ||
| 116 | + And I am on Sample Community's control panel | ||
| 117 | + And I follow "Tasks" | ||
| 118 | + And I choose "Accept" | ||
| 119 | + And I press "Apply!" | ||
| 120 | + And I should not see "The title (article name) is already being used by another article, please use another title." | ||
| 121 | + And I choose "Accept" | ||
| 122 | + When I press "Apply!" | ||
| 123 | + Then I should see "The title (article name) is already being used by another article, please use another title." | ||
| 124 | + | ||
| 98 | Scenario: ask to publish an article that was deleted before approval | 125 | Scenario: ask to publish an article that was deleted before approval |
| 99 | Given I am logged in as "joaosilva" | 126 | Given I am logged in as "joaosilva" |
| 100 | And "Joao Silva" is admin of "Sample Community" | 127 | And "Joao Silva" is admin of "Sample Community" |
| @@ -110,6 +137,6 @@ Feature: publish article | @@ -110,6 +137,6 @@ Feature: publish article | ||
| 110 | And "joaosilva" has no articles | 137 | And "joaosilva" has no articles |
| 111 | And I am on Sample Community's control panel | 138 | And I am on Sample Community's control panel |
| 112 | When I follow "Tasks" | 139 | When I follow "Tasks" |
| 113 | - Then I should see /Joao Silva wanted.*deleted/ | ||
| 114 | - And I press "Ok!" | ||
| 115 | - Then I should not see /Joao Silva wanted.*deleted/ | 140 | + Then I should see "The article was removed." |
| 141 | + And I press "Apply!" | ||
| 142 | + Then I should not see "The article was removed." |
features/register_enterprise.feature
| @@ -94,9 +94,10 @@ Feature: register enterprise | @@ -94,9 +94,10 @@ Feature: register enterprise | ||
| 94 | And I am logged in as admin | 94 | And I am logged in as admin |
| 95 | And I go to the Control panel | 95 | And I go to the Control panel |
| 96 | When I follow "Tasks" | 96 | When I follow "Tasks" |
| 97 | - Then I should see /Processing task: Enterprise registration: "My Enterprise"/ | 97 | + Then I should see "Joao Silva wants to create enterprise My Enterprise." |
| 98 | And the first mail is to admin_user@example.com | 98 | And the first mail is to admin_user@example.com |
| 99 | - And I press "Ok" | 99 | + And I choose "Accept" |
| 100 | + And I press "Apply!" | ||
| 100 | Then the last mail is to joaosilva@example.com | 101 | Then the last mail is to joaosilva@example.com |
| 101 | And I am logged in as "joaosilva" | 102 | And I am logged in as "joaosilva" |
| 102 | And I am on Joao Silva's control panel | 103 | And I am on Joao Silva's control panel |
| @@ -120,11 +121,11 @@ Feature: register enterprise | @@ -120,11 +121,11 @@ Feature: register enterprise | ||
| 120 | And I am logged in as admin | 121 | And I am logged in as admin |
| 121 | And I go to the Control panel | 122 | And I go to the Control panel |
| 122 | When I follow "Tasks" | 123 | When I follow "Tasks" |
| 123 | - Then I should see /Processing task: Enterprise registration: "My Enterprise"/ | 124 | + Then I should see "Joao Silva wants to create enterprise My Enterprise." |
| 124 | And the first mail is to admin_user@example.com | 125 | And the first mail is to admin_user@example.com |
| 125 | - And I choose "Cancel" | 126 | + And I choose "Reject" |
| 126 | And I fill in "Rejection explanation" with "This enterprise has some irregularities." | 127 | And I fill in "Rejection explanation" with "This enterprise has some irregularities." |
| 127 | - When I press "Ok" | 128 | + And I press "Apply!" |
| 128 | Then the last mail is to joaosilva@example.com | 129 | Then the last mail is to joaosilva@example.com |
| 129 | And I am logged in as "joaosilva" | 130 | And I am logged in as "joaosilva" |
| 130 | And I am on Joao Silva's control panel | 131 | And I am on Joao Silva's control panel |
| @@ -157,9 +158,9 @@ Feature: register enterprise | @@ -157,9 +158,9 @@ Feature: register enterprise | ||
| 157 | Then I should see "Enterprise registration completed" | 158 | Then I should see "Enterprise registration completed" |
| 158 | And I am on Validator's control panel | 159 | And I am on Validator's control panel |
| 159 | When I follow "Tasks" | 160 | When I follow "Tasks" |
| 160 | - Then I should see /Processing task: Enterprise registration: "My Enterprise"/ | ||
| 161 | - And I choose "Ok" | ||
| 162 | - And I press "Ok" | 161 | + Then I should see "Joao Silva wants to create enterprise My Enterprise." |
| 162 | + And I choose "Accept" | ||
| 163 | + And I press "Apply!" | ||
| 163 | And I am on Joao Silva's control panel | 164 | And I am on Joao Silva's control panel |
| 164 | When I follow "Manage my groups" | 165 | When I follow "Manage my groups" |
| 165 | Then I should see "My Enterprise" | 166 | Then I should see "My Enterprise" |
| @@ -190,10 +191,10 @@ Feature: register enterprise | @@ -190,10 +191,10 @@ Feature: register enterprise | ||
| 190 | Then I should see "Enterprise registration completed" | 191 | Then I should see "Enterprise registration completed" |
| 191 | And I am on Validator's control panel | 192 | And I am on Validator's control panel |
| 192 | When I follow "Tasks" | 193 | When I follow "Tasks" |
| 193 | - Then I should see /Processing task: Enterprise registration: "My Enterprise"/ | ||
| 194 | - And I choose "Cancel" | 194 | + Then I should see "Joao Silva wants to create enterprise My Enterprise." |
| 195 | + And I choose "Reject" | ||
| 195 | And I fill in "Rejection explanation" with "This enterprise has some irregularities." | 196 | And I fill in "Rejection explanation" with "This enterprise has some irregularities." |
| 196 | - And I press "Ok" | 197 | + And I press "Apply" |
| 197 | And I am on Joao Silva's control panel | 198 | And I am on Joao Silva's control panel |
| 198 | When I follow "Manage my groups" | 199 | When I follow "Manage my groups" |
| 199 | Then I should not see "My Enterprise" | 200 | Then I should not see "My Enterprise" |
features/step_definitions/create_community_steps.rb
| @@ -11,7 +11,7 @@ Given /^I approve community "(.+)"$/ do |community| | @@ -11,7 +11,7 @@ Given /^I approve community "(.+)"$/ do |community| | ||
| 11 | Given 'I go to the Control panel' | 11 | Given 'I go to the Control panel' |
| 12 | click_link('Process requests') | 12 | click_link('Process requests') |
| 13 | choose("decision-finish-#{task.id}") | 13 | choose("decision-finish-#{task.id}") |
| 14 | - click_button('OK!') | 14 | + click_button('Apply!') |
| 15 | end | 15 | end |
| 16 | 16 | ||
| 17 | Given /^I reject community "(.+)"$/ do |community| | 17 | Given /^I reject community "(.+)"$/ do |community| |
| @@ -19,5 +19,5 @@ Given /^I reject community "(.+)"$/ do |community| | @@ -19,5 +19,5 @@ Given /^I reject community "(.+)"$/ do |community| | ||
| 19 | Given 'I go to the Control panel' | 19 | Given 'I go to the Control panel' |
| 20 | click_link('Process requests') | 20 | click_link('Process requests') |
| 21 | choose("decision-cancel-#{task.id}") | 21 | choose("decision-cancel-#{task.id}") |
| 22 | - click_button('OK!') | 22 | + click_button('Apply!') |
| 23 | end | 23 | end |
3 KB
2.69 KB
4.85 KB
216 Bytes
204 Bytes
189 Bytes
199 Bytes
| @@ -0,0 +1,788 @@ | @@ -0,0 +1,788 @@ | ||
| 1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | +<!-- Created with Inkscape (http://www.inkscape.org/) --> | ||
| 3 | + | ||
| 4 | +<svg | ||
| 5 | + xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 6 | + xmlns:cc="http://creativecommons.org/ns#" | ||
| 7 | + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 8 | + xmlns:svg="http://www.w3.org/2000/svg" | ||
| 9 | + xmlns="http://www.w3.org/2000/svg" | ||
| 10 | + xmlns:xlink="http://www.w3.org/1999/xlink" | ||
| 11 | + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 12 | + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 13 | + inkscape:export-ydpi="900" | ||
| 14 | + inkscape:export-xdpi="900" | ||
| 15 | + inkscape:export-filename="article.png" | ||
| 16 | + sodipodi:docname="article-icon.svg" | ||
| 17 | + inkscape:version="0.47pre4 r22446" | ||
| 18 | + sodipodi:version="0.32" | ||
| 19 | + id="svg249" | ||
| 20 | + height="50" | ||
| 21 | + width="50" | ||
| 22 | + inkscape:output_extension="org.inkscape.output.svg.inkscape" | ||
| 23 | + version="1.1"> | ||
| 24 | + <defs | ||
| 25 | + id="defs3"> | ||
| 26 | + <linearGradient | ||
| 27 | + inkscape:collect="always" | ||
| 28 | + id="linearGradient4248"> | ||
| 29 | + <stop | ||
| 30 | + style="stop-color:#ffcc00;stop-opacity:1" | ||
| 31 | + offset="0" | ||
| 32 | + id="stop4250" /> | ||
| 33 | + <stop | ||
| 34 | + style="stop-color:#d40000;stop-opacity:1" | ||
| 35 | + offset="1" | ||
| 36 | + id="stop4252" /> | ||
| 37 | + </linearGradient> | ||
| 38 | + <inkscape:perspective | ||
| 39 | + sodipodi:type="inkscape:persp3d" | ||
| 40 | + inkscape:vp_x="0 : 24 : 1" | ||
| 41 | + inkscape:vp_y="0 : 1000 : 0" | ||
| 42 | + inkscape:vp_z="48 : 24 : 1" | ||
| 43 | + inkscape:persp3d-origin="24 : 16 : 1" | ||
| 44 | + id="perspective91" /> | ||
| 45 | + <radialGradient | ||
| 46 | + inkscape:collect="always" | ||
| 47 | + xlink:href="#linearGradient5060" | ||
| 48 | + id="radialGradient6719" | ||
| 49 | + gradientUnits="userSpaceOnUse" | ||
| 50 | + gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" | ||
| 51 | + cx="605.71429" | ||
| 52 | + cy="486.64789" | ||
| 53 | + fx="605.71429" | ||
| 54 | + fy="486.64789" | ||
| 55 | + r="117.14286" /> | ||
| 56 | + <linearGradient | ||
| 57 | + inkscape:collect="always" | ||
| 58 | + id="linearGradient5060"> | ||
| 59 | + <stop | ||
| 60 | + style="stop-color:black;stop-opacity:1;" | ||
| 61 | + offset="0" | ||
| 62 | + id="stop5062" /> | ||
| 63 | + <stop | ||
| 64 | + style="stop-color:black;stop-opacity:0;" | ||
| 65 | + offset="1" | ||
| 66 | + id="stop5064" /> | ||
| 67 | + </linearGradient> | ||
| 68 | + <radialGradient | ||
| 69 | + inkscape:collect="always" | ||
| 70 | + xlink:href="#linearGradient5060" | ||
| 71 | + id="radialGradient6717" | ||
| 72 | + gradientUnits="userSpaceOnUse" | ||
| 73 | + gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" | ||
| 74 | + cx="605.71429" | ||
| 75 | + cy="486.64789" | ||
| 76 | + fx="605.71429" | ||
| 77 | + fy="486.64789" | ||
| 78 | + r="117.14286" /> | ||
| 79 | + <linearGradient | ||
| 80 | + id="linearGradient5048"> | ||
| 81 | + <stop | ||
| 82 | + style="stop-color:black;stop-opacity:0;" | ||
| 83 | + offset="0" | ||
| 84 | + id="stop5050" /> | ||
| 85 | + <stop | ||
| 86 | + id="stop5056" | ||
| 87 | + offset="0.5" | ||
| 88 | + style="stop-color:black;stop-opacity:1;" /> | ||
| 89 | + <stop | ||
| 90 | + style="stop-color:black;stop-opacity:0;" | ||
| 91 | + offset="1" | ||
| 92 | + id="stop5052" /> | ||
| 93 | + </linearGradient> | ||
| 94 | + <linearGradient | ||
| 95 | + inkscape:collect="always" | ||
| 96 | + xlink:href="#linearGradient5048" | ||
| 97 | + id="linearGradient6715" | ||
| 98 | + gradientUnits="userSpaceOnUse" | ||
| 99 | + gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" | ||
| 100 | + x1="302.85715" | ||
| 101 | + y1="366.64789" | ||
| 102 | + x2="302.85715" | ||
| 103 | + y2="609.50507" /> | ||
| 104 | + <linearGradient | ||
| 105 | + id="linearGradient7648" | ||
| 106 | + gradientUnits="userSpaceOnUse" | ||
| 107 | + x1="21.9326" | ||
| 108 | + y1="24.627399" | ||
| 109 | + x2="21.9326" | ||
| 110 | + y2="7.1090999"> | ||
| 111 | + <stop | ||
| 112 | + offset="0" | ||
| 113 | + style="stop-color:#8595bc;stop-opacity:1;" | ||
| 114 | + id="stop7650" /> | ||
| 115 | + <stop | ||
| 116 | + offset="1" | ||
| 117 | + style="stop-color:#041a3b;stop-opacity:1;" | ||
| 118 | + id="stop7652" /> | ||
| 119 | + </linearGradient> | ||
| 120 | + <linearGradient | ||
| 121 | + inkscape:collect="always" | ||
| 122 | + id="linearGradient4542"> | ||
| 123 | + <stop | ||
| 124 | + style="stop-color:#000000;stop-opacity:1;" | ||
| 125 | + offset="0" | ||
| 126 | + id="stop4544" /> | ||
| 127 | + <stop | ||
| 128 | + style="stop-color:#000000;stop-opacity:0;" | ||
| 129 | + offset="1" | ||
| 130 | + id="stop4546" /> | ||
| 131 | + </linearGradient> | ||
| 132 | + <linearGradient | ||
| 133 | + id="linearGradient15662"> | ||
| 134 | + <stop | ||
| 135 | + id="stop15664" | ||
| 136 | + offset="0.0000000" | ||
| 137 | + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> | ||
| 138 | + <stop | ||
| 139 | + id="stop15666" | ||
| 140 | + offset="1.0000000" | ||
| 141 | + style="stop-color:#f8f8f8;stop-opacity:1.0000000;" /> | ||
| 142 | + </linearGradient> | ||
| 143 | + <radialGradient | ||
| 144 | + id="aigrd3" | ||
| 145 | + cx="20.892099" | ||
| 146 | + cy="64.567902" | ||
| 147 | + r="5.257" | ||
| 148 | + fx="20.892099" | ||
| 149 | + fy="64.567902" | ||
| 150 | + gradientUnits="userSpaceOnUse"> | ||
| 151 | + <stop | ||
| 152 | + offset="0" | ||
| 153 | + style="stop-color:#F0F0F0" | ||
| 154 | + id="stop15573" /> | ||
| 155 | + <stop | ||
| 156 | + offset="1" | ||
| 157 | + style="stop-color:#515151;stop-opacity:1;" | ||
| 158 | + id="stop15575" /> | ||
| 159 | + </radialGradient> | ||
| 160 | + <radialGradient | ||
| 161 | + id="aigrd2" | ||
| 162 | + cx="20.892099" | ||
| 163 | + cy="114.5684" | ||
| 164 | + r="5.256" | ||
| 165 | + fx="20.892099" | ||
| 166 | + fy="114.5684" | ||
| 167 | + gradientUnits="userSpaceOnUse"> | ||
| 168 | + <stop | ||
| 169 | + offset="0" | ||
| 170 | + style="stop-color:#F0F0F0" | ||
| 171 | + id="stop15566" /> | ||
| 172 | + <stop | ||
| 173 | + offset="1.0000000" | ||
| 174 | + style="stop-color:#9a9a9a;stop-opacity:1.0000000;" | ||
| 175 | + id="stop15568" /> | ||
| 176 | + </radialGradient> | ||
| 177 | + <linearGradient | ||
| 178 | + id="linearGradient269"> | ||
| 179 | + <stop | ||
| 180 | + id="stop270" | ||
| 181 | + offset="0.0000000" | ||
| 182 | + style="stop-color:#a3a3a3;stop-opacity:1.0000000;" /> | ||
| 183 | + <stop | ||
| 184 | + id="stop271" | ||
| 185 | + offset="1.0000000" | ||
| 186 | + style="stop-color:#4c4c4c;stop-opacity:1.0000000;" /> | ||
| 187 | + </linearGradient> | ||
| 188 | + <linearGradient | ||
| 189 | + id="linearGradient259"> | ||
| 190 | + <stop | ||
| 191 | + id="stop260" | ||
| 192 | + offset="0.0000000" | ||
| 193 | + style="stop-color:#fafafa;stop-opacity:1.0000000;" /> | ||
| 194 | + <stop | ||
| 195 | + id="stop261" | ||
| 196 | + offset="1.0000000" | ||
| 197 | + style="stop-color:#bbbbbb;stop-opacity:1.0000000;" /> | ||
| 198 | + </linearGradient> | ||
| 199 | + <radialGradient | ||
| 200 | + inkscape:collect="always" | ||
| 201 | + xlink:href="#linearGradient269" | ||
| 202 | + id="radialGradient15656" | ||
| 203 | + gradientUnits="userSpaceOnUse" | ||
| 204 | + gradientTransform="matrix(0.9980597,0,0,1.1091725,4.1760961,-0.6958675)" | ||
| 205 | + cx="8.824419" | ||
| 206 | + cy="3.7561285" | ||
| 207 | + fx="8.824419" | ||
| 208 | + fy="3.7561285" | ||
| 209 | + r="37.751713" /> | ||
| 210 | + <radialGradient | ||
| 211 | + inkscape:collect="always" | ||
| 212 | + xlink:href="#linearGradient259" | ||
| 213 | + id="radialGradient15658" | ||
| 214 | + gradientUnits="userSpaceOnUse" | ||
| 215 | + gradientTransform="matrix(0.99004037,0,0,1.1181563,0.71937872,-1.3901395)" | ||
| 216 | + cx="33.966679" | ||
| 217 | + cy="35.736916" | ||
| 218 | + fx="33.966679" | ||
| 219 | + fy="35.736916" | ||
| 220 | + r="86.70845" /> | ||
| 221 | + <radialGradient | ||
| 222 | + inkscape:collect="always" | ||
| 223 | + xlink:href="#linearGradient15662" | ||
| 224 | + id="radialGradient15668" | ||
| 225 | + gradientUnits="userSpaceOnUse" | ||
| 226 | + gradientTransform="matrix(1.0027787,0,0,1.1122543,4.0618664,-0.7125018)" | ||
| 227 | + cx="8.1435566" | ||
| 228 | + cy="7.2678967" | ||
| 229 | + fx="8.1435566" | ||
| 230 | + fy="7.2678967" | ||
| 231 | + r="38.158695" /> | ||
| 232 | + <radialGradient | ||
| 233 | + inkscape:collect="always" | ||
| 234 | + xlink:href="#linearGradient4542" | ||
| 235 | + id="radialGradient4548" | ||
| 236 | + cx="24.306795" | ||
| 237 | + cy="42.07798" | ||
| 238 | + fx="24.306795" | ||
| 239 | + fy="42.07798" | ||
| 240 | + r="15.821514" | ||
| 241 | + gradientTransform="matrix(1,0,0,0.284916,0,30.08928)" | ||
| 242 | + gradientUnits="userSpaceOnUse" /> | ||
| 243 | + <inkscape:perspective | ||
| 244 | + id="perspective3216" | ||
| 245 | + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | ||
| 246 | + inkscape:vp_z="1 : 0.5 : 1" | ||
| 247 | + inkscape:vp_y="0 : 1000 : 0" | ||
| 248 | + inkscape:vp_x="0 : 0.5 : 1" | ||
| 249 | + sodipodi:type="inkscape:persp3d" /> | ||
| 250 | + <radialGradient | ||
| 251 | + r="28.622223" | ||
| 252 | + fy="21.208994" | ||
| 253 | + fx="25.103651" | ||
| 254 | + cy="25.913044" | ||
| 255 | + cx="28.347824" | ||
| 256 | + gradientTransform="translate(2.0080471e-6,0)" | ||
| 257 | + gradientUnits="userSpaceOnUse" | ||
| 258 | + id="radialGradient3909" | ||
| 259 | + xlink:href="#linearGradient3942" | ||
| 260 | + inkscape:collect="always" /> | ||
| 261 | + <linearGradient | ||
| 262 | + id="linearGradient3942"> | ||
| 263 | + <stop | ||
| 264 | + id="stop3944" | ||
| 265 | + offset="0" | ||
| 266 | + style="stop-color:#f57900;stop-opacity:0;" /> | ||
| 267 | + <stop | ||
| 268 | + id="stop3946" | ||
| 269 | + offset="1" | ||
| 270 | + style="stop-color:#cc0000;stop-opacity:1" /> | ||
| 271 | + </linearGradient> | ||
| 272 | + <mask | ||
| 273 | + maskUnits="userSpaceOnUse" | ||
| 274 | + id="mask3951"> | ||
| 275 | + <rect | ||
| 276 | + style="color:#000000;fill:url(#linearGradient3955);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | ||
| 277 | + id="rect3953" | ||
| 278 | + width="60.666664" | ||
| 279 | + height="60.666664" | ||
| 280 | + x="1.6666656" | ||
| 281 | + y="1.6666654" /> | ||
| 282 | + </mask> | ||
| 283 | + <linearGradient | ||
| 284 | + inkscape:collect="always" | ||
| 285 | + xlink:href="#linearGradient3795-2" | ||
| 286 | + id="linearGradient3955" | ||
| 287 | + gradientUnits="userSpaceOnUse" | ||
| 288 | + gradientTransform="matrix(4.6666665,0,0,4.6666665,-10.000001,-28.666667)" | ||
| 289 | + x1="9.500001" | ||
| 290 | + y1="8.5" | ||
| 291 | + x2="9.5" | ||
| 292 | + y2="12.5" /> | ||
| 293 | + <linearGradient | ||
| 294 | + inkscape:collect="always" | ||
| 295 | + id="linearGradient3795-2"> | ||
| 296 | + <stop | ||
| 297 | + style="stop-color:#000000;stop-opacity:1" | ||
| 298 | + offset="0" | ||
| 299 | + id="stop3797-1" /> | ||
| 300 | + <stop | ||
| 301 | + style="stop-color:#ffffff;stop-opacity:1" | ||
| 302 | + offset="1" | ||
| 303 | + id="stop3799-3" /> | ||
| 304 | + </linearGradient> | ||
| 305 | + <clipPath | ||
| 306 | + clipPathUnits="userSpaceOnUse" | ||
| 307 | + id="clipPath3975"> | ||
| 308 | + <path | ||
| 309 | + sodipodi:nodetypes="cssscccsc" | ||
| 310 | + id="path3977" | ||
| 311 | + d="M 60,32 C 60,47.456 47.456,60 32,60 16.544,60 4,47.456 4,32 4,24.272 7.136,17.272 12.204,12.204 c 5.068,-5.068 13.334459,-23.280923 21.949843,-29.742461 -1.025992,6.66895 0,14.2153844 4.307693,18.52307669 0,0 0,-8.61538459 4.307692,-12.92307669 C 47.07692,0.98461569 50.523074,8.3076924 52.67692,12.172942 55.418861,17.093574 59.999999,22.388434 60,32 z" | ||
| 312 | + style="opacity:0.6;color:#000000;fill:#73d216;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.30769205;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | ||
| 313 | + </clipPath> | ||
| 314 | + <filter | ||
| 315 | + color-interpolation-filters="sRGB" | ||
| 316 | + inkscape:collect="always" | ||
| 317 | + id="filter3963" | ||
| 318 | + x="-0.28615385" | ||
| 319 | + width="1.5723077" | ||
| 320 | + y="-0.20666666" | ||
| 321 | + height="1.4133333"> | ||
| 322 | + <feGaussianBlur | ||
| 323 | + inkscape:collect="always" | ||
| 324 | + stdDeviation="6.676923" | ||
| 325 | + id="feGaussianBlur3965" /> | ||
| 326 | + </filter> | ||
| 327 | + <clipPath | ||
| 328 | + clipPathUnits="userSpaceOnUse" | ||
| 329 | + id="clipPath3878"> | ||
| 330 | + <path | ||
| 331 | + sodipodi:nodetypes="csssssssc" | ||
| 332 | + id="path3880" | ||
| 333 | + d="m 27.200893,15.993392 c 0,6.150858 -4.991999,11.142858 -11.142856,11.142858 -6.150858,0 -11.142858,-4.992 -11.142858,-11.142858 0,-2.185214 1.714285,-5.954659 1.714285,-7.7142849 0,-8.57142868 5.832926,-12.0000001 10.285715,-12.0000001 1.714286,0 2.493799,1.946371 1.714286,3.42857146 -0.661208,1.25725054 -3.428572,1.71428574 -1.714286,3.42857144 1.212183,1.2121831 6.215414,4.1736984 7.020858,4.9791428 2.016856,2.0168573 3.264856,4.8025713 3.264856,7.8779993 z" | ||
| 334 | + style="color:#000000;fill:#cc0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.71428561;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | ||
| 335 | + </clipPath> | ||
| 336 | + <filter | ||
| 337 | + color-interpolation-filters="sRGB" | ||
| 338 | + inkscape:collect="always" | ||
| 339 | + id="filter3870" | ||
| 340 | + x="-0.29058462" | ||
| 341 | + width="1.5811692" | ||
| 342 | + y="-0.20441557" | ||
| 343 | + height="1.4088312"> | ||
| 344 | + <feGaussianBlur | ||
| 345 | + inkscape:collect="always" | ||
| 346 | + stdDeviation="2.459375" | ||
| 347 | + id="feGaussianBlur3872" /> | ||
| 348 | + </filter> | ||
| 349 | + <radialGradient | ||
| 350 | + inkscape:collect="always" | ||
| 351 | + xlink:href="#linearGradient3471-4" | ||
| 352 | + id="radialGradient2759-9" | ||
| 353 | + gradientUnits="userSpaceOnUse" | ||
| 354 | + gradientTransform="translate(2.0080471e-6,0)" | ||
| 355 | + cx="28.347824" | ||
| 356 | + cy="25.913044" | ||
| 357 | + fx="25.103651" | ||
| 358 | + fy="21.208994" | ||
| 359 | + r="28.622223" /> | ||
| 360 | + <linearGradient | ||
| 361 | + id="linearGradient3471-4"> | ||
| 362 | + <stop | ||
| 363 | + style="stop-color:#729fcf;stop-opacity:0;" | ||
| 364 | + offset="0" | ||
| 365 | + id="stop3473-7" /> | ||
| 366 | + <stop | ||
| 367 | + style="stop-color:#204a87;stop-opacity:1" | ||
| 368 | + offset="1" | ||
| 369 | + id="stop3475-8" /> | ||
| 370 | + </linearGradient> | ||
| 371 | + <mask | ||
| 372 | + maskUnits="userSpaceOnUse" | ||
| 373 | + id="mask3828"> | ||
| 374 | + <rect | ||
| 375 | + y="1.6666656" | ||
| 376 | + x="1.6666653" | ||
| 377 | + height="60.666664" | ||
| 378 | + width="60.666664" | ||
| 379 | + id="rect3830" | ||
| 380 | + style="color:#000000;fill:url(#linearGradient3832);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | ||
| 381 | + </mask> | ||
| 382 | + <linearGradient | ||
| 383 | + inkscape:collect="always" | ||
| 384 | + xlink:href="#linearGradient3795" | ||
| 385 | + id="linearGradient3832" | ||
| 386 | + gradientUnits="userSpaceOnUse" | ||
| 387 | + gradientTransform="matrix(4.6666666,0,0,4.6666666,-10.000001,-28.666667)" | ||
| 388 | + x1="8.5" | ||
| 389 | + y1="8.5" | ||
| 390 | + x2="9.5" | ||
| 391 | + y2="12.5" /> | ||
| 392 | + <linearGradient | ||
| 393 | + inkscape:collect="always" | ||
| 394 | + id="linearGradient3795"> | ||
| 395 | + <stop | ||
| 396 | + style="stop-color:#000000;stop-opacity:1" | ||
| 397 | + offset="0" | ||
| 398 | + id="stop3797" /> | ||
| 399 | + <stop | ||
| 400 | + style="stop-color:#ffffff;stop-opacity:1" | ||
| 401 | + offset="1" | ||
| 402 | + id="stop3799" /> | ||
| 403 | + </linearGradient> | ||
| 404 | + <radialGradient | ||
| 405 | + inkscape:collect="always" | ||
| 406 | + xlink:href="#linearGradient3471-4" | ||
| 407 | + id="radialGradient3416" | ||
| 408 | + gradientUnits="userSpaceOnUse" | ||
| 409 | + gradientTransform="translate(2.0080471e-6,0)" | ||
| 410 | + cx="28.347824" | ||
| 411 | + cy="25.913044" | ||
| 412 | + fx="25.103651" | ||
| 413 | + fy="21.208994" | ||
| 414 | + r="28.622223" /> | ||
| 415 | + <radialGradient | ||
| 416 | + inkscape:collect="always" | ||
| 417 | + xlink:href="#linearGradient3942" | ||
| 418 | + id="radialGradient3428" | ||
| 419 | + gradientUnits="userSpaceOnUse" | ||
| 420 | + gradientTransform="translate(2.0080471e-6,0)" | ||
| 421 | + cx="28.347824" | ||
| 422 | + cy="25.913044" | ||
| 423 | + fx="25.103651" | ||
| 424 | + fy="21.208994" | ||
| 425 | + r="28.622223" /> | ||
| 426 | + <radialGradient | ||
| 427 | + inkscape:collect="always" | ||
| 428 | + xlink:href="#linearGradient3942" | ||
| 429 | + id="radialGradient3442" | ||
| 430 | + gradientUnits="userSpaceOnUse" | ||
| 431 | + gradientTransform="translate(2.0080471e-6,0)" | ||
| 432 | + cx="28.347824" | ||
| 433 | + cy="25.913044" | ||
| 434 | + fx="25.103651" | ||
| 435 | + fy="21.208994" | ||
| 436 | + r="28.622223" /> | ||
| 437 | + <radialGradient | ||
| 438 | + inkscape:collect="always" | ||
| 439 | + xlink:href="#linearGradient4248" | ||
| 440 | + id="radialGradient4254" | ||
| 441 | + cx="16.000992" | ||
| 442 | + cy="11.373981" | ||
| 443 | + fx="16.000992" | ||
| 444 | + fy="11.373981" | ||
| 445 | + r="9.5902691" | ||
| 446 | + gradientTransform="matrix(1.1061205,-0.39028044,0.43577759,1.235069,-6.3491962,4.30218)" | ||
| 447 | + gradientUnits="userSpaceOnUse" /> | ||
| 448 | + </defs> | ||
| 449 | + <sodipodi:namedview | ||
| 450 | + inkscape:window-y="25" | ||
| 451 | + inkscape:window-x="0" | ||
| 452 | + inkscape:window-height="694" | ||
| 453 | + inkscape:window-width="1024" | ||
| 454 | + inkscape:document-units="px" | ||
| 455 | + inkscape:grid-bbox="true" | ||
| 456 | + showgrid="false" | ||
| 457 | + inkscape:current-layer="layer5" | ||
| 458 | + inkscape:cy="25" | ||
| 459 | + inkscape:cx="24.886621" | ||
| 460 | + inkscape:zoom="8.82" | ||
| 461 | + inkscape:pageshadow="2" | ||
| 462 | + inkscape:pageopacity="0.0" | ||
| 463 | + borderopacity="0.25490196" | ||
| 464 | + bordercolor="#666666" | ||
| 465 | + pagecolor="#ffffff" | ||
| 466 | + id="base" | ||
| 467 | + inkscape:showpageshadow="false" | ||
| 468 | + fill="#729fcf" | ||
| 469 | + inkscape:window-maximized="1" /> | ||
| 470 | + <metadata | ||
| 471 | + id="metadata4"> | ||
| 472 | + <rdf:RDF> | ||
| 473 | + <cc:Work | ||
| 474 | + rdf:about=""> | ||
| 475 | + <dc:format>image/svg+xml</dc:format> | ||
| 476 | + <dc:type | ||
| 477 | + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 478 | + <dc:title></dc:title> | ||
| 479 | + <dc:subject> | ||
| 480 | + <rdf:Bag> | ||
| 481 | + <rdf:li>rich</rdf:li> | ||
| 482 | + <rdf:li>text</rdf:li> | ||
| 483 | + <rdf:li>document</rdf:li> | ||
| 484 | + <rdf:li>pdf</rdf:li> | ||
| 485 | + <rdf:li>openoffice</rdf:li> | ||
| 486 | + <rdf:li>word</rdf:li> | ||
| 487 | + <rdf:li>rtf</rdf:li> | ||
| 488 | + </rdf:Bag> | ||
| 489 | + </dc:subject> | ||
| 490 | + <cc:license | ||
| 491 | + rdf:resource="http://creativecommons.org/licenses/publicdomain/" /> | ||
| 492 | + <dc:creator> | ||
| 493 | + <cc:Agent> | ||
| 494 | + <dc:title>Jakub Steiner</dc:title> | ||
| 495 | + </cc:Agent> | ||
| 496 | + </dc:creator> | ||
| 497 | + <dc:source>http://jimmac.musichall.cz</dc:source> | ||
| 498 | + </cc:Work> | ||
| 499 | + <cc:License | ||
| 500 | + rdf:about="http://creativecommons.org/licenses/publicdomain/"> | ||
| 501 | + <cc:permits | ||
| 502 | + rdf:resource="http://creativecommons.org/ns#Reproduction" /> | ||
| 503 | + <cc:permits | ||
| 504 | + rdf:resource="http://creativecommons.org/ns#Distribution" /> | ||
| 505 | + <cc:permits | ||
| 506 | + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> | ||
| 507 | + </cc:License> | ||
| 508 | + </rdf:RDF> | ||
| 509 | + </metadata> | ||
| 510 | + <g | ||
| 511 | + inkscape:groupmode="layer" | ||
| 512 | + id="layer6" | ||
| 513 | + inkscape:label="Shadow"> | ||
| 514 | + <g | ||
| 515 | + style="display:inline" | ||
| 516 | + transform="matrix(0.02203962,0,0,0.02086758,45.477817,43.162522)" | ||
| 517 | + id="g6707"> | ||
| 518 | + <rect | ||
| 519 | + style="opacity:0.40206185;color:#000000;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" | ||
| 520 | + id="rect6709" | ||
| 521 | + width="1339.6335" | ||
| 522 | + height="478.35718" | ||
| 523 | + x="-1559.2523" | ||
| 524 | + y="-150.69685" /> | ||
| 525 | + <path | ||
| 526 | + style="opacity:0.40206185;color:#000000;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" | ||
| 527 | + d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z" | ||
| 528 | + id="path6711" | ||
| 529 | + sodipodi:nodetypes="cccc" /> | ||
| 530 | + <path | ||
| 531 | + sodipodi:nodetypes="cccc" | ||
| 532 | + id="path6713" | ||
| 533 | + d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z" | ||
| 534 | + style="opacity:0.40206185;color:#000000;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /> | ||
| 535 | + </g> | ||
| 536 | + </g> | ||
| 537 | + <g | ||
| 538 | + style="display:inline" | ||
| 539 | + inkscape:groupmode="layer" | ||
| 540 | + inkscape:label="Base" | ||
| 541 | + id="layer1"> | ||
| 542 | + <rect | ||
| 543 | + style="color:#000000;fill:url(#radialGradient15658);fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient15656);stroke-width:1.05215013;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" | ||
| 544 | + id="rect15391" | ||
| 545 | + width="35.947849" | ||
| 546 | + height="43.947849" | ||
| 547 | + x="7.5260749" | ||
| 548 | + y="2.5260756" | ||
| 549 | + ry="1.2340567" /> | ||
| 550 | + <rect | ||
| 551 | + style="color:#000000;fill:none;stroke:url(#radialGradient15668);stroke-width:1.05609882;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" | ||
| 552 | + id="rect15660" | ||
| 553 | + width="33.943901" | ||
| 554 | + height="41.943901" | ||
| 555 | + x="8.5280485" | ||
| 556 | + y="3.528048" | ||
| 557 | + ry="0.16052011" | ||
| 558 | + rx="0.1543601" /> | ||
| 559 | + <g | ||
| 560 | + transform="translate(1.6464467,-0.0379893)" | ||
| 561 | + id="g2270"> | ||
| 562 | + <g | ||
| 563 | + id="g1440" | ||
| 564 | + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4" | ||
| 565 | + transform="matrix(0.229703,0,0,0.229703,4.967081,4.244972)"> | ||
| 566 | + <radialGradient | ||
| 567 | + id="radialGradient1442" | ||
| 568 | + cx="20.892099" | ||
| 569 | + cy="114.5684" | ||
| 570 | + r="5.256" | ||
| 571 | + fx="20.892099" | ||
| 572 | + fy="114.5684" | ||
| 573 | + gradientUnits="userSpaceOnUse"> | ||
| 574 | + <stop | ||
| 575 | + offset="0" | ||
| 576 | + style="stop-color:#F0F0F0" | ||
| 577 | + id="stop1444" /> | ||
| 578 | + <stop | ||
| 579 | + offset="1" | ||
| 580 | + style="stop-color:#474747" | ||
| 581 | + id="stop1446" /> | ||
| 582 | + </radialGradient> | ||
| 583 | + <path | ||
| 584 | + style="stroke:none" | ||
| 585 | + d="m 23.428,113.07 c 0,1.973 -1.6,3.572 -3.573,3.572 -1.974,0 -3.573,-1.6 -3.573,-3.572 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" | ||
| 586 | + id="path1448" /> | ||
| 587 | + <radialGradient | ||
| 588 | + id="radialGradient1450" | ||
| 589 | + cx="20.892099" | ||
| 590 | + cy="64.567902" | ||
| 591 | + r="5.257" | ||
| 592 | + fx="20.892099" | ||
| 593 | + fy="64.567902" | ||
| 594 | + gradientUnits="userSpaceOnUse"> | ||
| 595 | + <stop | ||
| 596 | + offset="0" | ||
| 597 | + style="stop-color:#F0F0F0" | ||
| 598 | + id="stop1452" /> | ||
| 599 | + <stop | ||
| 600 | + offset="1" | ||
| 601 | + style="stop-color:#474747" | ||
| 602 | + id="stop1454" /> | ||
| 603 | + </radialGradient> | ||
| 604 | + <path | ||
| 605 | + style="stroke:none" | ||
| 606 | + d="m 23.428,63.07 c 0,1.973 -1.6,3.573 -3.573,3.573 -1.974,0 -3.573,-1.6 -3.573,-3.573 0,-1.974 1.6,-3.573 3.573,-3.573 1.973,0 3.573,1.6 3.573,3.573 z" | ||
| 607 | + id="path1456" /> | ||
| 608 | + </g> | ||
| 609 | + <path | ||
| 610 | + style="fill:#4d4d4d;fill-rule:nonzero;stroke:none" | ||
| 611 | + d="m 9.9950109,29.952326 c 0,0.453204 -0.3675248,0.820499 -0.8207288,0.820499 -0.4534338,0 -0.8207289,-0.367524 -0.8207289,-0.820499 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" | ||
| 612 | + id="path15570" /> | ||
| 613 | + <path | ||
| 614 | + style="fill:#4d4d4d;fill-rule:nonzero;stroke:none" | ||
| 615 | + d="m 9.9950109,18.467176 c 0,0.453204 -0.3675248,0.820729 -0.8207288,0.820729 -0.4534338,0 -0.8207289,-0.367525 -0.8207289,-0.820729 0,-0.453434 0.3675248,-0.820729 0.8207289,-0.820729 0.453204,0 0.8207288,0.367525 0.8207288,0.820729 z" | ||
| 616 | + id="path15577" /> | ||
| 617 | + </g> | ||
| 618 | + <path | ||
| 619 | + style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1.01333487;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" | ||
| 620 | + d="m 12.506667,4.0973012 0,40.8551318" | ||
| 621 | + id="path15672" | ||
| 622 | + sodipodi:nodetypes="cc" /> | ||
| 623 | + <path | ||
| 624 | + style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1.02506876;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" | ||
| 625 | + d="m 13.512534,4.0125702 0,40.9748958" | ||
| 626 | + id="path15674" | ||
| 627 | + sodipodi:nodetypes="cc" /> | ||
| 628 | + </g> | ||
| 629 | + <g | ||
| 630 | + inkscape:groupmode="layer" | ||
| 631 | + id="layer5" | ||
| 632 | + inkscape:label="Text" | ||
| 633 | + style="display:inline"> | ||
| 634 | + <rect | ||
| 635 | + ry="0.065390877" | ||
| 636 | + rx="0.096450485" | ||
| 637 | + y="41" | ||
| 638 | + x="17" | ||
| 639 | + height="1" | ||
| 640 | + width="14.000014" | ||
| 641 | + id="rect15744" | ||
| 642 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> | ||
| 643 | + <rect | ||
| 644 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" | ||
| 645 | + id="rect1768" | ||
| 646 | + width="20.000006" | ||
| 647 | + height="1" | ||
| 648 | + x="17" | ||
| 649 | + y="11.000006" | ||
| 650 | + rx="0.13778631" | ||
| 651 | + ry="0.065390877" /> | ||
| 652 | + <g | ||
| 653 | + transform="matrix(0.58333333,0,0,0.58333333,23.082298,18.666667)" | ||
| 654 | + id="g2782"> | ||
| 655 | + <path | ||
| 656 | + sodipodi:nodetypes="cscccss" | ||
| 657 | + id="path3991" | ||
| 658 | + d="M 16.186589,21.142857 C 10.932592,21.442092 5.8719316,14.98028 8.1220005,8.1219995 9.0674911,5.2401146 13.42857,-1.1428578 16.857142,-3.7142862 c -0.408303,2.6539699 0,5.6571428 1.714286,7.3714286 0,0 0,-3.42857151 1.714285,-5.1428572 1.714286,5.1428572 3.271486,7.9716527 3.942857,9.5953544 2.058215,4.9777654 0.483956,12.5476324 -8.041981,13.0332174 z" | ||
| 659 | + style="color:#000000;fill:url(#radialGradient4254);fill-opacity:1;stroke:#a40000;stroke-width:1.71428561;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | ||
| 660 | + <path | ||
| 661 | + sodipodi:type="inkscape:offset" | ||
| 662 | + inkscape:radius="-1.5" | ||
| 663 | + inkscape:original="M 16.84375 -3.71875 C 13.415178 -1.1473216 9.0704906 5.2431151 8.125 8.125 C 5.8749311 14.983281 10.933503 21.455485 16.1875 21.15625 C 24.713437 20.670665 26.276965 13.102765 24.21875 8.125 C 23.547379 6.5012983 21.995536 3.6428572 20.28125 -1.5 C 18.566965 0.21428569 18.5625 3.65625 18.5625 3.65625 C 16.848214 1.9419642 16.435447 -1.0647801 16.84375 -3.71875 z " | ||
| 664 | + xlink:href="#path3991" | ||
| 665 | + style="opacity:0.5;color:#000000;fill:none;stroke:#fcaf3e;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:9;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | ||
| 666 | + id="path3997" | ||
| 667 | + inkscape:href="#path3991" | ||
| 668 | + d="m 15.40625,-0.3125 c -0.903867,0.99041796 -1.796184,2.124373 -2.625,3.28125 -1.575827,2.1995678 -2.8557776,4.5186488 -3.21875,5.625 -1.9553465,5.959958 2.557716,11.288808 6.53125,11.0625 3.8265,-0.217934 5.732916,-1.852251 6.71875,-3.96875 0.985834,-2.116499 0.906542,-4.883117 0.03125,-7 -0.430922,-1.0421792 -1.493333,-3.2862791 -2.65625,-6.21875 -0.07263,0.5661553 -0.125,1.1875 -0.125,1.1875 A 1.50015,1.50015 0 0 1 17.5,4.71875 C 16.13821,3.3569603 15.617625,1.5548002 15.40625,-0.3125 z" /> | ||
| 669 | + </g> | ||
| 670 | + <rect | ||
| 671 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" | ||
| 672 | + id="rect3450" | ||
| 673 | + width="9.1020555" | ||
| 674 | + height="1" | ||
| 675 | + x="17" | ||
| 676 | + y="22.538467" | ||
| 677 | + rx="0.06270691" | ||
| 678 | + ry="0.065390877" /> | ||
| 679 | + <rect | ||
| 680 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" | ||
| 681 | + id="rect3464" | ||
| 682 | + width="20.000006" | ||
| 683 | + height="1" | ||
| 684 | + x="17" | ||
| 685 | + y="38.692307" | ||
| 686 | + rx="0.13778631" | ||
| 687 | + ry="0.065390877" /> | ||
| 688 | + <rect | ||
| 689 | + ry="0.065390877" | ||
| 690 | + rx="0.13778631" | ||
| 691 | + y="13.307699" | ||
| 692 | + x="17" | ||
| 693 | + height="1" | ||
| 694 | + width="20.000006" | ||
| 695 | + id="rect3466" | ||
| 696 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> | ||
| 697 | + <rect | ||
| 698 | + ry="0.065390877" | ||
| 699 | + rx="0.06270691" | ||
| 700 | + y="24.846159" | ||
| 701 | + x="17" | ||
| 702 | + height="1" | ||
| 703 | + width="9.1020555" | ||
| 704 | + id="rect4256" | ||
| 705 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> | ||
| 706 | + <rect | ||
| 707 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" | ||
| 708 | + id="rect4258" | ||
| 709 | + width="9.1020555" | ||
| 710 | + height="1" | ||
| 711 | + x="17" | ||
| 712 | + y="27.153851" | ||
| 713 | + rx="0.06270691" | ||
| 714 | + ry="0.065390877" /> | ||
| 715 | + <rect | ||
| 716 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" | ||
| 717 | + id="rect4262" | ||
| 718 | + width="9.1020555" | ||
| 719 | + height="1" | ||
| 720 | + x="17" | ||
| 721 | + y="29.461542" | ||
| 722 | + rx="0.06270691" | ||
| 723 | + ry="0.065390877" /> | ||
| 724 | + <rect | ||
| 725 | + ry="0.065390877" | ||
| 726 | + rx="0.06270691" | ||
| 727 | + y="31.769234" | ||
| 728 | + x="17" | ||
| 729 | + height="1" | ||
| 730 | + width="9.1020555" | ||
| 731 | + id="rect4264" | ||
| 732 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> | ||
| 733 | + <rect | ||
| 734 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" | ||
| 735 | + id="rect4268" | ||
| 736 | + width="20.000006" | ||
| 737 | + height="1" | ||
| 738 | + x="17" | ||
| 739 | + y="36.384617" | ||
| 740 | + rx="0.13778631" | ||
| 741 | + ry="0.065390877" /> | ||
| 742 | + <rect | ||
| 743 | + ry="0.065390877" | ||
| 744 | + rx="0.13778631" | ||
| 745 | + y="34.076923" | ||
| 746 | + x="17" | ||
| 747 | + height="1" | ||
| 748 | + width="20.000006" | ||
| 749 | + id="rect4270" | ||
| 750 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> | ||
| 751 | + <rect | ||
| 752 | + ry="0.065390877" | ||
| 753 | + rx="0.06270691" | ||
| 754 | + y="17.923084" | ||
| 755 | + x="17" | ||
| 756 | + height="1" | ||
| 757 | + width="9.1020555" | ||
| 758 | + id="rect4272" | ||
| 759 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> | ||
| 760 | + <rect | ||
| 761 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" | ||
| 762 | + id="rect4274" | ||
| 763 | + width="9.1020555" | ||
| 764 | + height="1" | ||
| 765 | + x="17" | ||
| 766 | + y="15.615393" | ||
| 767 | + rx="0.06270691" | ||
| 768 | + ry="0.065390877" /> | ||
| 769 | + <rect | ||
| 770 | + ry="0.065390877" | ||
| 771 | + rx="0.06270691" | ||
| 772 | + y="20.230776" | ||
| 773 | + x="17" | ||
| 774 | + height="1" | ||
| 775 | + width="9.1020555" | ||
| 776 | + id="rect4278" | ||
| 777 | + style="opacity:0.4;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> | ||
| 778 | + <rect | ||
| 779 | + ry="0.13078175" | ||
| 780 | + rx="0.13778631" | ||
| 781 | + y="7" | ||
| 782 | + x="17" | ||
| 783 | + height="2" | ||
| 784 | + width="20.000006" | ||
| 785 | + id="rect4280" | ||
| 786 | + style="opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:block;overflow:visible" /> | ||
| 787 | + </g> | ||
| 788 | +</svg> |
| @@ -0,0 +1,49 @@ | @@ -0,0 +1,49 @@ | ||
| 1 | +(function($) { | ||
| 2 | + | ||
| 3 | + $("input.task_accept_radio").click(function(){ | ||
| 4 | + task_id = this.getAttribute("task_id"); | ||
| 5 | + $('#on-accept-information-' + task_id).show('fast'); | ||
| 6 | + $('#on-reject-information-' + task_id).hide('fast'); | ||
| 7 | + $('#on-skip-information-' + task_id).hide('fast'); | ||
| 8 | + }) | ||
| 9 | + | ||
| 10 | + $("input.task_reject_radio").click(function(){ | ||
| 11 | + task_id = this.getAttribute("task_id"); | ||
| 12 | + $('#on-accept-information-' + task_id).hide('fast'); | ||
| 13 | + $('#on-reject-information-' + task_id).show('fast'); | ||
| 14 | + $('#on-skip-information-' + task_id).hide('fast'); | ||
| 15 | + }) | ||
| 16 | + | ||
| 17 | + $("input.task_skip_radio").click(function(){ | ||
| 18 | + task_id = this.getAttribute("task_id"); | ||
| 19 | + $('#on-accept-information-' + task_id).hide('fast'); | ||
| 20 | + $('#on-reject-information-' + task_id).hide('fast'); | ||
| 21 | + $('#on-skip-information-' + task_id).show('fast'); | ||
| 22 | + }) | ||
| 23 | + | ||
| 24 | + // There is probably an elegant way to do this... | ||
| 25 | + $('#up-set-all-tasks-to').selectedIndex = 0; | ||
| 26 | + $('#down-set-all-tasks-to').selectedIndex = 0; | ||
| 27 | + | ||
| 28 | + $('#down-set-all-tasks-to').change(function(){ | ||
| 29 | + value = $('#down-set-all-tasks-to').selected().val(); | ||
| 30 | + up = $('#up-set-all-tasks-to') | ||
| 31 | + up.attr('value', value).change(); | ||
| 32 | + }) | ||
| 33 | + | ||
| 34 | + $('#up-set-all-tasks-to').change(function(){ | ||
| 35 | + value = $('#up-set-all-tasks-to').selected().val(); | ||
| 36 | + down = $('#down-set-all-tasks-to') | ||
| 37 | + down.attr('value', value); | ||
| 38 | + $('.task_'+value+'_radio').each( function(){ | ||
| 39 | + if(!this.disabled){ | ||
| 40 | + $(this).attr('checked', 'checked').click(); | ||
| 41 | + } | ||
| 42 | + }) | ||
| 43 | + }) | ||
| 44 | + | ||
| 45 | + $('.task_title').css('margin-right', $('.task_decisions').width()+'px'); | ||
| 46 | + $('.task_title').css('margin-left', $('.task_arrow').width()+'px'); | ||
| 47 | + | ||
| 48 | +})(jQuery) | ||
| 49 | + |
public/stylesheets/application.css
| @@ -305,7 +305,7 @@ div.auto-complete li.selected { | @@ -305,7 +305,7 @@ div.auto-complete li.selected { | ||
| 305 | color: #204A87; | 305 | color: #204A87; |
| 306 | } | 306 | } |
| 307 | 307 | ||
| 308 | -/* pending tasks list */ | 308 | +/* pending tasks */ |
| 309 | 309 | ||
| 310 | div.pending-tasks { | 310 | div.pending-tasks { |
| 311 | padding: 10px; | 311 | padding: 10px; |
| @@ -313,6 +313,19 @@ div.pending-tasks { | @@ -313,6 +313,19 @@ div.pending-tasks { | ||
| 313 | margin-bottom: 20px; | 313 | margin-bottom: 20px; |
| 314 | } | 314 | } |
| 315 | 315 | ||
| 316 | +#pending-tasks-count { | ||
| 317 | + padding-left: 5px; | ||
| 318 | + padding-right: 5px; | ||
| 319 | + margin-left: 2px; | ||
| 320 | + text-decoration: none; | ||
| 321 | + background-color: #F57900; | ||
| 322 | + color: #FFFFFF; | ||
| 323 | + -moz-border-radius: 2px; | ||
| 324 | + -webkit-border-radius: 2px; | ||
| 325 | + -khtml-border-radius: 2px; | ||
| 326 | + border-radius: 2px; | ||
| 327 | +} | ||
| 328 | + | ||
| 316 | /* sitemap and agenda */ | 329 | /* sitemap and agenda */ |
| 317 | 330 | ||
| 318 | .agenda-item a.icon, | 331 | .agenda-item a.icon, |
| @@ -0,0 +1,46 @@ | @@ -0,0 +1,46 @@ | ||
| 1 | +.task_box { | ||
| 2 | + position: relative; | ||
| 3 | + border: 1px solid #888; | ||
| 4 | + -moz-border-radius: 10px; | ||
| 5 | + -webkit-border-radius: 10px; | ||
| 6 | + -khtml-border-radius: 10px; | ||
| 7 | + border-radius: 10px; | ||
| 8 | + padding: 6px 4px 9px 4px; | ||
| 9 | + margin-top: 5px; | ||
| 10 | + background: #EEE; | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +.task_title { | ||
| 14 | + margin: 0px; | ||
| 15 | + display: block; | ||
| 16 | + line-height: 28px; | ||
| 17 | + font-size: 120%; | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +.task_icon { | ||
| 21 | + float: left; | ||
| 22 | + margin-right: 10px; | ||
| 23 | + width: 50px; | ||
| 24 | + height: 50px; | ||
| 25 | + text-align: center; | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +.task_decisions { | ||
| 29 | + float: right; | ||
| 30 | + padding-right: 5px; | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +.task_information { | ||
| 34 | + line-height: 18px; | ||
| 35 | + padding: 2px 0px; | ||
| 36 | + clear: right; | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +.task_information p { | ||
| 40 | + margin: 0px; | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +.task_target { | ||
| 44 | + text-decoration: underline; | ||
| 45 | + font-weight: bold; | ||
| 46 | +} |
test/functional/tasks_controller_test.rb
| @@ -46,7 +46,7 @@ class TasksControllerTest < Test::Unit::TestCase | @@ -46,7 +46,7 @@ class TasksControllerTest < Test::Unit::TestCase | ||
| 46 | should 'be able to finish a task' do | 46 | should 'be able to finish a task' do |
| 47 | t = profile.tasks.build; t.save! | 47 | t = profile.tasks.build; t.save! |
| 48 | 48 | ||
| 49 | - post :close, :decision => 'finish', :id => t.id | 49 | + post :close, :tasks => {t.id => {:decision => 'finish', :task => {}}} |
| 50 | assert_redirected_to :action => 'index' | 50 | assert_redirected_to :action => 'index' |
| 51 | 51 | ||
| 52 | t.reload | 52 | t.reload |
| @@ -56,52 +56,46 @@ class TasksControllerTest < Test::Unit::TestCase | @@ -56,52 +56,46 @@ class TasksControllerTest < Test::Unit::TestCase | ||
| 56 | should 'be able to cancel a task' do | 56 | should 'be able to cancel a task' do |
| 57 | t = profile.tasks.build; t.save! | 57 | t = profile.tasks.build; t.save! |
| 58 | 58 | ||
| 59 | - post :close, :decision => 'cancel', :id => t.id | 59 | + post :close, :tasks => {t.id => {:decision => 'cancel', :task => {}}} |
| 60 | assert_redirected_to :action => 'index' | 60 | assert_redirected_to :action => 'index' |
| 61 | 61 | ||
| 62 | t.reload | 62 | t.reload |
| 63 | ok('task should be cancelled') { t.status == Task::Status::CANCELLED } | 63 | ok('task should be cancelled') { t.status == Task::Status::CANCELLED } |
| 64 | end | 64 | end |
| 65 | 65 | ||
| 66 | - should 'affiliate roles to user after finish add member task' do | ||
| 67 | - t = AddMember.create!(:person => profile, :organization => profile) | ||
| 68 | - count = profile.members.size | ||
| 69 | - post :close, :decision => 'finish', :id => t.id | ||
| 70 | - profile = Profile.find(@profile.id) | ||
| 71 | - assert_equal count + 1, profile.members.size | ||
| 72 | - end | 66 | + should 'be able to skip a task' do |
| 67 | + t = profile.tasks.build; t.save! | ||
| 73 | 68 | ||
| 74 | - should 'display custom form to add members task' do | ||
| 75 | - t = AddMember.create!(:person => profile, :organization => profile) | ||
| 76 | - get :index, :profile => profile.identifier | ||
| 77 | - assert_tag :tag => 'form', :attributes => { :action => "/myprofile/#{profile.identifier}/tasks/close/#{t.id}" } | ||
| 78 | - end | 69 | + post :close, :tasks => {t.id => {:decision => 'skip', :task => {}}} |
| 70 | + assert_redirected_to :action => 'index' | ||
| 79 | 71 | ||
| 80 | - should 'display member role checked if target has members' do | ||
| 81 | - profile.affiliate(profile, Profile::Roles.admin(profile.environment.id)) | ||
| 82 | - assert_equal 1, profile.members.size | ||
| 83 | - t = AddMember.create!(:person => profile, :organization => profile) | ||
| 84 | - get :index, :profile => profile.identifier | ||
| 85 | - assert_tag :tag => 'input', :attributes => { :name => 'task[roles][]', :checked => 'checked', :value => Profile::Roles.member(profile.environment.id).id } | 72 | + t.reload |
| 73 | + ok('task should be skipped') { t.status == Task::Status::ACTIVE } | ||
| 86 | end | 74 | end |
| 87 | 75 | ||
| 88 | - should 'display roles besides role member unchecked if target has members' do | ||
| 89 | - profile.affiliate(profile, Profile::Roles.admin(profile.environment.id)) | ||
| 90 | - assert_equal 1, profile.members.size | ||
| 91 | - t = AddMember.create!(:person => profile, :organization => profile) | ||
| 92 | - get :index, :profile => profile.identifier | ||
| 93 | - Role.find(:all).select{ |r| r.has_kind?('Profile') and r.id != Profile::Roles.member(profile.environment.id).id }.each do |i| | ||
| 94 | - assert_no_tag :tag => 'input', :attributes => { :name => 'task[roles][]', :checked => 'checked', :value => i.id } | ||
| 95 | - end | 76 | + should 'be able to apply different decisions to multiples tasks at the same time' do |
| 77 | + t1 = profile.tasks.build; t1.save! | ||
| 78 | + t2 = profile.tasks.build; t2.save! | ||
| 79 | + t3 = profile.tasks.build; t3.save! | ||
| 80 | + | ||
| 81 | + post :close, :tasks => {t1.id => {:decision => 'finish', :task => {}}, t2.id => {:decision => 'cancel', :task => {}}, t3.id => {:decision => 'skip', :task => {}}} | ||
| 82 | + assert_redirected_to :action => 'index' | ||
| 83 | + | ||
| 84 | + t1.reload | ||
| 85 | + t2.reload | ||
| 86 | + t3.reload | ||
| 87 | + | ||
| 88 | + ok('task should be finished') { t1.status == Task::Status::FINISHED } | ||
| 89 | + ok('task should be canceled') { t2.status == Task::Status::CANCELLED } | ||
| 90 | + ok('task should be skipped') { t3.status == Task::Status::ACTIVE } | ||
| 96 | end | 91 | end |
| 97 | 92 | ||
| 98 | - should 'display all roles checked if target has no members' do | ||
| 99 | - assert_equal 0, profile.members.size | 93 | + should 'affiliate roles to user after finish add member task' do |
| 100 | t = AddMember.create!(:person => profile, :organization => profile) | 94 | t = AddMember.create!(:person => profile, :organization => profile) |
| 101 | - get :index, :profile => profile.identifier | ||
| 102 | - Role.find(:all).select{ |r| r.has_kind?('Profile') }.each do |i| | ||
| 103 | - assert_tag :tag => 'input', :attributes => { :name => 'task[roles][]', :checked => 'checked', :value => i.id } | ||
| 104 | - end | 95 | + count = profile.members.size |
| 96 | + post :close, :tasks => {t.id => {:decision => 'finish', :task => {}}} | ||
| 97 | + profile = Profile.find(@profile.id) | ||
| 98 | + assert_equal count + 1, profile.members.size | ||
| 105 | end | 99 | end |
| 106 | 100 | ||
| 107 | should 'display a create ticket form' do | 101 | should 'display a create ticket form' do |
| @@ -161,8 +155,8 @@ class TasksControllerTest < Test::Unit::TestCase | @@ -161,8 +155,8 @@ class TasksControllerTest < Test::Unit::TestCase | ||
| 161 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') | 155 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') |
| 162 | t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) | 156 | t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) |
| 163 | 157 | ||
| 164 | - post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new name'} | ||
| 165 | - assert_equal article, c.articles.find_by_name('new name').reference_article | 158 | + post :close, :tasks => {t.id => {:decision => 'finish', :task => {:name => 'new_name'}}} |
| 159 | + assert_equal article, c.articles.find_by_name('new_name').reference_article | ||
| 166 | end | 160 | end |
| 167 | 161 | ||
| 168 | should 'create published article in folder after finish approve article task' do | 162 | should 'create published article in folder after finish approve article task' do |
| @@ -174,8 +168,8 @@ class TasksControllerTest < Test::Unit::TestCase | @@ -174,8 +168,8 @@ class TasksControllerTest < Test::Unit::TestCase | ||
| 174 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') | 168 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') |
| 175 | t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) | 169 | t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) |
| 176 | 170 | ||
| 177 | - post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new name', :article_parent_id => folder.id} | ||
| 178 | - assert_equal folder, c.articles.find_by_name('new name').parent | 171 | + post :close, :tasks => {t.id => {:decision => 'finish', :task => {:name => 'new_name', :article_parent_id => folder.id}}} |
| 172 | + assert_equal folder, c.articles.find_by_name('new_name').parent | ||
| 179 | end | 173 | end |
| 180 | 174 | ||
| 181 | should 'be highlighted if asked when approving a published article' do | 175 | should 'be highlighted if asked when approving a published article' do |
| @@ -187,8 +181,8 @@ class TasksControllerTest < Test::Unit::TestCase | @@ -187,8 +181,8 @@ class TasksControllerTest < Test::Unit::TestCase | ||
| 187 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') | 181 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') |
| 188 | t = ApproveArticle.create!(:article => article, :target => c, :requestor => profile) | 182 | t = ApproveArticle.create!(:article => article, :target => c, :requestor => profile) |
| 189 | 183 | ||
| 190 | - post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new name', :article_parent_id => folder.id, :highlighted => true} | ||
| 191 | - assert_equal true, c.articles.find_by_name('new name').highlighted | 184 | + post :close, :tasks => {t.id => {:decision => 'finish', :task => {:name => 'new_name', :article_parent_id => folder.id, :highlighted => true}}} |
| 185 | + assert_equal true, c.articles.find_by_name('new_name').highlighted | ||
| 192 | end | 186 | end |
| 193 | 187 | ||
| 194 | should 'create article of same class after choosing root folder on approve article task' do | 188 | should 'create article of same class after choosing root folder on approve article task' do |
| @@ -199,8 +193,8 @@ class TasksControllerTest < Test::Unit::TestCase | @@ -199,8 +193,8 @@ class TasksControllerTest < Test::Unit::TestCase | ||
| 199 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') | 193 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') |
| 200 | t = ApproveArticle.create!(:article => article, :target => c, :requestor => profile) | 194 | t = ApproveArticle.create!(:article => article, :target => c, :requestor => profile) |
| 201 | 195 | ||
| 202 | - post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new name', :article_parent_id => ""} | ||
| 203 | - assert_equal article.class, c.articles.find_by_name('new name').class | 196 | + post :close, :tasks => {t.id => {:decision => 'finish', :task => {:name => 'new_name', :article_parent_id => ""}}} |
| 197 | + assert_not_nil c.articles.find_by_name('new_name') | ||
| 204 | end | 198 | end |
| 205 | 199 | ||
| 206 | should 'handle blank names for published articles' do | 200 | should 'handle blank names for published articles' do |
| @@ -217,24 +211,24 @@ class TasksControllerTest < Test::Unit::TestCase | @@ -217,24 +211,24 @@ class TasksControllerTest < Test::Unit::TestCase | ||
| 217 | assert_includes c.tasks, a | 211 | assert_includes c.tasks, a |
| 218 | 212 | ||
| 219 | assert_difference article.class, :count do | 213 | assert_difference article.class, :count do |
| 220 | - post :close, {"commit"=>"Ok!", "id"=> a.id.to_s, "task"=>{"name"=>"", "closing_statment"=>"", "highlighted"=>"0", "article_parent_id"=>c_blog2.id.to_s}, "decision"=>"finish"} | 214 | + post :close, :tasks => {a.id => {:decision => 'finish', :task => {:name => "", :highlighted => "0", :article_parent_id => c_blog2.id.to_s}}} |
| 221 | end | 215 | end |
| 222 | assert p_article = article.class.find_by_reference_article_id(article.id) | 216 | assert p_article = article.class.find_by_reference_article_id(article.id) |
| 223 | assert_includes c_blog2.children(true), p_article | 217 | assert_includes c_blog2.children(true), p_article |
| 224 | end | 218 | end |
| 225 | 219 | ||
| 226 | - should 'cancel an enterprise registration task even if there is an enterprise with the same identifier' do | 220 | + should 'raise error if there is an enterprise with the same identifier and keep the task active' do |
| 227 | e = Environment.default | 221 | e = Environment.default |
| 228 | e.add_admin(profile) | 222 | e.add_admin(profile) |
| 229 | task = CreateEnterprise.create!(:name => "My Enterprise", :identifier => "my-enterprise", :requestor => profile, :target => e) | 223 | task = CreateEnterprise.create!(:name => "My Enterprise", :identifier => "my-enterprise", :requestor => profile, :target => e) |
| 230 | enterprise = fast_create(Enterprise, :name => "My Enterprise", :identifier => "my-enterprise") | 224 | enterprise = fast_create(Enterprise, :name => "My Enterprise", :identifier => "my-enterprise") |
| 231 | 225 | ||
| 232 | - assert_nothing_raised do | ||
| 233 | - post :close, {:profile => profile.identifier, :id => task.id, :task => {:reject_explanation => "Bla bla"}, :decision => "cancel"} | 226 | + assert_raise ActiveRecord::RecordInvalid do |
| 227 | + post :close, :tasks => {task.id => { :task => {:reject_explanation => "Bla bla"}, :decision => "cancel"}} | ||
| 234 | end | 228 | end |
| 235 | 229 | ||
| 236 | task.reload | 230 | task.reload |
| 237 | - assert_equal Task::Status::CANCELLED, task.status | 231 | + assert_equal Task::Status::ACTIVE, task.status |
| 238 | end | 232 | end |
| 239 | 233 | ||
| 240 | should 'create TinyMceArticle article after finish approve suggested article task' do | 234 | should 'create TinyMceArticle article after finish approve suggested article task' do |
| @@ -245,7 +239,7 @@ class TasksControllerTest < Test::Unit::TestCase | @@ -245,7 +239,7 @@ class TasksControllerTest < Test::Unit::TestCase | ||
| 245 | SuggestArticle.skip_captcha! | 239 | SuggestArticle.skip_captcha! |
| 246 | t = SuggestArticle.create!(:article_name => 'test name', :article_body => 'test body', :name => 'some name', :email => 'test@localhost.com', :target => c) | 240 | t = SuggestArticle.create!(:article_name => 'test name', :article_body => 'test body', :name => 'some name', :email => 'test@localhost.com', :target => c) |
| 247 | 241 | ||
| 248 | - post :close, :decision => 'finish', :id => t.id, :task => {} | 242 | + post :close, :tasks => {t.id => { :task => {}, :decision => "finish"}} |
| 249 | assert_not_nil TinyMceArticle.find(:first) | 243 | assert_not_nil TinyMceArticle.find(:first) |
| 250 | end | 244 | end |
| 251 | 245 | ||
| @@ -265,7 +259,7 @@ class TasksControllerTest < Test::Unit::TestCase | @@ -265,7 +259,7 @@ class TasksControllerTest < Test::Unit::TestCase | ||
| 265 | t.target = c | 259 | t.target = c |
| 266 | t.save! | 260 | t.save! |
| 267 | 261 | ||
| 268 | - post :close, :decision => 'finish', :id => t.id, :task => {:article_name => 'new article name', :article_body => 'new body', :source => 'http://www.noosfero.com', :source_name => 'new source', :name => 'new name'} | 262 | + post :close, :tasks => {t.id => { :task => {:article_name => 'new article name', :article_body => 'new body', :source => 'http://www.noosfero.com', :source_name => 'new source', :name => 'new name'}, :decision => "finish"}} |
| 269 | assert_equal 'new article name', TinyMceArticle.find(:first).name | 263 | assert_equal 'new article name', TinyMceArticle.find(:first).name |
| 270 | assert_equal 'new name', TinyMceArticle.find(:first).author_name | 264 | assert_equal 'new name', TinyMceArticle.find(:first).author_name |
| 271 | assert_equal 'new body', TinyMceArticle.find(:first).body | 265 | assert_equal 'new body', TinyMceArticle.find(:first).body |
test/unit/add_friend_test.rb
| @@ -71,15 +71,6 @@ class AddFriendTest < ActiveSupport::TestCase | @@ -71,15 +71,6 @@ class AddFriendTest < ActiveSupport::TestCase | ||
| 71 | task = AddFriend.create!(:person => p1, :friend => p2) | 71 | task = AddFriend.create!(:person => p1, :friend => p2) |
| 72 | end | 72 | end |
| 73 | 73 | ||
| 74 | - should 'provide proper description' do | ||
| 75 | - p1 = create_user('testuser1').person | ||
| 76 | - p2 = create_user('testuser2').person | ||
| 77 | - | ||
| 78 | - task = fast_create(AddFriend, :requestor_id => p1.id, :target_id => p2.id) | ||
| 79 | - | ||
| 80 | - assert_equal 'testuser1 wants to be your friend.', task.description | ||
| 81 | - end | ||
| 82 | - | ||
| 83 | should 'has permission to manage friends' do | 74 | should 'has permission to manage friends' do |
| 84 | t = AddFriend.new | 75 | t = AddFriend.new |
| 85 | assert_equal :manage_friends, t.permission | 76 | assert_equal :manage_friends, t.permission |
test/unit/add_member_test.rb
| @@ -49,18 +49,6 @@ class AddMemberTest < ActiveSupport::TestCase | @@ -49,18 +49,6 @@ class AddMemberTest < ActiveSupport::TestCase | ||
| 49 | task = AddMember.create!(:person => p, :organization => c) | 49 | task = AddMember.create!(:person => p, :organization => c) |
| 50 | end | 50 | end |
| 51 | 51 | ||
| 52 | - should 'provide proper description' do | ||
| 53 | - p = create_user('testuser1').person | ||
| 54 | - c = fast_create(Community, :name => 'closed community') | ||
| 55 | - c.update_attribute(:closed, true) | ||
| 56 | - | ||
| 57 | - TaskMailer.stubs(:deliver_target_notification) | ||
| 58 | - | ||
| 59 | - task = fast_create(AddMember, :requestor_id => p.id, :target_id => c.id, :target_type => 'Community') | ||
| 60 | - | ||
| 61 | - assert_equal 'testuser1 wants to be a member of "closed community".', task.description | ||
| 62 | - end | ||
| 63 | - | ||
| 64 | should 'has permission to manage members' do | 52 | should 'has permission to manage members' do |
| 65 | t = AddMember.new | 53 | t = AddMember.new |
| 66 | assert_equal :manage_memberships, t.permission | 54 | assert_equal :manage_memberships, t.permission |
test/unit/application_helper_test.rb
| @@ -588,6 +588,12 @@ class ApplicationHelperTest < Test::Unit::TestCase | @@ -588,6 +588,12 @@ class ApplicationHelperTest < Test::Unit::TestCase | ||
| 588 | assert_equal ["1 for b", "2 for c", "3 for a"], unique_with_count(%w(a b c a c a)) | 588 | assert_equal ["1 for b", "2 for c", "3 for a"], unique_with_count(%w(a b c a c a)) |
| 589 | end | 589 | end |
| 590 | 590 | ||
| 591 | + should 'show task information with the requestor' do | ||
| 592 | + person = create_user('usertest').person | ||
| 593 | + task = Task.create(:requestor => person) | ||
| 594 | + assert_match person.name, task_information(task) | ||
| 595 | + end | ||
| 596 | + | ||
| 591 | protected | 597 | protected |
| 592 | 598 | ||
| 593 | def url_for(args = {}) | 599 | def url_for(args = {}) |
test/unit/approve_article_test.rb
| @@ -62,7 +62,7 @@ class ApproveArticleTest < ActiveSupport::TestCase | @@ -62,7 +62,7 @@ class ApproveArticleTest < ActiveSupport::TestCase | ||
| 62 | article.destroy | 62 | article.destroy |
| 63 | a.reload | 63 | a.reload |
| 64 | 64 | ||
| 65 | - assert_match /text was removed/, a.description | 65 | + assert_equal "The article was removed.", a.information[:message] |
| 66 | end | 66 | end |
| 67 | 67 | ||
| 68 | should 'preserve article_parent' do | 68 | should 'preserve article_parent' do |
test/unit/email_activation_test.rb
| @@ -37,7 +37,7 @@ class EmailActivationTest < Test::Unit::TestCase | @@ -37,7 +37,7 @@ class EmailActivationTest < Test::Unit::TestCase | ||
| 37 | task = EmailActivation.create!(:requestor => ze.person, :target => Environment.default) | 37 | task = EmailActivation.create!(:requestor => ze.person, :target => Environment.default) |
| 38 | task.finish | 38 | task.finish |
| 39 | 39 | ||
| 40 | - assert_equal ['zezinho@colivre.net'], ActionMailer::Base.deliveries.first.to | 40 | + assert_equal ["zezinho@#{ze.email_domain}"], ActionMailer::Base.deliveries.first.to |
| 41 | end | 41 | end |
| 42 | 42 | ||
| 43 | should 'create only once pending task by user' do | 43 | should 'create only once pending task by user' do |
| @@ -49,11 +49,4 @@ class EmailActivationTest < Test::Unit::TestCase | @@ -49,11 +49,4 @@ class EmailActivationTest < Test::Unit::TestCase | ||
| 49 | assert !anothertask.save | 49 | assert !anothertask.save |
| 50 | end | 50 | end |
| 51 | 51 | ||
| 52 | - should 'display email address on description of task' do | ||
| 53 | - ze = create_user('zezinho', :environment_id => Environment.default.id) | ||
| 54 | - Environment.default.domains = [Domain.create!(:name => 'env_test.invalid')] | ||
| 55 | - task = EmailActivation.new(:requestor => ze.person, :target => Environment.default) | ||
| 56 | - assert_match /zezinho@env_test.invalid/, task.description | ||
| 57 | - end | ||
| 58 | - | ||
| 59 | end | 52 | end |
test/unit/invite_friend_test.rb
| @@ -105,13 +105,6 @@ class InviteFriendTest < ActiveSupport::TestCase | @@ -105,13 +105,6 @@ class InviteFriendTest < ActiveSupport::TestCase | ||
| 105 | task = InviteFriend.create!(:person => p1, :friend => p2) | 105 | task = InviteFriend.create!(:person => p1, :friend => p2) |
| 106 | end | 106 | end |
| 107 | 107 | ||
| 108 | - should 'mention inviter in description' do | ||
| 109 | - p1 = create_user('testuser1').person | ||
| 110 | - task = InviteFriend.new(:person => p1) | ||
| 111 | - | ||
| 112 | - assert_match 'testuser1', task.description | ||
| 113 | - end | ||
| 114 | - | ||
| 115 | should 'has permission to manage friends' do | 108 | should 'has permission to manage friends' do |
| 116 | t = InviteFriend.new | 109 | t = InviteFriend.new |
| 117 | assert_equal :manage_friends, t.permission | 110 | assert_equal :manage_friends, t.permission |
test/unit/invite_member_test.rb
| @@ -85,19 +85,6 @@ class InviteMemberTest < ActiveSupport::TestCase | @@ -85,19 +85,6 @@ class InviteMemberTest < ActiveSupport::TestCase | ||
| 85 | task = InviteMember.create!(:person => p1, :friend => p2, :community_id => fast_create(Community).id) | 85 | task = InviteMember.create!(:person => p1, :friend => p2, :community_id => fast_create(Community).id) |
| 86 | end | 86 | end |
| 87 | 87 | ||
| 88 | - should 'provide proper description' do | ||
| 89 | - p1 = create_user('testuser1').person | ||
| 90 | - p2 = create_user('testuser2').person | ||
| 91 | - | ||
| 92 | - TaskMailer.expects(:deliver_task_finished).never | ||
| 93 | - TaskMailer.expects(:deliver_task_created).never | ||
| 94 | - | ||
| 95 | - community = fast_create(Community) | ||
| 96 | - task = InviteMember.create!(:person => p1, :friend => p2, :community_id => community.id) | ||
| 97 | - | ||
| 98 | - assert_match(/#{p1.name}.*#{community.name}/, task.description) | ||
| 99 | - end | ||
| 100 | - | ||
| 101 | should 'not invite yourself' do | 88 | should 'not invite yourself' do |
| 102 | p = create_user('testuser1').person | 89 | p = create_user('testuser1').person |
| 103 | 90 |
test/unit/pending_task_notifier_test.rb
| @@ -23,10 +23,10 @@ class PendingTaskNotifierTest < Test::Unit::TestCase | @@ -23,10 +23,10 @@ class PendingTaskNotifierTest < Test::Unit::TestCase | ||
| 23 | p = create_user('maelcum').person | 23 | p = create_user('maelcum').person |
| 24 | c = fast_create(Community) | 24 | c = fast_create(Community) |
| 25 | c.add_admin(p) | 25 | c.add_admin(p) |
| 26 | - c.tasks << Task.new | 26 | + c.tasks << Task.new(:requestor => p) |
| 27 | 27 | ||
| 28 | response = PendingTaskNotifier.deliver_notification(p) | 28 | response = PendingTaskNotifier.deliver_notification(p) |
| 29 | - assert_match /Generic task/, response.body | 29 | + assert_match /sent you a task/, response.body |
| 30 | end | 30 | end |
| 31 | 31 | ||
| 32 | private | 32 | private |
test/unit/rss_feed_test.rb
| @@ -206,7 +206,7 @@ class RssFeedTest < Test::Unit::TestCase | @@ -206,7 +206,7 @@ class RssFeedTest < Test::Unit::TestCase | ||
| 206 | end | 206 | end |
| 207 | 207 | ||
| 208 | should 'display the referenced body of a article published' do | 208 | should 'display the referenced body of a article published' do |
| 209 | - article = fast_create(TextileArticle, :body => 'This is the content of the Sample Article.') | 209 | + article = fast_create(TextileArticle, :body => 'This is the content of the Sample Article.', :profile_id => fast_create(Person).id) |
| 210 | profile = fast_create(Profile) | 210 | profile = fast_create(Profile) |
| 211 | blog = fast_create(Blog, :profile_id => profile.id) | 211 | blog = fast_create(Blog, :profile_id => profile.id) |
| 212 | a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => fast_create(Person)) | 212 | a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => fast_create(Person)) |
test/unit/suggest_article_test.rb
| @@ -97,12 +97,6 @@ class SuggestArticleTest < ActiveSupport::TestCase | @@ -97,12 +97,6 @@ class SuggestArticleTest < ActiveSupport::TestCase | ||
| 97 | assert_equal 'http://www.gnu.org/', article.source | 97 | assert_equal 'http://www.gnu.org/', article.source |
| 98 | end | 98 | end |
| 99 | 99 | ||
| 100 | - should 'use sender name in description' do | ||
| 101 | - t = build(SuggestArticle, :target => @profile) | ||
| 102 | - t.stubs(:sender).returns('XYZ') | ||
| 103 | - assert_match(/XYZ/, t.description) | ||
| 104 | - end | ||
| 105 | - | ||
| 106 | should 'use name and e-mail as sender info' do | 100 | should 'use name and e-mail as sender info' do |
| 107 | t = build(SuggestArticle, :target => @profile) | 101 | t = build(SuggestArticle, :target => @profile) |
| 108 | t.name = 'Some One' | 102 | t.name = 'Some One' |
test/unit/task_mailer_test.rb
| @@ -17,7 +17,7 @@ class TaskMailerTest < Test::Unit::TestCase | @@ -17,7 +17,7 @@ class TaskMailerTest < Test::Unit::TestCase | ||
| 17 | 17 | ||
| 18 | task = Task.new | 18 | task = Task.new |
| 19 | task.expects(:task_finished_message).returns('the message') | 19 | task.expects(:task_finished_message).returns('the message') |
| 20 | - task.expects(:description).returns('the task') | 20 | + task.expects(:information).returns('the task') |
| 21 | 21 | ||
| 22 | requestor = mock() | 22 | requestor = mock() |
| 23 | requestor.expects(:notification_emails).returns(['requestor@example.com']) | 23 | requestor.expects(:notification_emails).returns(['requestor@example.com']) |
| @@ -40,7 +40,7 @@ class TaskMailerTest < Test::Unit::TestCase | @@ -40,7 +40,7 @@ class TaskMailerTest < Test::Unit::TestCase | ||
| 40 | 40 | ||
| 41 | task = Task.new | 41 | task = Task.new |
| 42 | task.expects(:task_cancelled_message).returns('the message') | 42 | task.expects(:task_cancelled_message).returns('the message') |
| 43 | - task.expects(:description).returns('the task') | 43 | + task.expects(:information).returns('the task') |
| 44 | 44 | ||
| 45 | requestor = mock() | 45 | requestor = mock() |
| 46 | requestor.expects(:notification_emails).returns(['requestor@example.com']) | 46 | requestor.expects(:notification_emails).returns(['requestor@example.com']) |
| @@ -64,7 +64,7 @@ class TaskMailerTest < Test::Unit::TestCase | @@ -64,7 +64,7 @@ class TaskMailerTest < Test::Unit::TestCase | ||
| 64 | task = Task.new | 64 | task = Task.new |
| 65 | 65 | ||
| 66 | task.expects(:task_created_message).returns('the message') | 66 | task.expects(:task_created_message).returns('the message') |
| 67 | - task.expects(:description).returns('the task') | 67 | + task.expects(:information).returns('the task') |
| 68 | 68 | ||
| 69 | requestor = mock() | 69 | requestor = mock() |
| 70 | requestor.expects(:notification_emails).returns(['requestor@example.com']) | 70 | requestor.expects(:notification_emails).returns(['requestor@example.com']) |
| @@ -85,7 +85,7 @@ class TaskMailerTest < Test::Unit::TestCase | @@ -85,7 +85,7 @@ class TaskMailerTest < Test::Unit::TestCase | ||
| 85 | 85 | ||
| 86 | should 'be able to send a "target notification" message' do | 86 | should 'be able to send a "target notification" message' do |
| 87 | task = Task.new | 87 | task = Task.new |
| 88 | - task.expects(:description).returns('the task') | 88 | + task.expects(:information).returns('the task') |
| 89 | 89 | ||
| 90 | target = mock() | 90 | target = mock() |
| 91 | target.expects(:notification_emails).returns(['target@example.com']) | 91 | target.expects(:notification_emails).returns(['target@example.com']) |
| @@ -104,18 +104,18 @@ class TaskMailerTest < Test::Unit::TestCase | @@ -104,18 +104,18 @@ class TaskMailerTest < Test::Unit::TestCase | ||
| 104 | assert !ActionMailer::Base.deliveries.empty? | 104 | assert !ActionMailer::Base.deliveries.empty? |
| 105 | end | 105 | end |
| 106 | 106 | ||
| 107 | - should 'be able to send a "invitatiom notification" message' do | 107 | + should 'be able to send a "invitation notification" message' do |
| 108 | 108 | ||
| 109 | task = InviteFriend.new | 109 | task = InviteFriend.new |
| 110 | - task.expects(:description).returns('the task') | ||
| 111 | task.expects(:code).returns('123456') | 110 | task.expects(:code).returns('123456') |
| 112 | 111 | ||
| 113 | - task.expects(:message).returns('Hello <friend>, <user> invite you, please follow this link: <url>') | 112 | + task.stubs(:message).returns('Hello <friend>, <user> invite you, please follow this link: <url>') |
| 114 | task.expects(:friend_email).returns('friend@exemple.com') | 113 | task.expects(:friend_email).returns('friend@exemple.com') |
| 115 | task.expects(:friend_name).returns('friend name').at_least_once | 114 | task.expects(:friend_name).returns('friend name').at_least_once |
| 116 | 115 | ||
| 117 | requestor = mock() | 116 | requestor = mock() |
| 118 | - requestor.expects(:name).returns('my name') | 117 | + requestor.stubs(:name).returns('my name') |
| 118 | + requestor.stubs(:public_profile_url).returns('requestor_path') | ||
| 119 | 119 | ||
| 120 | environment = mock() | 120 | environment = mock() |
| 121 | environment.expects(:contact_email).returns('sender@example.com') | 121 | environment.expects(:contact_email).returns('sender@example.com') |
test/unit/task_test.rb
| @@ -87,7 +87,8 @@ class TaskTest < Test::Unit::TestCase | @@ -87,7 +87,8 @@ class TaskTest < Test::Unit::TestCase | ||
| 87 | end | 87 | end |
| 88 | 88 | ||
| 89 | should 'provide a description method' do | 89 | should 'provide a description method' do |
| 90 | - assert_kind_of String, Task.new.description | 90 | + requestor = create_user('requestor').person |
| 91 | + assert_kind_of Hash, Task.new(:requestor => requestor).information | ||
| 91 | end | 92 | end |
| 92 | 93 | ||
| 93 | should 'notify just after the task is created' do | 94 | should 'notify just after the task is created' do |