voluntary 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/app/assets/javascripts/voluntary/application.js +1 -0
- data/app/assets/javascripts/voluntary/optional_lib/jquery.location_picker.js +405 -0
- data/app/controllers/concerns/voluntary/v1/base_controller.rb +6 -0
- data/app/controllers/stories_controller.rb +1 -1
- data/app/controllers/tasks_controller.rb +23 -32
- data/app/controllers/users_controller.rb +12 -5
- data/app/controllers/workflow/products_controller.rb +2 -0
- data/app/models/story.rb +8 -0
- data/app/models/user.rb +1 -1
- data/app/presenters/resources/user/form_presenter.rb +1 -1
- data/app/views/layouts/application.html.erb +2 -1
- data/app/views/tasks/_form.html.erb +5 -0
- data/app/views/tasks/edit.html.erb +3 -0
- data/app/views/tasks/index.html.erb +5 -0
- data/app/views/tasks/new.html.erb +3 -0
- data/app/views/tasks/show.html.erb +5 -5
- data/app/views/users/_form.html.erb +2 -0
- data/config/locales/general/en.yml +12 -1
- data/config/locales/resources/task/en.yml +6 -0
- data/db/migrate/20150808155719_add_api_key_to_users.rb +5 -1
- data/db/migrate/20151022163015_add_timezone_to_users.rb +5 -0
- data/lib/vendors/simple_navigation/renderer/twitter_sidenav.rb +2 -4
- data/lib/voluntary.rb +2 -0
- data/lib/voluntary/version.rb +1 -1
- metadata +27 -8
- data/app/assets/javascripts/voluntary/lib/moment.js +0 -3195
@@ -1,68 +1,65 @@
|
|
1
1
|
class TasksController < ApplicationController
|
2
2
|
include Applicat::Mvc::Controller::Resource
|
3
|
-
include Wizard::Controller
|
4
|
-
|
5
|
-
wizard_steps :setup_tasks, :activate
|
6
3
|
|
7
4
|
before_filter :build_resource, only: [:new, :create]
|
8
|
-
before_filter :resource, only: [:show, :edit, :update, :
|
5
|
+
before_filter :resource, only: [:show, :edit, :update, :destroy]
|
9
6
|
|
10
7
|
load_and_authorize_resource
|
11
8
|
|
12
9
|
respond_to :html, :js, :json
|
13
10
|
|
14
11
|
def index
|
15
|
-
|
16
|
-
@
|
12
|
+
@story = Story.find(params[:story_id])
|
13
|
+
@project = @story.project
|
14
|
+
@tasks = @story.custom_tasks
|
15
|
+
@tasks = @tasks.paginate(page: params[:page], per_page: 25)
|
16
|
+
@twitter_sidenav_level = 5
|
17
17
|
end
|
18
18
|
|
19
19
|
def show
|
20
20
|
@comments = @task.comments
|
21
|
+
@hide_sidebar = true
|
22
|
+
|
23
|
+
begin
|
24
|
+
raise NotImplementedError if @project.product_id.blank?
|
25
|
+
|
26
|
+
render "products/types/#{@project.product.class.name.split('Product::').last.tableize.singularize}/tasks/show"
|
27
|
+
rescue NotImplementedError, ActionView::MissingTemplate
|
28
|
+
render 'show'
|
29
|
+
end
|
21
30
|
end
|
22
31
|
|
23
32
|
def new
|
24
|
-
render_wizard
|
25
33
|
end
|
26
34
|
|
27
35
|
def create
|
28
|
-
if @task.
|
29
|
-
redirect_to
|
36
|
+
if @task.save
|
37
|
+
redirect_to story_tasks_path(@story), notice: t('tasks.create.successful')
|
30
38
|
else
|
31
|
-
|
39
|
+
render 'new'
|
32
40
|
end
|
33
41
|
end
|
34
42
|
|
35
43
|
def edit
|
36
|
-
render_wizard
|
37
44
|
end
|
38
45
|
|
39
46
|
def update
|
40
|
-
@task.
|
41
|
-
|
42
|
-
# shift the first empty task set after initialization on state :initialized
|
43
|
-
@task.tasks.shift if params[:next_step] == '1' && !@task.tasks.first.valid?
|
44
|
-
success = params[:next_step] == '1' ? @task.send(step) : @task.save
|
45
|
-
|
46
|
-
if success
|
47
|
+
if @task.update(params[:task])
|
47
48
|
redirect_to(
|
48
|
-
edit_task_path(@task), notice: t('
|
49
|
+
edit_task_path(@task), notice: t('tasks.update.successful')
|
49
50
|
)
|
50
|
-
else
|
51
|
-
render_wizard
|
52
51
|
end
|
53
|
-
|
54
|
-
return
|
55
52
|
end
|
56
53
|
|
57
54
|
def destroy
|
58
|
-
@task = Task.find(params[:id])
|
59
55
|
@task.destroy
|
60
|
-
redirect_to @
|
56
|
+
redirect_to story_tasks_path(@story), notice: t('general.form.destroyed')
|
61
57
|
end
|
62
58
|
|
63
59
|
def resource
|
64
60
|
@task = Task.find(params[:id]) unless @task || !params[:id].present?
|
65
61
|
@story = @task.story unless @story || !@task
|
62
|
+
@project = @story.project
|
66
63
|
@task
|
67
64
|
end
|
68
65
|
|
@@ -76,13 +73,7 @@ class TasksController < ApplicationController
|
|
76
73
|
|
77
74
|
def build_resource
|
78
75
|
@story = find_parent Task::PARENT_TYPES, action_name == 'create' ? :task : nil
|
76
|
+
@project = @story.project
|
79
77
|
@task = @story.tasks.new({ story_id: @story.id }.merge(params[:task] || {}))
|
80
78
|
end
|
81
|
-
|
82
|
-
def render_wizard
|
83
|
-
@presenter = Resources::General::Wizards::TaskPresenter.new(
|
84
|
-
self.view_context, resource: resource
|
85
|
-
)
|
86
|
-
render 'general/wizard'
|
87
|
-
end
|
88
79
|
end
|
@@ -18,24 +18,31 @@ class UsersController < ApplicationController
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def edit
|
21
|
+
@user.attributes = params[:user] if params[:user].present?
|
21
22
|
end
|
22
23
|
|
23
24
|
def preferences
|
24
|
-
if
|
25
|
-
|
25
|
+
raise CanCan::AccessDenied if !current_user || (current_user.id != @user.id && !current_user.roles?(:master))
|
26
|
+
|
27
|
+
if params[:user] && @user.update_attributes(params[:user])
|
28
|
+
redirect_to preferences_user_path(@user), notice: t('general.form.successfully_updated') and return
|
26
29
|
end
|
27
30
|
end
|
28
31
|
|
29
32
|
def update
|
30
|
-
if current_user.
|
31
|
-
|
33
|
+
raise CanCan::AccessDenied if !current_user || (current_user.id != @user.id && !current_user.roles?(:master))
|
34
|
+
|
35
|
+
if @user.update_attributes(params[:user])
|
36
|
+
redirect_to edit_user_path(@user), notice: t('general.form.successfully_updated')
|
32
37
|
else
|
33
38
|
render :edit
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
37
42
|
def destroy
|
38
|
-
current_user.
|
43
|
+
raise CanCan::AccessDenied if !current_user || (current_user.id != @user.id && !current_user.roles?(:master))
|
44
|
+
|
45
|
+
@user.destroy
|
39
46
|
redirect_to users_url, notice: t('general.form.destroyed')
|
40
47
|
end
|
41
48
|
|
data/app/models/story.rb
CHANGED
data/app/models/user.rb
CHANGED
@@ -28,7 +28,7 @@ class User < ActiveRecord::Base
|
|
28
28
|
attr_accessible :name, :password, :password_confirmation, :remember_me, :text, :language, :first_name, :last_name,
|
29
29
|
:salutation, :marital_status, :family_status, :date_of_birth, :place_of_birth, :citizenship,
|
30
30
|
:email, :country, :language, :interface_language, :foreign_language_tokens, :profession_id,
|
31
|
-
:employment_relationship, :area_tokens, :remember_me
|
31
|
+
:employment_relationship, :area_tokens, :remember_me, :timezone
|
32
32
|
|
33
33
|
# :timeoutable, :token_authenticatable, :lockable,
|
34
34
|
# :lock_strategy => :none, :unlock_strategy => :nones
|
@@ -7,7 +7,7 @@ class Resources::User::FormPresenter < ResourcePresenter
|
|
7
7
|
list += [:password, :password_confirmation] if resource.new_record? && resource.provider.blank?
|
8
8
|
|
9
9
|
list += [
|
10
|
-
:country, :language, :interface_language, :foreign_language_tokens, :profession,
|
10
|
+
:country, :language, :interface_language, :foreign_language_tokens, :timezone, :profession,
|
11
11
|
:employment_relationship, :area_tokens
|
12
12
|
]
|
13
13
|
|
@@ -6,10 +6,11 @@
|
|
6
6
|
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
8
8
|
<%= stylesheet_link_tag *voluntary_application_stylesheets, media: 'all' %>
|
9
|
+
<%= yield :stylesheet_includes %>
|
9
10
|
<link href="//netdna.bootstrapcdn.com/font-awesome/3.1.1/css/font-awesome.css" rel="stylesheet"/>
|
10
11
|
</head>
|
11
12
|
<body>
|
12
|
-
<div id="bootstrap_modal" class="modal fade"></div>
|
13
|
+
<div id="bootstrap_modal" class="modal fade" style="overflow-y:auto;"></div>
|
13
14
|
|
14
15
|
<section id="dialog">
|
15
16
|
<img alt="Ajax-loader-small" class="hide " id="dialog_body_spinner" src="<%=image_path('voluntary/spinner.gif')%>"/>
|
@@ -7,14 +7,14 @@
|
|
7
7
|
|
8
8
|
<h4><%= t('tasks.show.story_text') %></h4>
|
9
9
|
|
10
|
-
<%= resource.story.text %>
|
10
|
+
<%= markdown resource.story.text %>
|
11
11
|
|
12
12
|
<% if resource.text.present? %>
|
13
|
-
<h4><%= t('tasks.show.text') %></h4>
|
14
|
-
|
15
|
-
<%= resource.text %>
|
13
|
+
<h4><%= t('tasks.show.text') %></h4>
|
14
|
+
|
15
|
+
<%= markdown resource.text %>
|
16
16
|
<% end %>
|
17
17
|
|
18
18
|
<h4><%= t('activerecord.models.result') %></h4>
|
19
19
|
|
20
|
-
<%= resource.result.text if resource.result_id.present? %>
|
20
|
+
<%= markdown resource.result.text if resource.result_id.present? %>
|
@@ -17,6 +17,8 @@
|
|
17
17
|
f.input attribute, collection: available_language_options
|
18
18
|
when :foreign_language_tokens
|
19
19
|
f.input attribute, as: :string, input_html: { data: { load: resource.foreign_language_tokens } } unless Rails.env == 'test'
|
20
|
+
when :timezone
|
21
|
+
f.input attribute, as: :time_zone
|
20
22
|
when :profession
|
21
23
|
autocomplete_input(f, attribute)
|
22
24
|
when :employment_relationship
|
@@ -4,12 +4,16 @@ en:
|
|
4
4
|
anonymous: Anonymous
|
5
5
|
authentication: Authentication
|
6
6
|
author: Author
|
7
|
+
calendar: Calendar
|
7
8
|
cancel: Cancel
|
8
9
|
contra: contra
|
9
10
|
issues: Issues
|
11
|
+
list: List
|
10
12
|
neutral: neutral
|
11
13
|
pro: pro
|
12
14
|
sign_out: Sign out
|
15
|
+
sign_up: Sign up
|
16
|
+
unlimited: unlimited
|
13
17
|
vote: Vote
|
14
18
|
|
15
19
|
index:
|
@@ -62,9 +66,11 @@ en:
|
|
62
66
|
license: Code licensed under %{link}
|
63
67
|
|
64
68
|
attributes:
|
65
|
-
id: ID
|
69
|
+
id: ID
|
70
|
+
from: From
|
66
71
|
name: Name
|
67
72
|
text: Text
|
73
|
+
to: To
|
68
74
|
parent: Parent
|
69
75
|
project_id: Project
|
70
76
|
state: State
|
@@ -73,6 +79,11 @@ en:
|
|
73
79
|
position: Position
|
74
80
|
date: Date
|
75
81
|
trend: Trend
|
82
|
+
address: Address
|
83
|
+
description: Description
|
84
|
+
string: String
|
85
|
+
timezone: Timezone
|
86
|
+
resource_type: Resource type
|
76
87
|
|
77
88
|
activerecord:
|
78
89
|
models:
|
@@ -17,6 +17,9 @@ en:
|
|
17
17
|
new:
|
18
18
|
title: New Task
|
19
19
|
|
20
|
+
create:
|
21
|
+
successful: Task successfully created.
|
22
|
+
|
20
23
|
show:
|
21
24
|
story_text: Story
|
22
25
|
text: Task Text
|
@@ -25,6 +28,9 @@ en:
|
|
25
28
|
|
26
29
|
edit:
|
27
30
|
title: Edit Task
|
31
|
+
|
32
|
+
update:
|
33
|
+
successful: Task successfully updated.
|
28
34
|
|
29
35
|
activerecord:
|
30
36
|
errors:
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class AddApiKeyToUsers < ActiveRecord::Migration
|
2
|
-
def
|
2
|
+
def up
|
3
3
|
add_column :users, :api_key, :string, limit: 32
|
4
4
|
|
5
5
|
User.where('api_key IS NULL').find_each do |user|
|
@@ -10,4 +10,8 @@ class AddApiKeyToUsers < ActiveRecord::Migration
|
|
10
10
|
user.save!
|
11
11
|
end
|
12
12
|
end
|
13
|
+
|
14
|
+
def down
|
15
|
+
remove_column :users, :api_key
|
16
|
+
end
|
13
17
|
end
|
@@ -21,12 +21,10 @@ module Vendors
|
|
21
21
|
options.merge!(method: item.method, confirm: I18n.t('general.questions.are_you_sure'))
|
22
22
|
end
|
23
23
|
|
24
|
-
content +=
|
24
|
+
content += link_to(item.name, item.url, options.merge({ class: "list-group-item #{klass}"}))
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
content_tag :div, ul, class: 'well sidebar-nav'
|
27
|
+
content_tag :div, content_tag(:div, content, class: 'list-group'), class: 'well sidebar-nav'
|
30
28
|
end
|
31
29
|
end
|
32
30
|
end
|
data/lib/voluntary.rb
CHANGED
data/lib/voluntary/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: voluntary
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mathias Gawlista
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -654,6 +654,20 @@ dependencies:
|
|
654
654
|
- - "~>"
|
655
655
|
- !ruby/object:Gem::Version
|
656
656
|
version: 2.0.2
|
657
|
+
- !ruby/object:Gem::Dependency
|
658
|
+
name: fullcalendar-rails
|
659
|
+
requirement: !ruby/object:Gem::Requirement
|
660
|
+
requirements:
|
661
|
+
- - "~>"
|
662
|
+
- !ruby/object:Gem::Version
|
663
|
+
version: '2.4'
|
664
|
+
type: :runtime
|
665
|
+
prerelease: false
|
666
|
+
version_requirements: !ruby/object:Gem::Requirement
|
667
|
+
requirements:
|
668
|
+
- - "~>"
|
669
|
+
- !ruby/object:Gem::Version
|
670
|
+
version: '2.4'
|
657
671
|
- !ruby/object:Gem::Dependency
|
658
672
|
name: will_paginate
|
659
673
|
requirement: !ruby/object:Gem::Requirement
|
@@ -728,16 +742,16 @@ dependencies:
|
|
728
742
|
name: jquery-rails
|
729
743
|
requirement: !ruby/object:Gem::Requirement
|
730
744
|
requirements:
|
731
|
-
- -
|
745
|
+
- - "~>"
|
732
746
|
- !ruby/object:Gem::Version
|
733
|
-
version:
|
747
|
+
version: 3.1.1
|
734
748
|
type: :runtime
|
735
749
|
prerelease: false
|
736
750
|
version_requirements: !ruby/object:Gem::Requirement
|
737
751
|
requirements:
|
738
|
-
- -
|
752
|
+
- - "~>"
|
739
753
|
- !ruby/object:Gem::Version
|
740
|
-
version:
|
754
|
+
version: 3.1.1
|
741
755
|
- !ruby/object:Gem::Dependency
|
742
756
|
name: jquery-ui-bootstrap-rails-asset
|
743
757
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1144,7 +1158,7 @@ dependencies:
|
|
1144
1158
|
- - "~>"
|
1145
1159
|
- !ruby/object:Gem::Version
|
1146
1160
|
version: 2.2.0
|
1147
|
-
description: "#Crowdsourcing management system for #RubyOnRails: http://bit.ly/voluntary-0-
|
1161
|
+
description: "#Crowdsourcing management system for #RubyOnRails: http://bit.ly/voluntary-0-7-0"
|
1148
1162
|
email:
|
1149
1163
|
- gawlista@gmail.com
|
1150
1164
|
executables: []
|
@@ -1163,9 +1177,9 @@ files:
|
|
1163
1177
|
- app/assets/javascripts/voluntary/lib/jquery.cookie.js
|
1164
1178
|
- app/assets/javascripts/voluntary/lib/jquery.multisortable.js
|
1165
1179
|
- app/assets/javascripts/voluntary/lib/jquery.toggle_text.js.coffee
|
1166
|
-
- app/assets/javascripts/voluntary/lib/moment.js
|
1167
1180
|
- app/assets/javascripts/voluntary/lib/sugar.js
|
1168
1181
|
- app/assets/javascripts/voluntary/likes/list.js.coffee
|
1182
|
+
- app/assets/javascripts/voluntary/optional_lib/jquery.location_picker.js
|
1169
1183
|
- app/assets/javascripts/voluntary/users.js.coffee
|
1170
1184
|
- app/assets/javascripts/voluntary/workflow/user/index.js.coffee
|
1171
1185
|
- app/assets/stylesheets/voluntary/application.css
|
@@ -1334,6 +1348,10 @@ files:
|
|
1334
1348
|
- app/views/stories/steps/_setup_tasks.html.erb
|
1335
1349
|
- app/views/stories/tasks.html.erb
|
1336
1350
|
- app/views/tasks/_collection.html.erb
|
1351
|
+
- app/views/tasks/_form.html.erb
|
1352
|
+
- app/views/tasks/edit.html.erb
|
1353
|
+
- app/views/tasks/index.html.erb
|
1354
|
+
- app/views/tasks/new.html.erb
|
1337
1355
|
- app/views/tasks/show.html.erb
|
1338
1356
|
- app/views/users/_form.html.erb
|
1339
1357
|
- app/views/users/edit.html.erb
|
@@ -1422,6 +1440,7 @@ files:
|
|
1422
1440
|
- db/migrate/20150818151512_create_or_alter_arguments.rb
|
1423
1441
|
- db/migrate/20150821102558_add_vote_column_to_arguments.rb
|
1424
1442
|
- db/migrate/20150823174056_add_likes_count_to_arguments.rb
|
1443
|
+
- db/migrate/20151022163015_add_timezone_to_users.rb
|
1425
1444
|
- lib/api_constraints.rb
|
1426
1445
|
- lib/applicat/mvc/controller.rb
|
1427
1446
|
- lib/applicat/mvc/controller/error_handling.rb
|