jinda 0.7.7.2 → 0.7.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -1
  3. data/app/config/routes.rb +44 -0
  4. data/lib/generators/jinda/templates/README.md +3 -1
  5. data/lib/generators/jinda/templates/app/assets/stylesheets/application.css.scss +2 -2
  6. data/lib/generators/jinda/templates/app/assets/stylesheets/jinda_jqm.css.scss +32 -0
  7. data/lib/generators/jinda/templates/app/mailers/{application_mailer.rb → application_mailer.rb-org} +0 -0
  8. data/lib/generators/jinda/templates/config/mongoid.yml +3 -3
  9. data/lib/jinda/version.rb +1 -1
  10. data/test/Gemfile +2 -0
  11. data/test/dummy/Dockerfile +26 -0
  12. data/test/dummy/Gemfile +99 -0
  13. data/test/dummy/Gemfile.lock +515 -0
  14. data/test/dummy/{db/development.sqlite3 → README.md} +0 -0
  15. data/test/dummy/README.md.bak +24 -0
  16. data/test/dummy/Rakefile +1 -1
  17. data/test/dummy/app/assets/config/manifest.js +2 -1
  18. data/test/dummy/app/assets/config/manifest.js-rails +2 -0
  19. data/test/dummy/app/assets/javascripts/application.js +15 -0
  20. data/test/dummy/app/assets/stylesheets/{application.css → application.css.bak} +3 -3
  21. data/test/dummy/app/assets/stylesheets/application.css.scss +15 -0
  22. data/test/dummy/app/assets/stylesheets/jinda_jqm.css.scss +32 -0
  23. data/test/dummy/app/controllers/admins_controller.rb +6 -0
  24. data/test/dummy/app/controllers/api/v1/notes_controller.rb +81 -0
  25. data/test/dummy/app/controllers/application_controller.rb +39 -0
  26. data/test/dummy/app/controllers/application_controller.rb.bak +2 -0
  27. data/test/dummy/app/controllers/articles_controller.rb +110 -0
  28. data/test/dummy/app/controllers/comments_controller.rb +31 -0
  29. data/test/dummy/app/controllers/docs_controller.rb +56 -0
  30. data/test/dummy/app/controllers/identities_controller.rb +5 -0
  31. data/test/dummy/app/controllers/notes_controller.rb +84 -0
  32. data/test/dummy/app/controllers/password_resets.rb +28 -0
  33. data/test/dummy/app/controllers/password_resets_controller.rb +34 -0
  34. data/test/dummy/app/controllers/sessions_controller.rb +44 -0
  35. data/test/dummy/app/controllers/sitemap_controller.rb +12 -0
  36. data/test/dummy/app/controllers/users_controller.rb +35 -0
  37. data/test/dummy/app/helpers/admins_helper.rb +2 -0
  38. data/test/dummy/app/helpers/application_helper.rb +31 -0
  39. data/test/dummy/app/helpers/application_helper.rb.bak +2 -0
  40. data/test/dummy/app/helpers/articles_helper.rb +2 -0
  41. data/test/dummy/app/helpers/basic_helper.rb +2 -0
  42. data/test/dummy/app/helpers/comments_helper.rb +2 -0
  43. data/test/dummy/app/helpers/ctrs_helper.rb +2 -0
  44. data/test/dummy/app/helpers/devs_helper.rb +2 -0
  45. data/test/dummy/app/helpers/pictures_helper.rb +2 -0
  46. data/test/dummy/app/helpers/sitemap_helper.rb +2 -0
  47. data/test/dummy/app/helpers/users_helper.rb +2 -0
  48. data/test/dummy/app/jinda/index.mm +486 -0
  49. data/test/dummy/app/jinda/template/index.mm +366 -0
  50. data/test/dummy/app/jinda/template/linkview.haml +21 -0
  51. data/test/dummy/app/jinda/template/view.html.erb +34 -0
  52. data/test/dummy/app/mailers/application_mailer.rb +2 -2
  53. data/test/dummy/app/mailers/application_mailer.rb-org +4 -0
  54. data/test/dummy/app/mailers/jinda_mailer.rb +7 -0
  55. data/test/dummy/app/mailers/note_mailer.rb +10 -0
  56. data/test/dummy/app/mailers/user_mailer.rb +15 -0
  57. data/test/dummy/app/models/address.rb +14 -0
  58. data/test/dummy/app/models/article.rb +14 -0
  59. data/test/dummy/app/models/comment.rb +14 -0
  60. data/test/dummy/app/models/identity.rb +18 -0
  61. data/test/dummy/app/models/jinda/doc.rb +36 -0
  62. data/test/dummy/app/models/jinda/module.rb +11 -0
  63. data/test/dummy/app/models/jinda/notice.rb +14 -0
  64. data/test/dummy/app/models/jinda/role.rb +8 -0
  65. data/test/dummy/app/models/jinda/runseq.rb +24 -0
  66. data/test/dummy/app/models/jinda/service.rb +17 -0
  67. data/test/dummy/app/models/jinda/xmain.rb +38 -0
  68. data/test/dummy/app/models/note.rb +22 -0
  69. data/test/dummy/app/models/param.rb +41 -0
  70. data/test/dummy/app/models/person.rb +14 -0
  71. data/test/dummy/app/models/user.rb +66 -0
  72. data/test/dummy/app/views/adminbsbs/content.haml +241 -0
  73. data/test/dummy/app/views/admins/edit_role/edit_role.html.erb +7 -0
  74. data/test/dummy/app/views/admins/edit_role/select_user.html.erb +4 -0
  75. data/test/dummy/app/views/api/v1/note.haml +0 -0
  76. data/test/dummy/app/views/articles/_report.haml +35 -0
  77. data/test/dummy/app/views/articles/edit.haml +23 -0
  78. data/test/dummy/app/views/articles/edit_article/edit_article.html.erb +15 -0
  79. data/test/dummy/app/views/articles/edit_article/select_article.html.erb +12 -0
  80. data/test/dummy/app/views/articles/index.haml +5 -0
  81. data/test/dummy/app/views/articles/my.haml +5 -0
  82. data/test/dummy/app/views/articles/new_article/form_article.html.erb +16 -0
  83. data/test/dummy/app/views/articles/show.html.haml +58 -0
  84. data/test/dummy/app/views/articles/xedit_article/edit_article.html.erb +13 -0
  85. data/test/dummy/app/views/ctrs/vfolder1/viewfile1.html.erb +23 -0
  86. data/test/dummy/app/views/ctrs/vfolder1/viewfile2.html.erb +23 -0
  87. data/test/dummy/app/views/ctrs/vfolder2/viewfile2.html.erb +23 -0
  88. data/test/dummy/app/views/custom/_adsense.haml +6 -0
  89. data/test/dummy/app/views/docs/doc_edit/doc_edit.html.erb +21 -0
  90. data/test/dummy/app/views/docs/doc_edit/doc_select.html.erb +14 -0
  91. data/test/dummy/app/views/docs/doc_new/doc_form.html.erb +32 -0
  92. data/test/dummy/app/views/docs/doc_new/doc_form.md +36 -0
  93. data/test/dummy/app/views/docs/doc_xedit/doc_edit.html.erb +21 -0
  94. data/test/dummy/app/views/docs/edit/select_note.html.erb +14 -0
  95. data/test/dummy/app/views/docs/index.haml +21 -0
  96. data/test/dummy/app/views/docs/my.haml +27 -0
  97. data/test/dummy/app/views/identities/new.html.haml +32 -0
  98. data/test/dummy/app/views/jinda/_activity.md +10 -0
  99. data/test/dummy/app/views/jinda/_menu.haml +27 -0
  100. data/test/dummy/app/views/jinda/_menu_mm.haml +44 -0
  101. data/test/dummy/app/views/jinda/_model.md +5 -0
  102. data/test/dummy/app/views/jinda/_modul.md +9 -0
  103. data/test/dummy/app/views/jinda/_pending_home.haml +5 -0
  104. data/test/dummy/app/views/jinda/_pending_page.haml +24 -0
  105. data/test/dummy/app/views/jinda/_service.md +24 -0
  106. data/test/dummy/app/views/jinda/_static.haml +13 -0
  107. data/test/dummy/app/views/jinda/doc-thai.md +37 -0
  108. data/test/dummy/app/views/jinda/doc.md +36 -0
  109. data/test/dummy/app/views/jinda/error_logs.haml +22 -0
  110. data/test/dummy/app/views/jinda/feed.rss.builder +27 -0
  111. data/test/dummy/app/views/jinda/help.haml +20 -0
  112. data/test/dummy/app/views/jinda/index.html.haml +53 -0
  113. data/test/dummy/app/views/jinda/logs.haml +22 -0
  114. data/test/dummy/app/views/jinda/notice_logs.haml +18 -0
  115. data/test/dummy/app/views/jinda/pending.haml +1 -0
  116. data/test/dummy/app/views/jinda/run_form.haml +42 -0
  117. data/test/dummy/app/views/jinda/run_output.haml +38 -0
  118. data/test/dummy/app/views/jinda/search.haml +20 -0
  119. data/test/dummy/app/views/jinda/status.haml +61 -0
  120. data/test/dummy/app/views/jinda_mailer/gmail.html.erb +9 -0
  121. data/test/dummy/app/views/layouts/_head.html.erb +10 -0
  122. data/test/dummy/app/views/layouts/_meta_tag.html.erb +19 -0
  123. data/test/dummy/app/views/layouts/application.haml +4 -0
  124. data/test/dummy/app/views/layouts/{application.html.erb → application.html.erb.bak} +2 -1
  125. data/test/dummy/app/views/layouts/bsb/_footer.haml +7 -0
  126. data/test/dummy/app/views/layouts/bsb/_header.haml +147 -0
  127. data/test/dummy/app/views/layouts/bsb/_menu.haml +47 -0
  128. data/test/dummy/app/views/layouts/bsb/_menu_mm.haml +34 -0
  129. data/test/dummy/app/views/layouts/bsb/_rightbar.haml +123 -0
  130. data/test/dummy/app/views/layouts/bsb/_sidebar.haml +155 -0
  131. data/test/dummy/app/views/layouts/bsb/application.haml-bsb +47 -0
  132. data/test/dummy/app/views/layouts/gmail.html.erb +9 -0
  133. data/test/dummy/app/views/layouts/jqm/_full.haml +33 -0
  134. data/test/dummy/app/views/layouts/jqm/_page.haml +16 -0
  135. data/test/dummy/app/views/layouts/jqm/application.haml-jqm +4 -0
  136. data/test/dummy/app/views/layouts/mailer.html.haml +3 -0
  137. data/test/dummy/app/views/layouts/mailer.text.haml +1 -0
  138. data/test/dummy/app/views/layouts/mobile.html.erb +13 -0
  139. data/test/dummy/app/views/layouts/mobilejq.html.erb +31 -0
  140. data/test/dummy/app/views/layouts/print.html.erb +22 -0
  141. data/test/dummy/app/views/layouts/utf8.html.erb +22 -0
  142. data/test/dummy/app/views/note_mailer/gmail.html.haml +7 -0
  143. data/test/dummy/app/views/note_mailer/gmail.text.haml +8 -0
  144. data/test/dummy/app/views/notes/delete/select_note.html.erb +14 -0
  145. data/test/dummy/app/views/notes/edit/edit_note.html.erb +10 -0
  146. data/test/dummy/app/views/notes/edit/select_note.html.erb +14 -0
  147. data/test/dummy/app/views/notes/index.haml +71 -0
  148. data/test/dummy/app/views/notes/mail/display_mail.html.erb +20 -0
  149. data/test/dummy/app/views/notes/mail/select_note.html.erb +19 -0
  150. data/test/dummy/app/views/notes/mail/show.html.haml +13 -0
  151. data/test/dummy/app/views/notes/my.haml +21 -0
  152. data/test/dummy/app/views/notes/new/new_note.html.erb +13 -0
  153. data/test/dummy/app/views/notes/show.haml +10 -0
  154. data/test/dummy/app/views/notes/xedit/edit_note.html.erb +10 -0
  155. data/test/dummy/app/views/password_resets/edit.html.erb +21 -0
  156. data/test/dummy/app/views/password_resets/new.html.haml +11 -0
  157. data/test/dummy/app/views/sessions/new.html.haml +22 -0
  158. data/test/dummy/app/views/sitemap/index.xml.haml +10 -0
  159. data/test/dummy/app/views/user_mailer/password_reset.html.haml +3 -0
  160. data/test/dummy/app/views/user_mailer/password_reset.text.erb +3 -0
  161. data/test/dummy/app/views/user_mailer/password_reset.text.haml +3 -0
  162. data/test/dummy/app/views/users/index.haml +13 -0
  163. data/test/dummy/app/views/users/pwd/enter.html.erb +6 -0
  164. data/test/dummy/app/views/users/user/enter_user.html.erb +10 -0
  165. data/test/dummy/bin/rails +3 -3
  166. data/test/dummy/bin/rake +2 -2
  167. data/test/dummy/bin/setup +9 -17
  168. data/test/dummy/config/application.rb +51 -9
  169. data/test/dummy/config/boot.rb +3 -4
  170. data/test/dummy/config/cloudinary.yml +9 -0
  171. data/test/dummy/config/credentials.yml.enc +1 -0
  172. data/test/dummy/config/environment.rb +7 -1
  173. data/test/dummy/config/environments/development.rb +20 -20
  174. data/test/dummy/config/environments/production.rb +16 -40
  175. data/test/dummy/config/environments/test.rb +19 -11
  176. data/test/dummy/config/initializers/assets.rb +1 -1
  177. data/test/dummy/config/initializers/content_security_policy.rb +21 -24
  178. data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -2
  179. data/test/dummy/config/initializers/fix_mongoid_generator.rb-org +14 -0
  180. data/test/dummy/config/initializers/inflections.rb +4 -4
  181. data/test/dummy/config/initializers/jinda.rb +14 -0
  182. data/test/dummy/config/initializers/mongoid.rb +10 -0
  183. data/test/dummy/config/initializers/omniauth.rb +17 -0
  184. data/test/dummy/config/initializers/permissions_policy.rb +11 -0
  185. data/test/dummy/config/locales/en.yml +3 -3
  186. data/test/dummy/config/mongoid.yml +196 -0
  187. data/test/dummy/config/mongoid.yml-docker +182 -0
  188. data/test/dummy/config/mongoid.yml-localhost +182 -0
  189. data/test/dummy/config/puma.rb +7 -2
  190. data/test/dummy/config/routes.rb +5 -1
  191. data/test/dummy/config.ru +2 -1
  192. data/test/dummy/db/seeds.rb +6 -0
  193. data/test/dummy/docker-compose.yml +19 -0
  194. data/test/dummy/dot/dot.env +2 -0
  195. data/test/dummy/entrypoint.sh +13 -0
  196. data/test/dummy/log/development.log +697 -6
  197. data/test/dummy/public/robots.txt +1 -0
  198. data/test/dummy/spec/controllers/api/v1_get_index_spec.rb +23 -0
  199. data/test/dummy/spec/controllers/api/v1_get_my_spec.rb +14 -0
  200. data/test/dummy/spec/controllers/api/v1_post_spec.rb +19 -0
  201. data/test/dummy/spec/controllers/sessions_controller_spec.rb +98 -0
  202. data/test/dummy/spec/features/userlogins_spec.rb +23 -0
  203. data/test/dummy/spec/mailers/note_spec.rb +24 -0
  204. data/test/dummy/spec/mailers/previews/note_preview.rb +9 -0
  205. data/test/dummy/spec/models/note_spec.rb +41 -0
  206. data/test/dummy/spec/models/user_spec.rb +12 -0
  207. data/test/dummy/spec/rails_helper.rb +42 -0
  208. data/test/dummy/spec/spec_helper.rb +80 -0
  209. data/test/dummy/spec/support/authentication_helper.rb +20 -0
  210. data/test/dummy/spec/support/databasecleaner.rb +13 -0
  211. data/test/dummy/spec/support/factory_bot.rb +12 -0
  212. data/test/dummy/spec/support/omniauth_macros.rb +38 -0
  213. data/test/dummy/spec/support/request_spec_helper.rb +8 -0
  214. data/test/dummy/spec/views/articles/_article.html.erb_spec.rbx +14 -0
  215. data/test/dummy/tmp/development_secret.txt +1 -1
  216. metadata +188 -17
  217. data/test/dummy/app/javascript/packs/application.js +0 -15
  218. data/test/dummy/app/models/application_record.rb +0 -3
  219. data/test/dummy/config/database.yml +0 -25
  220. data/test/dummy/config/initializers/application_controller_renderer.rb +0 -8
  221. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  222. data/test/dummy/config/initializers/cookies_serializer.rb +0 -5
  223. data/test/dummy/config/initializers/mime_types.rb +0 -4
  224. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  225. data/test/dummy/config/spring.rb +0 -6
  226. data/test/dummy/config/storage.yml +0 -34
