decidim-calendar 0.13.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-AGPLv3.txt +661 -0
  3. data/README.md +9 -0
  4. data/Rakefile +43 -0
  5. data/app/assets/config/decidim_calendar_manifest.css +2 -0
  6. data/app/assets/config/decidim_calendar_manifest.js +2 -0
  7. data/app/assets/images/decidim/calendar/icon.svg +51 -0
  8. data/app/assets/javascripts/decidim/calendar/calendar.js.es6 +6 -0
  9. data/app/assets/javascripts/decidim/calendar/gantt.js.es6 +1 -0
  10. data/app/assets/stylesheets/decidim/calendar/calendar.scss +102 -0
  11. data/app/assets/stylesheets/decidim/calendar/gantt.scss +1 -0
  12. data/app/commands/decidim/calendar/admin/create_external_event.rb +38 -0
  13. data/app/commands/decidim/calendar/admin/destroy_external_event.rb +27 -0
  14. data/app/commands/decidim/calendar/admin/update_external_event.rb +43 -0
  15. data/app/controllers/decidim/calendar/admin/application_controller.rb +23 -0
  16. data/app/controllers/decidim/calendar/admin/external_events_controller.rb +84 -0
  17. data/app/controllers/decidim/calendar/application_controller.rb +21 -0
  18. data/app/controllers/decidim/calendar/calendar_controller.rb +33 -0
  19. data/app/forms/decidim/calendar/admin/external_event_form.rb +21 -0
  20. data/app/helpers/decidim/calendar/calendar_helper.rb +57 -0
  21. data/app/models/decidim/calendar/application_record.rb +9 -0
  22. data/app/models/decidim/calendar/event.rb +25 -0
  23. data/app/models/decidim/calendar/external_event.rb +18 -0
  24. data/app/permissions/decidim/calendar/admin/permissions.rb +22 -0
  25. data/app/presenters/decidim/calendar/event_presenter.rb +104 -0
  26. data/app/queries/decidim/calendar/organization_calendar.rb +15 -0
  27. data/app/services/decidim/calendar/event_to_ical.rb +27 -0
  28. data/app/services/decidim/calendar/general_calendar.rb +13 -0
  29. data/app/services/decidim/calendar/meeting_to_event.rb +8 -0
  30. data/app/services/decidim/meetings/calendar/base_calendar.rb +61 -0
  31. data/app/views/decidim/calendar/admin/external_events/_form.html.erb +22 -0
  32. data/app/views/decidim/calendar/admin/external_events/edit.html.erb +6 -0
  33. data/app/views/decidim/calendar/admin/external_events/index.html.erb +66 -0
  34. data/app/views/decidim/calendar/admin/external_events/new.html.erb +6 -0
  35. data/app/views/decidim/calendar/calendar/gantt.html.erb +22 -0
  36. data/app/views/decidim/calendar/calendar/index.html.erb +63 -0
  37. data/app/views/decidim/shared/_extended_navigation_bar.html.erb +51 -0
  38. data/app/views/layouts/_calendar_navigation.html.erb +18 -0
  39. data/app/views/layouts/calendar.html.erb +4 -0
  40. data/config/locales/ca.yml +38 -0
  41. data/config/locales/de.yml +38 -0
  42. data/config/locales/en.yml +48 -0
  43. data/config/locales/es.yml +38 -0
  44. data/config/locales/fi.yml +38 -0
  45. data/config/locales/fr.yml +38 -0
  46. data/config/locales/it.yml +38 -0
  47. data/config/locales/pl.yml +38 -0
  48. data/config/locales/pt.yml +38 -0
  49. data/config/locales/ro.yml +38 -0
  50. data/config/locales/ru.yml +38 -0
  51. data/config/locales/sv.yml +38 -0
  52. data/config/locales/tr.yml +38 -0
  53. data/config/locales/uk.yml +38 -0
  54. data/db/migrate/20190312132654_create_decidim_calendar_external_events.rb +18 -0
  55. data/lib/decidim/calendar.rb +11 -0
  56. data/lib/decidim/calendar/admin.rb +9 -0
  57. data/lib/decidim/calendar/admin_engine.rb +30 -0
  58. data/lib/decidim/calendar/engine.rb +34 -0
  59. data/lib/decidim/calendar/participatory_space.rb +20 -0
  60. data/lib/decidim/calendar/test/factories.rb +12 -0
  61. data/lib/decidim/calendar/version.rb +10 -0
  62. data/vendor/assets/javascripts/frappe-gantt/frappe-gantt.css +119 -0
  63. data/vendor/assets/javascripts/frappe-gantt/frappe-gantt.js +1883 -0
  64. data/vendor/assets/javascripts/fullcalendar/bootstrap/main.css +33 -0
  65. data/vendor/assets/javascripts/fullcalendar/bootstrap/main.js +90 -0
  66. data/vendor/assets/javascripts/fullcalendar/bootstrap/main.min.css +5 -0
  67. data/vendor/assets/javascripts/fullcalendar/bootstrap/main.min.js +20 -0
  68. data/vendor/assets/javascripts/fullcalendar/core/locales-all.js +1353 -0
  69. data/vendor/assets/javascripts/fullcalendar/core/locales-all.min.js +6 -0
  70. data/vendor/assets/javascripts/fullcalendar/core/locales/af.js +30 -0
  71. data/vendor/assets/javascripts/fullcalendar/core/locales/ar-dz.js +31 -0
  72. data/vendor/assets/javascripts/fullcalendar/core/locales/ar-kw.js +31 -0
  73. data/vendor/assets/javascripts/fullcalendar/core/locales/ar-ly.js +31 -0
  74. data/vendor/assets/javascripts/fullcalendar/core/locales/ar-ma.js +31 -0
  75. data/vendor/assets/javascripts/fullcalendar/core/locales/ar-sa.js +31 -0
  76. data/vendor/assets/javascripts/fullcalendar/core/locales/ar-tn.js +31 -0
  77. data/vendor/assets/javascripts/fullcalendar/core/locales/ar.js +31 -0
  78. data/vendor/assets/javascripts/fullcalendar/core/locales/bg.js +31 -0
  79. data/vendor/assets/javascripts/fullcalendar/core/locales/bs.js +32 -0
  80. data/vendor/assets/javascripts/fullcalendar/core/locales/ca.js +30 -0
  81. data/vendor/assets/javascripts/fullcalendar/core/locales/cs.js +32 -0
  82. data/vendor/assets/javascripts/fullcalendar/core/locales/da.js +30 -0
  83. data/vendor/assets/javascripts/fullcalendar/core/locales/de.js +33 -0
  84. data/vendor/assets/javascripts/fullcalendar/core/locales/el.js +30 -0
  85. data/vendor/assets/javascripts/fullcalendar/core/locales/en-au.js +17 -0
  86. data/vendor/assets/javascripts/fullcalendar/core/locales/en-gb.js +17 -0
  87. data/vendor/assets/javascripts/fullcalendar/core/locales/en-nz.js +17 -0
  88. data/vendor/assets/javascripts/fullcalendar/core/locales/es-us.js +30 -0
  89. data/vendor/assets/javascripts/fullcalendar/core/locales/es.js +30 -0
  90. data/vendor/assets/javascripts/fullcalendar/core/locales/et.js +32 -0
  91. data/vendor/assets/javascripts/fullcalendar/core/locales/eu.js +30 -0
  92. data/vendor/assets/javascripts/fullcalendar/core/locales/fa.js +33 -0
  93. data/vendor/assets/javascripts/fullcalendar/core/locales/fi.js +30 -0
  94. data/vendor/assets/javascripts/fullcalendar/core/locales/fr-ca.js +27 -0
  95. data/vendor/assets/javascripts/fullcalendar/core/locales/fr-ch.js +31 -0
  96. data/vendor/assets/javascripts/fullcalendar/core/locales/fr.js +31 -0
  97. data/vendor/assets/javascripts/fullcalendar/core/locales/gl.js +30 -0
  98. data/vendor/assets/javascripts/fullcalendar/core/locales/he.js +27 -0
  99. data/vendor/assets/javascripts/fullcalendar/core/locales/hi.js +32 -0
  100. data/vendor/assets/javascripts/fullcalendar/core/locales/hr.js +32 -0
  101. data/vendor/assets/javascripts/fullcalendar/core/locales/hu.js +30 -0
  102. data/vendor/assets/javascripts/fullcalendar/core/locales/id.js +30 -0
  103. data/vendor/assets/javascripts/fullcalendar/core/locales/is.js +30 -0
  104. data/vendor/assets/javascripts/fullcalendar/core/locales/it.js +32 -0
  105. data/vendor/assets/javascripts/fullcalendar/core/locales/ja.js +28 -0
  106. data/vendor/assets/javascripts/fullcalendar/core/locales/ka.js +32 -0
  107. data/vendor/assets/javascripts/fullcalendar/core/locales/kk.js +32 -0
  108. data/vendor/assets/javascripts/fullcalendar/core/locales/ko.js +26 -0
  109. data/vendor/assets/javascripts/fullcalendar/core/locales/lb.js +30 -0
  110. data/vendor/assets/javascripts/fullcalendar/core/locales/lt.js +30 -0
  111. data/vendor/assets/javascripts/fullcalendar/core/locales/lv.js +32 -0
  112. data/vendor/assets/javascripts/fullcalendar/core/locales/mk.js +28 -0
  113. data/vendor/assets/javascripts/fullcalendar/core/locales/ms.js +32 -0
  114. data/vendor/assets/javascripts/fullcalendar/core/locales/nb.js +30 -0
  115. data/vendor/assets/javascripts/fullcalendar/core/locales/nl.js +30 -0
  116. data/vendor/assets/javascripts/fullcalendar/core/locales/nn.js +30 -0
  117. data/vendor/assets/javascripts/fullcalendar/core/locales/pl.js +30 -0
  118. data/vendor/assets/javascripts/fullcalendar/core/locales/pt-br.js +28 -0
  119. data/vendor/assets/javascripts/fullcalendar/core/locales/pt.js +30 -0
  120. data/vendor/assets/javascripts/fullcalendar/core/locales/ro.js +32 -0
  121. data/vendor/assets/javascripts/fullcalendar/core/locales/ru.js +32 -0
  122. data/vendor/assets/javascripts/fullcalendar/core/locales/sk.js +32 -0
  123. data/vendor/assets/javascripts/fullcalendar/core/locales/sl.js +30 -0
  124. data/vendor/assets/javascripts/fullcalendar/core/locales/sq.js +32 -0
  125. data/vendor/assets/javascripts/fullcalendar/core/locales/sr-cyrl.js +32 -0
  126. data/vendor/assets/javascripts/fullcalendar/core/locales/sr.js +32 -0
  127. data/vendor/assets/javascripts/fullcalendar/core/locales/sv.js +30 -0
  128. data/vendor/assets/javascripts/fullcalendar/core/locales/th.js +25 -0
  129. data/vendor/assets/javascripts/fullcalendar/core/locales/tr.js +30 -0
  130. data/vendor/assets/javascripts/fullcalendar/core/locales/uk.js +32 -0
  131. data/vendor/assets/javascripts/fullcalendar/core/locales/vi.js +32 -0
  132. data/vendor/assets/javascripts/fullcalendar/core/locales/zh-cn.js +33 -0
  133. data/vendor/assets/javascripts/fullcalendar/core/locales/zh-tw.js +26 -0
  134. data/vendor/assets/javascripts/fullcalendar/core/main.css +900 -0
  135. data/vendor/assets/javascripts/fullcalendar/core/main.js +8791 -0
  136. data/vendor/assets/javascripts/fullcalendar/core/main.min.css +5 -0
  137. data/vendor/assets/javascripts/fullcalendar/core/main.min.js +9 -0
  138. data/vendor/assets/javascripts/fullcalendar/daygrid/main.css +69 -0
  139. data/vendor/assets/javascripts/fullcalendar/daygrid/main.js +1630 -0
  140. data/vendor/assets/javascripts/fullcalendar/daygrid/main.min.css +5 -0
  141. data/vendor/assets/javascripts/fullcalendar/daygrid/main.min.js +20 -0
  142. data/vendor/assets/javascripts/fullcalendar/google-calendar/main.js +169 -0
  143. data/vendor/assets/javascripts/fullcalendar/google-calendar/main.min.js +20 -0
  144. data/vendor/assets/javascripts/fullcalendar/interaction/main.js +2155 -0
  145. data/vendor/assets/javascripts/fullcalendar/interaction/main.min.js +21 -0
  146. data/vendor/assets/javascripts/fullcalendar/list/main.css +101 -0
  147. data/vendor/assets/javascripts/fullcalendar/list/main.js +341 -0
  148. data/vendor/assets/javascripts/fullcalendar/list/main.min.css +5 -0
  149. data/vendor/assets/javascripts/fullcalendar/list/main.min.js +20 -0
  150. data/vendor/assets/javascripts/fullcalendar/luxon/main.js +162 -0
  151. data/vendor/assets/javascripts/fullcalendar/luxon/main.min.js +20 -0
  152. data/vendor/assets/javascripts/fullcalendar/moment-timezone/main.js +64 -0
  153. data/vendor/assets/javascripts/fullcalendar/moment-timezone/main.min.js +20 -0
  154. data/vendor/assets/javascripts/fullcalendar/moment/main.js +103 -0
  155. data/vendor/assets/javascripts/fullcalendar/moment/main.min.js +6 -0
  156. data/vendor/assets/javascripts/fullcalendar/rrule/main.js +127 -0
  157. data/vendor/assets/javascripts/fullcalendar/rrule/main.min.js +20 -0
  158. data/vendor/assets/javascripts/fullcalendar/timegrid/main.css +266 -0
  159. data/vendor/assets/javascripts/fullcalendar/timegrid/main.js +1339 -0
  160. data/vendor/assets/javascripts/fullcalendar/timegrid/main.min.css +5 -0
  161. data/vendor/assets/javascripts/fullcalendar/timegrid/main.min.js +20 -0
  162. metadata +247 -0