@@ -0,0 +1,24 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class Jinda::Runseq
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+ belongs_to :user, :class_name => "User"
6
+ belongs_to :xmain, :class_name => "Jinda::Xmain"
7
+
8
+ field :action, :type => String
9
+ field :status, :type => String
10
+ field :code, :type => String
11
+ field :name, :type => String
12
+ field :role, :type => String
13
+ field :rule, :type => String
14
+ field :rstep, :type => Integer
15
+ field :form_step, :type => Integer
16
+ field :start, :type => DateTime
17
+ field :stop, :type => DateTime
18
+ field :end, :type => Boolean
19
+ field :xml, :type => String
20
+ field :ip, :type => String
21
+
22
+ scope :form_action, ->{where(:action.in=> ['form','output','pdf'])}
23
+
24
+ end
@@ -0,0 +1,17 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class Jinda::Service
3
+ include Mongoid::Document
4
+ field :uid, :type => String
5
+ field :module_code, :type => String
6
+ field :code, :type => String
7
+ field :name, :type => String
8
+ field :xml, :type => String
9
+ field :role, :type => String
10
+ field :rule, :type => String
11
+ field :seq, :type => Integer
12
+ field :list, :type => Boolean
13
+ field :ma_secured, :type => Boolean
14
+ field :confirm, :type => Boolean
15
+
16
+ belongs_to :module, :class_name => "Jinda::Module"
17
+ end
@@ -0,0 +1,38 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class Jinda::Xmain
3
+ include Mongoid::Document
4
+ field :xid, :type => String
5
+ # Jinda begin
6
+ include Mongoid::Timestamps
7
+ belongs_to :service, :class_name => "Jinda::Service"
8
+ field :start, :type => DateTime
9
+ field :stop, :type => DateTime
10
+ field :name, :type => String
11
+ field :ip, :type => String
12
+ field :status, :type => String
13
+ belongs_to :user, :class_name => "User"
14
+ field :xvars, :type => Hash
15
+ field :current_runseq, :type => String
16
+ # Jinda end
17
+
18
+ has_many :runseqs, :class_name => "Jinda::Runseq"
19
+ has_many :docs, :class_name => "Jinda::Doc"
20
+ before_create :assign_xid
21
+
22
+
23
+ # number of xmains on the specified date
24
+ def self.get(xid)
25
+ find_by(xid:xid)
26
+ end
27
+ def assign_xid
28
+ self.xid = Param.gen(:xid)
29
+ end
30
+ def self.number(d)
31
+ all(:conditions=>['DATE(created_at) =?', d.to_date]).count
32
+ end
33
+ def self.search(q, page, per_page=10)
34
+ paginate :per_page=>per_page, :page => page, :conditions =>
35
+ ["LOWER(xvars) LIKE ?", "%#{q}%" ],
36
+ :order=>'created_at DESC'
37
+ end
38
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ class Note
3
+ include Mongoid::Document
4
+ # jinda begin
5
+ include Mongoid::Timestamps
6
+ include Mongoid::Attributes::Dynamic
7
+ field :title, :type => String
8
+ field :body, :type => String
9
+ belongs_to :user
10
+ before_validation :ensure_title_has_a_value
11
+ validates :title, length: { maximum: (MAX_TITLE_LENGTH = 30), message: "Must be less than 30 characters" }, presence: true
12
+ validates :body, length: { maximum: (MAX_BODY_LENGTH = 1000), message: "Must be less than 1000 characters"}
13
+ private
14
+ def ensure_title_has_a_value
15
+ if title.blank?
16
+ self.title = body[0..(MAX_TITLE_LENGTH-1)] unless body.blank?
17
+ end
18
+ end
19
+
20
+
21
+ # jinda end
22
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+ class Param
3
+ include Mongoid::Document
4
+ validates_uniqueness_of :code
5
+ # jinda begin
6
+ include Mongoid::Timestamps
7
+ field :code, :type => String
8
+ field :pid, :type => String
9
+ field :yearly, :type => Boolean
10
+ field :description, :type => String
11
+ # jinda end
12
+
13
+ def self.get(code)
14
+ p= where(:code=> code).first
15
+ p.pid
16
+ end
17
+ def self.set(code, pid)
18
+ p= where(:code=> code).first
19
+ p.pid = pid.to_s
20
+ p.save
21
+ end
22
+ def self.gen(code)
23
+ p= where(:code=> code).first
24
+ unless p
25
+ p= self.create! :code => code, :pid => '0', :yearly => false, :description => 'auto'
26
+ end
27
+ if p.yearly
28
+ num, year = p.pid.split('/')
29
+ y_now = (Time.now.year.to_i) -1957
30
+ if year.to_i==y_now
31
+ p.pid = "#{num.to_i+1}/#{y_now}"
32
+ else # new year, restart counter
33
+ p.pid = "1/#{y_now}"
34
+ end
35
+ else
36
+ p.pid = (p.pid.to_i+1).to_s
37
+ end
38
+ p.save
39
+ return p.pid
40
+ end
41
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+ class Person
3
+ include Mongoid::Document
4
+ # jinda begin
5
+ include Mongoid::Timestamps
6
+ field :fname, :type => String
7
+ field :lname, :type => String
8
+ field :sex, :type => Integer
9
+ belongs_to :address
10
+ field :dob, :type => Date
11
+ field :phone, :type => String
12
+ field :photo, :type => String
13
+ # jinda end
14
+ end
@@ -0,0 +1,66 @@
1
+ class User
2
+ include Mongoid::Document
3
+ # https://docs.mongodb.com/mongoid/master/tutorials/mongoid-indexes/
4
+ index({ code: 1 }, { unique: true, name: "code_index" })
5
+ before_create {generate_token(:auth_token)}
6
+ field :provider, :type => String
7
+ field :uid, :type => String
8
+ field :code, :type => String
9
+ field :email, :type => String
10
+ field :role, :type => String
11
+ field :user, :type => String
12
+ field :auth_token, :type => String
13
+ field :password_reset_token, :type => String
14
+ field :password_reset_sent_at,:type => DateTime
15
+ field :image, :type => String
16
+
17
+ belongs_to :identity, :polymorphic => true, :optional => true
18
+ has_many :xmains, :class_name => "Jinda::Xmain"
19
+ validates :code,
20
+ presence: true,
21
+ uniqueness: true
22
+
23
+ ## Add to create forgot password
24
+ def generate_token(column)
25
+ begin
26
+ self[column] = SecureRandom.urlsafe_base64
27
+ end
28
+ #end while User.exists?(column => self[column])
29
+ end
30
+
31
+ def has_role(role1)
32
+ return role.upcase.split(',').include?(role1.upcase)
33
+ end
34
+
35
+ def self.from_omniauth(auth)
36
+ # Rails now no longer support slice
37
+ # where(auth.slice(:uid, :provider, :email)).first_or_create do |user|
38
+ where(uid: auth.uid, provider: auth.provider, email: auth.info.email).first_or_create do |user|
39
+ case auth.provider
40
+ when 'identity'
41
+ identity = Identity.find auth.uid
42
+ user.code = identity.code
43
+ user.email = identity.email
44
+ else
45
+ user.email = auth.info.email
46
+ user.uid = auth.uid
47
+ user.provider = auth.provider
48
+ user.code = auth.info.name
49
+ user.role = "M"
50
+ user.image = auth.info.image
51
+ end
52
+ end
53
+ end
54
+
55
+ def ma_secured?
56
+ role.upcase.split(',').include?(ma_secured_ROLE)
57
+ end
58
+
59
+ def send_password_reset
60
+ generate_token(:password_reset_token)
61
+ self.password_reset_sent_at = Time.zone.now
62
+ save!
63
+ UserMailer.password_reset(self).deliver
64
+ end
65
+
66
+ end
@@ -0,0 +1,241 @@
1
+ %section.content
2
+ .container-fluid
3
+ .block-header
4
+ %h2 DASHBOARD
5
+ / Widgets
6
+ .row.clearfix
7
+ .col-lg-3.col-md-3.col-sm-6.col-xs-12
8
+ .info-box.bg-pink.hover-expand-effect
9
+ .icon
10
+ %i.material-icons playlist_add_check
11
+ .content
12
+ .text NEW TASKS
13
+ .number.count-to{"data-fresh-interval" => "20", "data-from" => "0", "data-speed" => "15", "data-to" => "125"}
14
+ .col-lg-3.col-md-3.col-sm-6.col-xs-12
15
+ .info-box.bg-cyan.hover-expand-effect
16
+ .icon
17
+ %i.material-icons help
18
+ .content
19
+ .text NEW TICKETS
20
+ .number.count-to{"data-fresh-interval" => "20", "data-from" => "0", "data-speed" => "1000", "data-to" => "257"}
21
+ .col-lg-3.col-md-3.col-sm-6.col-xs-12
22
+ .info-box.bg-light-green.hover-expand-effect
23
+ .icon
24
+ %i.material-icons forum
25
+ .content
26
+ .text NEW COMMENTS
27
+ .number.count-to{"data-fresh-interval" => "20", "data-from" => "0", "data-speed" => "1000", "data-to" => "243"}
28
+ .col-lg-3.col-md-3.col-sm-6.col-xs-12
29
+ .info-box.bg-orange.hover-expand-effect
30
+ .icon
31
+ %i.material-icons person_add
32
+ .content
33
+ .text NEW VISITORS
34
+ .number.count-to{"data-fresh-interval" => "20", "data-from" => "0", "data-speed" => "1000", "data-to" => "1225"}
35
+ / #END# Widgets
36
+ / CPU Usage
37
+ .row.clearfix
38
+ .col-xs-12.col-sm-12.col-md-12.col-lg-12
39
+ .card
40
+ .header
41
+ .row.clearfix
42
+ .col-xs-12.col-sm-6
43
+ %h2 CPU USAGE (%)
44
+ .col-xs-12.col-sm-6.align-right
45
+ .switch.panel-switch-btn
46
+ %span.m-r-10.font-12 REAL TIME
47
+ %label
48
+ OFF
49
+ %input#realtime{:checked => "checked", :type => "checkbox"}/
50
+ = succeed "ON" do
51
+ %span.lever.switch-col-cyan
52
+ %ul.header-dropdown.m-r--5
53
+ %li.dropdown
54
+ %a.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :href => "javascript:void(0);", :role => "button"}
55
+ %i.material-icons more_vert
56
+ %ul.dropdown-menu.pull-right
57
+ %li
58
+ %a{:href => "javascript:void(0);"} Action
59
+ %li
60
+ %a{:href => "javascript:void(0);"} Another action
61
+ %li
62
+ %a{:href => "javascript:void(0);"} Something else here
63
+ .body
64
+ #real_time_chart.dashboard-flot-chart
65
+ / #END# CPU Usage
66
+ .row.clearfix
67
+ / Visitors
68
+ .col-xs-12.col-sm-12.col-md-4.col-lg-4
69
+ .card
70
+ .body.bg-pink
71
+ .sparkline{"data-fill-color" => "rgba(0, 188, 212, 0)", "data-height" => "92px", "data-highlight-line-color" => "#fff", "data-highlight-spot-color" => "rgb(233, 30, 99)", "data-line-color" => "rgba(255,255,255,0.7)", "data-line-width" => "2", "data-max-spot-color" => "rgb(255,255,255)", "data-min-spot-color" => "rgb(255,255,255)", "data-offset" => "90", "data-spot-color" => "rgb(255,255,255)", "data-spot-radius" => "4", "data-type" => "line", "data-width" => "100%"}
72
+ 12,10,9,6,5,6,10,5,7,5,12,13,7,12,11
73
+ %ul.dashboard-stat-list
74
+ %li
75
+ TODAY
76
+ %span.pull-right
77
+ %b 1 200
78
+ %small USERS
79
+ %li
80
+ YESTERDAY
81
+ %span.pull-right
82
+ %b 3 872
83
+ %small USERS
84
+ %li
85
+ LAST WEEK
86
+ %span.pull-right
87
+ %b 26 582
88
+ %small USERS
89
+ / #END# Visitors
90
+ / Latest Social Trends
91
+ .col-xs-12.col-sm-12.col-md-4.col-lg-4
92
+ .card
93
+ .body.bg-cyan
94
+ .m-b--35.font-bold LATEST SOCIAL TRENDS
95
+ %ul.dashboard-stat-list
96
+ %li
97
+ \#socialtrends
98
+ %span.pull-right
99
+ %i.material-icons trending_up
100
+ %li
101
+ \#materialdesign
102
+ %span.pull-right
103
+ %i.material-icons trending_up
104
+ %li #adminbsb
105
+ %li #freeadmintemplate
106
+ %li #bootstraptemplate
107
+ %li
108
+ \#freehtmltemplate
109
+ %span.pull-right
110
+ %i.material-icons trending_up
111
+ / #END# Latest Social Trends
112
+ / Answered Tickets
113
+ .col-xs-12.col-sm-12.col-md-4.col-lg-4
114
+ .card
115
+ .body.bg-teal
116
+ .font-bold.m-b--35 ANSWERED TICKETS
117
+ %ul.dashboard-stat-list
118
+ %li
119
+ TODAY
120
+ %span.pull-right
121
+ %b 12
122
+ %small TICKETS
123
+ %li
124
+ YESTERDAY
125
+ %span.pull-right
126
+ %b 15
127
+ %small TICKETS
128
+ %li
129
+ LAST WEEK
130
+ %span.pull-right
131
+ %b 90
132
+ %small TICKETS
133
+ %li
134
+ LAST MONTH
135
+ %span.pull-right
136
+ %b 342
137
+ %small TICKETS
138
+ %li
139
+ LAST YEAR
140
+ %span.pull-right
141
+ %b 4 225
142
+ %small TICKETS
143
+ %li
144
+ ALL
145
+ %span.pull-right
146
+ %b 8 752
147
+ %small TICKETS
148
+ / #END# Answered Tickets
149
+ .row.clearfix
150
+ / Task Info
151
+ .col-xs-12.col-sm-12.col-md-8.col-lg-8
152
+ .card
153
+ .header
154
+ %h2 TASK INFOS
155
+ %ul.header-dropdown.m-r--5
156
+ %li.dropdown
157
+ %a.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :href => "javascript:void(0);", :role => "button"}
158
+ %i.material-icons more_vert
159
+ %ul.dropdown-menu.pull-right
160
+ %li
161
+ %a{:href => "javascript:void(0);"} Action
162
+ %li
163
+ %a{:href => "javascript:void(0);"} Another action
164
+ %li
165
+ %a{:href => "javascript:void(0);"} Something else here
166
+ .body
167
+ .table-responsive
168
+ %table.table.table-hover.dashboard-task-infos
169
+ %thead
170
+ %tr
171
+ %th #
172
+ %th Task
173
+ %th Status
174
+ %th Manager
175
+ %th Progress
176
+ %tbody
177
+ %tr
178
+ %td 1
179
+ %td Task A
180
+ %td
181
+ %span.label.bg-green Doing
182
+ %td John Doe
183
+ %td
184
+ .progress
185
+ .progress-bar.bg-green{"aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => "62", :role => "progressbar", :style => "width: 62%"}
186
+ %tr
187
+ %td 2
188
+ %td Task B
189
+ %td
190
+ %span.label.bg-blue To Do
191
+ %td John Doe
192
+ %td
193
+ .progress
194
+ .progress-bar.bg-blue{"aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => "40", :role => "progressbar", :style => "width: 40%"}
195
+ %tr
196
+ %td 3
197
+ %td Task C
198
+ %td
199
+ %span.label.bg-light-blue On Hold
200
+ %td John Doe
201
+ %td
202
+ .progress
203
+ .progress-bar.bg-light-blue{"aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => "72", :role => "progressbar", :style => "width: 72%"}
204
+ %tr
205
+ %td 4
206
+ %td Task D
207
+ %td
208
+ %span.label.bg-orange Wait Approvel
209
+ %td John Doe
210
+ %td
211
+ .progress
212
+ .progress-bar.bg-orange{"aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => "95", :role => "progressbar", :style => "width: 95%"}
213
+ %tr
214
+ %td 5
215
+ %td Task E
216
+ %td
217
+ %span.label.bg-red Suspended
218
+ %td John Doe
219
+ %td
220
+ .progress
221
+ .progress-bar.bg-red{"aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => "87", :role => "progressbar", :style => "width: 87%"}
222
+ / #END# Task Info
223
+ / Browser Usage
224
+ .col-xs-12.col-sm-12.col-md-4.col-lg-4
225
+ .card
226
+ .header
227
+ %h2 BROWSER USAGE
228
+ %ul.header-dropdown.m-r--5
229
+ %li.dropdown
230
+ %a.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :href => "javascript:void(0);", :role => "button"}
231
+ %i.material-icons more_vert
232
+ %ul.dropdown-menu.pull-right
233
+ %li
234
+ %a{:href => "javascript:void(0);"} Action
235
+ %li
236
+ %a{:href => "javascript:void(0);"} Another action
237
+ %li
238
+ %a{:href => "javascript:void(0);"} Something else here
239
+ .body
240
+ #donut_chart.dashboard-donut-chart
241
+ / #END# Browser Usage
@@ -0,0 +1,7 @@
1
+ <%
2
+ user = User.find_by :code=> $xvars["select_user"]["code"]
3
+ %>
4
+ Role codes seperated by comma
5
+ <p>
6
+ <%= label_tag :role, "Role" %>
7
+ <%= text_field_tag :role, user.role %>
@@ -0,0 +1,4 @@
1
+ <div class="field" data-role="fieldcontain">
2
+ <%= label_tag :code, 'User code' %>
3
+ <%= select_tag :code, options_from_collection_for_select(User.all.asc(:code), :code, :code), "data-native-menu"=>"false" %>
4
+ </div>
File without changes
@@ -0,0 +1,35 @@
1
+ .box.box-info
2
+ .box-header.with-border
3
+ .box-tools.pull-right
4
+ %button.btn.btn-box-tool{"data-widget" => "collapse", :type => "button"}
5
+ %i.fa.fa-minus
6
+ %button.btn.btn-box-tool{"data-widget" => "remove", :type => "button"}
7
+ %i.fa.fa-times
8
+ / /.box-header
9
+ .box-body
10
+ .table-responsive
11
+ %table.table.no-margin
12
+ %thead
13
+ %tr
14
+ - unless current_ma_user.nil?
15
+ - if current_ma_user.role.include?"A"
16
+ %th Author
17
+ %th Title
18
+ %th Description
19
+ %th Created
20
+ %th Updated
21
+ %th Delete
22
+ %th Edit
23
+ - report.each do |article|
24
+ - user = User.find(article.user_id)
25
+ %tr
26
+ -# if current_ma_user.role.include?"A"
27
+ - unless current_ma_user.nil?
28
+ - if current_ma_user.role.include?"A"
29
+ %td= user.code
30
+ %td= link_to article.title, :controller=>"articles", :action=>"show", :article_id => article.id
31
+ %td= article.text.html_safe
32
+ %td= article.created_at.strftime('%m/%d/%Y')
33
+ %td= article.updated_at.strftime('%m/%d/%Y')
34
+ %td(align='center')= link_to image_tag('delete.png', style:'border:none; float:none;'), {controller: "articles", action: "destroy", article_id: article.id}, data: { confirm: "Please Confirm" }
35
+ %td(align='center')= link_to image_tag('pencil.png', style:'border:none; float:none;'), {controller: "jinda", action: "init", s: 'articles:xedit_article', article_id: article.id}, data: { confirm: "Please Confirm" }
@@ -0,0 +1,23 @@
1
+ - @title= "Edit"
2
+ - @page_title = 'Edit'
3
+ .container
4
+ %div.row::before
5
+ %div.col-md-12
6
+ %h2.display-3.mt-5.pt-5
7
+ = @article.title
8
+ %hr
9
+ = @article.text
10
+ %h4.display-5
11
+ = @article.body.html_safe
12
+
13
+ .container
14
+ .card
15
+ = form_for @article, :html => {:class => "form-horizontal center"} , :article_id => @article.id do |f|
16
+ .form-group
17
+ = f.text_field :title, class: "form-control", :required => true
18
+ .form-group
19
+ = f.text_field :text, class: "form-control", :required => true
20
+ .form-group
21
+ = f.text_area :body, rows: 10, class: "form-control"
22
+ .form-group
23
+ = f.submit "Submit", class: "btn btn-default btn-success"
@@ -0,0 +1,15 @@
1
+ <%
2
+ article = Article.find_by :id=> $xvars["select_article"]["title"]
3
+ %>
4
+ <div class ="module-table">
5
+ <%= fields_for article do |f| %>
6
+ <%= f.label :title, "Title" %>
7
+ <%= f.text_field :title %>
8
+ <%= f.label :text, "Text" %>
9
+ <%= f.text_field :text %>
10
+ <%= f.label :text, "Keywords" %>
11
+ <%= f.text_field :keywords %>
12
+ <%= f.label :body, "Body Content" %>
13
+ <%= f.text_area :body %>
14
+ <% end %>
15
+ </div>
@@ -0,0 +1,12 @@
1
+ <%
2
+ if current_ma_user.role.upcase.split(',').include?("A")
3
+ article = Article.all.desc(:created_at)
4
+ else
5
+ article = Article.where(user: current_ma_user).desc(:created_at)
6
+ end
7
+ %>
8
+ <div class="field" data-role="fieldcontain">
9
+ <%= label_tag :title, 'Article title' %>
10
+ <%= select_tag :title, options_from_collection_for_select(article, :id, :title), "data-native-menu"=>"false" %>
11
+ </div>
12
+
@@ -0,0 +1,5 @@
1
+ - @title= "All Articles"
2
+ %p
3
+ - @page_title = 'All Articlces'
4
+ = render :partial => 'report', locals: { report: @articles}
5
+ = paginate @articles
@@ -0,0 +1,5 @@
1
+ - @title= "My Articles"
2
+ %p
3
+ - @page_title = 'All Articlces'
4
+ = render :partial => 'report', locals: { report: @my_articles}
5
+ = paginate @my_articles
@@ -0,0 +1,16 @@
1
+ <%- @title= 'New Article' %>
2
+ <%
3
+ article = @article
4
+ %>
5
+ <div class ="module-table">
6
+ <%= fields_for article do |f| %>
7
+ <%= f.label :title, "Title" %>
8
+ <%= f.text_field :title, :required => true %>
9
+ <%= f.label :text, "Description" %>
10
+ <%= f.text_field :text, :required => true %>
11
+ <%= f.label :text, "Keywords" %>
12
+ <%= f.text_field :keywords %>
13
+ <%= f.label :body, "Body Content" %>
14
+ <%= f.text_area :body, :required => true %>
15
+ <% end %>
16
+ </div>
@@ -0,0 +1,58 @@
1
+ - title @show[:article][:title]
2
+ - description @show[:article][:text]
3
+ - keywords @show[:article][:keywords]
4
+ .container
5
+ %div.row::before
6
+ %div.col-md-12
7
+ .row-description
8
+ %h2.display-3.mt-5.pt-5
9
+ = @show[:article][:title]
10
+ = link_to image_tag('pencil.png', style:'border:none; float:right;', id: 'article_pen'), {controller: "articles", action: "edit", article_id: @article.id}, data: { confirm: "Please Confirm" }
11
+ %div.font-weight-light
12
+ by
13
+ %img.img-circle{:alt => "User Image", src: @show[:user][:image] }/
14
+ %div.font-weight-light
15
+ = @show[:user][:code]
16
+ %div.font-weight-light
17
+ = @show[:article][:created_at]
18
+ %hr
19
+ = @show[:article][:text]
20
+ %h4.row-body
21
+ = @show[:article][:body].html_safe
22
+ %hr
23
+ - @show[:comments].each do |comment|
24
+ %div#article-comment.ui-corner-all
25
+ .col-md-12
26
+ %div.small-box.bg-white.text-info
27
+ %div.inner
28
+ %div.font-weight-light
29
+ - user_image = get_user_image(comment.user_id)
30
+ %img.comment-user-image{:alt => "User Image", src: user_image}/
31
+
32
+ %div.font-weight-light
33
+ Author:
34
+ %b= comment.name if comment.name
35
+ %div.right-date
36
+ 12/12/2021
37
+ %div#comment-body
38
+ %i= comment.body
39
+
40
+ - if login?
41
+ %hr
42
+ %h4.col-md-12
43
+ Add a comment:
44
+ = form_with(model: [@show[:article], Comment.new], local: true) do |f|
45
+ .form-group
46
+ = f.hidden_field :article_id, :value => @show[:article][:id]
47
+ .form-group
48
+ = f.label :body, "Comment"
49
+ .form-group
50
+ = f.text_area :body, rows: 5, class: "form-control"
51
+ .form-group
52
+ = f.hidden_field :user_id, :value => current_ma_user.id
53
+ .form-group
54
+ = f.hidden_field :name, :value => current_ma_user.code
55
+ .form-group
56
+ = f.hidden_field :image, :value => current_ma_user.image
57
+ .form-group
58
+ = f.submit "Submit", class: "btn btn-default btn-success"