data/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # Decidim::Calendar
2
+
3
+ [![Build Status](https://img.shields.io/circleci/project/github/alabs/decidim-module-calendar/master.svg)](https://circleci.com/gh/alabs/decidim-module-calendar)
4
+ [![Maintainability](https://img.shields.io/codeclimate/maintainability/alabs/decidim-module-calendar.svg)](https://codeclimate.com/github/alabs/decidim-module-calendar/maintainability)
5
+
6
+
7
+ Decidim calendar is a module to generate a global participatory space calendar.
8
+
9
+ ## This plugin is a work in progress
data/Rakefile ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/dev/common_rake"
4
+
5
+ def install_module(path)
6
+ Dir.chdir(path) do
7
+ system("bundle exec rake decidim_calendar:install:migrations")
8
+ system("bundle exec rake db:migrate")
9
+ end
10
+ end
11
+
12
+ def seed_db(path)
13
+ Dir.chdir(path) do
14
+ system("bundle exec rake db:seed")
15
+ end
16
+ end
17
+
18
+ desc "Generates a dummy app for testing"
19
+ task test_app: "decidim:generate_external_test_app" do
20
+ ENV["RAILS_ENV"] = "test"
21
+ install_module("spec/decidim_dummy_app")
22
+ end
23
+
24
+ desc "Generates a development app"
25
+ task :development_app do
26
+ Bundler.with_original_env do
27
+ generate_decidim_app(
28
+ "development_app",
29
+ "--app_name",
30
+ "#{base_app_name}_development_app",
31
+ "--path",
32
+ "..",
33
+ "--recreate_db",
34
+ "--demo"
35
+ )
36
+ end
37
+
38
+ install_module("development_app")
39
+ seed_db("development_app")
40
+ end
41
+
42
+ # Run both by default
43
+ task default: [:spec]
@@ -0,0 +1,2 @@
1
+ // = link decidim/calendar/calendar.css
2
+ // = link decidim/calendar/gantt.css
@@ -0,0 +1,2 @@
1
+ // = link decidim/calendar/calendar.js
2
+ // = link decidim/calendar/gantt.js
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
4
+ xmlns:cc="http://creativecommons.org/ns#"
5
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
+ xmlns:svg="http://www.w3.org/2000/svg"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
10
+ viewBox="0 0 34 34"
11
+ version="1.1"
12
+ id="svg4"
13
+ sodipodi:docname="icon.svg"
14
+ inkscape:version="0.92.4 5da689c313, 2019-01-14">
15
+ <metadata
16
+ id="metadata10">
17
+ <rdf:RDF>
18
+ <cc:Work
19
+ rdf:about="">
20
+ <dc:format>image/svg+xml</dc:format>
21
+ <dc:type
22
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
23
+ </cc:Work>
24
+ </rdf:RDF>
25
+ </metadata>
26
+ <defs
27
+ id="defs8" />
28
+ <sodipodi:namedview
29
+ pagecolor="#ffffff"
30
+ bordercolor="#666666"
31
+ borderopacity="1"
32
+ objecttolerance="10"
33
+ gridtolerance="10"
34
+ guidetolerance="10"
35
+ inkscape:pageopacity="0"
36
+ inkscape:pageshadow="2"
37
+ inkscape:window-width="1920"
38
+ inkscape:window-height="1052"
39
+ id="namedview6"
40
+ showgrid="false"
41
+ inkscape:zoom="13.882353"
42
+ inkscape:cx="19.027219"
43
+ inkscape:cy="20.490702"
44
+ inkscape:window-x="0"
45
+ inkscape:window-y="0"
46
+ inkscape:window-maximized="1"
47
+ inkscape:current-layer="svg4" />
48
+ <path
49
+ d="M 17 0 C 7.611 0 0 7.611 0 17 C 0 26.389 7.611 34 17 34 C 26.389 34 34 26.389 34 17 C 34 7.611 26.389 0 17 0 z M 17 1.8886719 C 25.346 1.8886719 32.111328 8.654 32.111328 17 C 32.111328 25.346 25.346 32.111328 17 32.111328 C 8.654 32.111328 1.8886719 25.346 1.8886719 17 C 1.8886719 8.654 8.654 1.8886719 17 1.8886719 z M 12.347656 6.8535156 C 11.934331 6.8815015 11.536929 6.9927662 11.210938 7.2695312 C 10.413062 7.8674067 10.562634 8.9010202 10.552734 9.7714844 L 9.4511719 9.7714844 C 8.6273438 9.6400193 7.7581435 10.21145 7.6953125 11.076172 C 7.6793525 15.953392 7.69206 20.831494 7.6875 25.708984 C 7.6741436 26.419214 8.2720209 27.071406 8.9765625 27.134766 C 14.166659 27.150666 19.35846 27.137978 24.548828 27.142578 C 25.372656 27.274043 26.241857 26.702613 26.304688 25.837891 C 26.320588 21.461754 26.308 17.083438 26.3125 12.707031 C 26.253771 11.944947 26.47721 11.111678 26.070312 10.421875 C 25.578516 9.6036585 24.577998 9.7891474 23.777344 9.7714844 C 23.277993 9.9256258 23.487716 9.3711628 23.447266 9.0664062 C 23.558677 8.168512 23.094223 7.1940266 22.177734 6.9335938 C 21.393694 6.8276904 20.458623 6.7160013 19.806641 7.2695312 C 19.008766 7.8674069 19.158337 8.9010204 19.148438 9.7714844 L 15.181641 9.7714844 C 14.68229 9.9256258 14.892012 9.3711628 14.851562 9.0664062 C 14.962974 8.168512 14.498521 7.1940259 13.582031 6.9335938 C 13.190011 6.8806421 12.760982 6.8255298 12.347656 6.8535156 z M 12.777344 8.3203125 C 13.020493 8.3247777 13.250887 8.3868867 13.394531 8.5546875 C 13.451161 9.3895936 13.401969 10.233903 13.417969 11.072266 C 13.357211 11.474552 13.581911 12.020983 13.203125 12.287109 C 12.795175 12.279985 12.084638 12.502237 11.986328 11.953125 C 11.98633 11.326793 11.986328 10.700551 11.986328 10.074219 C 12.030508 9.5316944 11.885859 8.9436187 12.083984 8.4375 C 12.278203 8.3698618 12.534194 8.3158473 12.777344 8.3203125 z M 21.373047 8.3203125 C 21.616197 8.3247775 21.846589 8.3868862 21.990234 8.5546875 C 22.046864 9.3895936 21.997672 10.233903 22.013672 11.072266 C 21.952914 11.474552 22.177614 12.020983 21.798828 12.287109 C 21.390878 12.279985 20.680341 12.502237 20.582031 11.953125 L 20.582031 10.074219 C 20.626211 9.5316944 20.481562 8.9436187 20.679688 8.4375 C 20.873907 8.3698623 21.129897 8.3158475 21.373047 8.3203125 z M 9.1210938 14.119141 L 24.878906 14.119141 L 24.878906 25.708984 L 9.1210938 25.708984 L 9.1210938 14.119141 z "
50
+ id="path2" />
51
+ </svg>
@@ -0,0 +1,6 @@
1
+ // = require fullcalendar/core/main
2
+ // = require fullcalendar/timegrid/main
3
+ // = require fullcalendar/interaction/main
4
+ // = require fullcalendar/daygrid/main
5
+ // = require fullcalendar/core/locales-all
6
+ // = require_self
@@ -0,0 +1 @@
1
+ // = require frappe-gantt/frappe-gantt
@@ -0,0 +1,102 @@
1
+ // = require "fullcalendar/core/main"
2
+ // = require "fullcalendar/daygrid/main"
3
+ @import "foundation";
4
+
5
+ #calendar{
6
+ .fc-title{
7
+ margin-left: 5px;
8
+ }
9
+
10
+ .fc-scroller {
11
+ overflow-x: hidden !important;
12
+ overflow-y: hidden !important;
13
+ }
14
+
15
+ .fc-day-number{
16
+ display: block;
17
+ float: none;
18
+ text-align: center;
19
+ }
20
+
21
+ .fc-day-top{
22
+ background-color: #ededed;
23
+ }
24
+
25
+ .fc-today{
26
+ background-color: #fcf8e3 !important;
27
+ }
28
+
29
+ td{
30
+ border-color: #ccc !important;
31
+ }
32
+
33
+ .fc-today{
34
+ background-color: #F0F3B6;
35
+ }
36
+
37
+ .fc-content-skeleton td{
38
+ background-color: #fff;
39
+ }
40
+
41
+ }
42
+ // when "Decidim::ParticipatoryProcessStep"
43
+ // "#238ff7"
44
+ // when "Decidim::Meetings::Meeting"
45
+ // "#fabc6c"
46
+ // when "Decidim::Calendar::ExternalEvent"
47
+ // "#5fbd4c"
48
+ // when "Decidim::Debates::Debate"
49
+ // "#d87537"
50
+ // when "Decidim::Consultation"
51
+ // "#A854BD"
52
+ // end
53
+
54
+ $meeting: #fabc6c !default;
55
+ $debate: #d87537 !default;
56
+ $consultation: #A854BD !default;
57
+ $external_event: #5fbd4c !default;
58
+ $participatory_step: #238ff7 !default;
59
+
60
+ .calendar-filters{
61
+ .meeting{
62
+ @include button-style($meeting, $meeting, white);
63
+ &.hollow{
64
+ color: $meeting;
65
+ border-color: $meeting;
66
+ @include button-hollow;
67
+ }
68
+ }
69
+ .debate{
70
+ @include button-style($debate, $debate, white);
71
+ &.hollow{
72
+ color: $debate;
73
+ border-color: $debate;
74
+ @include button-hollow;
75
+ }
76
+
77
+ }
78
+ .consultation{
79
+ @include button-style($consultation, $consultation, white);
80
+ &.hollow{
81
+ color: $consultation;
82
+ border-color: $consultation;
83
+ @include button-hollow;
84
+ }
85
+ }
86
+ .external_event{
87
+ @include button-style($external_event, $external_event, white);
88
+ &.hollow{
89
+ color: $external_event;
90
+ border-color: $external_event;
91
+ @include button-hollow;
92
+ }
93
+ }
94
+ .participatory_step{
95
+ @include button-style($participatory_step, $participatory_step, white);
96
+ &.hollow{
97
+ color: $participatory_step;
98
+ border-color: $participatory_step;
99
+ @include button-hollow;
100
+ }
101
+ }
102
+ }
@@ -0,0 +1 @@
1
+ // = require frappe-gantt/frappe-gantt
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Calendar
5
+ module Admin
6
+ class CreateExternalEvent < Rectify::Command
7
+ def initialize(form)
8
+ @form = form
9
+ end
10
+
11
+ def call
12
+ return broadcast(:invalid) if form.invalid?
13
+
14
+ transaction do
15
+ create_event
16
+ end
17
+
18
+ broadcast(:ok, @event)
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :form
24
+
25
+ def create_event
26
+ @event = ExternalEvent.create(
27
+ organization: form.current_organization,
28
+ title: form.title,
29
+ start_at: form.start_at,
30
+ end_at: form.end_at,
31
+ url: form.url,
32
+ author: form.current_user
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Calendar
5
+ module Admin
6
+ class DestroyExternalEvent < Rectify::Command
7
+ def initialize(event)
8
+ @event = event
9
+ end
10
+
11
+ def call
12
+ destroy_external_event
13
+
14
+ broadcast(:ok)
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :event
20
+
21
+ def destroy_external_event
22
+ event.destroy!
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Calendar
5
+ module Admin
6
+ class UpdateExternalEvent < Rectify::Command
7
+ def initialize(external_event, form)
8
+ @external_event = external_event
9
+ @form = form
10
+ end
11
+
12
+ def call
13
+ return broadcast(:invalid) if form.invalid?
14
+
15
+ transaction do
16
+ update_external_event!
17
+ end
18
+
19
+ broadcast(:ok, @event)
20
+ end
21
+
22
+ private
23
+
24
+ attr_reader :external_event, :form
25
+
26
+ def update_external_event!
27
+ external_event.update! attributes
28
+ end
29
+
30
+ def attributes
31
+ {
32
+ title: form.title,
33
+ start_at: form.start_at,
34
+ end_at: form.end_at,
35
+ url: form.url,
36
+ organization: current_organization,
37
+ author: current_user
38
+ }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Calendar
5
+ module Admin
6
+ class ApplicationController < Decidim::Admin::ApplicationController
7
+ helper_method :events, :event
8
+
9
+ def events
10
+ @events ||= Calendar::ExternalEvent.where(organization: current_organization).page(params[:page]).per(15)
11
+ end
12
+
13
+ def event
14
+ @event ||= events.find(params[:id])
15
+ end
16
+
17
+ def permission_class_chain
18
+ [Decidim::Calendar::Admin::Permissions] + super
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Calendar
5
+ module Admin
6
+ class ExternalEventsController < Admin::ApplicationController
7
+ helper_method :current_external_event, :external_events
8
+
9
+ def index
10
+ enforce_permission_to :read, :external_event
11
+ end
12
+
13
+ def new
14
+ enforce_permission_to :create, :external_event
15
+ @form = external_event_form.instance
16
+ end
17
+
18
+ def create
19
+ enforce_permission_to :create, :external_event
20
+ @form = external_event_form.from_params(params)
21
+
22
+ CreateExternalEvent.call(@form) do
23
+ on(:ok) do
24
+ flash[:notice] = I18n.t("create.success", scope: "decidim.calendar.admin.external_events")
25
+ redirect_to external_events_path
26
+ end
27
+
28
+ on(:invalid) do
29
+ flash.now[:alert] = I18n.t("create.invalid", scope: "decidim.calendar.admin.external_events")
30
+ render action: "new"
31
+ end
32
+ end
33
+ end
34
+
35
+ def edit
36
+ enforce_permission_to :update, :external_event, external_event: current_external_event
37
+ @form = external_event_form.from_model(current_external_event)
38
+ end
39
+
40
+ def update
41
+ enforce_permission_to :update, :external_event, external_event: current_external_event
42
+ @form = external_event_form
43
+ .from_params(params, external_event_id: current_external_event.id)
44
+
45
+ UpdateExternalEvent.call(current_external_event, @form) do
46
+ on(:ok) do
47
+ flash[:notice] = I18n.t("update.success", scope: "decidim.calendar.admin.external_events")
48
+ redirect_to external_events_path
49
+ end
50
+
51
+ on(:invalid) do
52
+ flash.now[:alert] = I18n.t("update.invalid", scope: "decidim.calendar.admin.external_events")
53
+ render :edit
54
+ end
55
+ end
56
+ end
57
+
58
+ def destroy
59
+ enforce_permission_to :destroy, :external_event, external_event: current_external_event
60
+ DestroyExternalEvent.call(current_external_event) do
61
+ on(:ok) do
62
+ flash[:notice] = I18n.t("destroy.success", scope: "decidim.calendar.admin.external_events")
63
+ redirect_to external_events_path
64
+ end
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def external_event_form
71
+ form(ExternalEventForm)
72
+ end
73
+
74
+ def external_events
75
+ @external_events ||= Calendar::ExternalEvent.where(organization: current_organization).page(params[:page]).per(15)
76
+ end
77
+
78
+ def current_external_event
79
+ @current_external_event ||= external_events.find(params[:id])
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end