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.
- checksums.yaml +4 -4
- data/README.md +12 -1
- data/app/config/routes.rb +44 -0
- data/lib/generators/jinda/templates/README.md +3 -1
- data/lib/generators/jinda/templates/app/assets/stylesheets/application.css.scss +2 -2
- data/lib/generators/jinda/templates/app/assets/stylesheets/jinda_jqm.css.scss +32 -0
- data/lib/generators/jinda/templates/app/mailers/{application_mailer.rb → application_mailer.rb-org} +0 -0
- data/lib/generators/jinda/templates/config/mongoid.yml +3 -3
- data/lib/jinda/version.rb +1 -1
- data/test/Gemfile +2 -0
- data/test/dummy/Dockerfile +26 -0
- data/test/dummy/Gemfile +99 -0
- data/test/dummy/Gemfile.lock +515 -0
- data/test/dummy/{db/development.sqlite3 → README.md} +0 -0
- data/test/dummy/README.md.bak +24 -0
- data/test/dummy/Rakefile +1 -1
- data/test/dummy/app/assets/config/manifest.js +2 -1
- data/test/dummy/app/assets/config/manifest.js-rails +2 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/{application.css → application.css.bak} +3 -3
- data/test/dummy/app/assets/stylesheets/application.css.scss +15 -0
- data/test/dummy/app/assets/stylesheets/jinda_jqm.css.scss +32 -0
- data/test/dummy/app/controllers/admins_controller.rb +6 -0
- data/test/dummy/app/controllers/api/v1/notes_controller.rb +81 -0
- data/test/dummy/app/controllers/application_controller.rb +39 -0
- data/test/dummy/app/controllers/application_controller.rb.bak +2 -0
- data/test/dummy/app/controllers/articles_controller.rb +110 -0
- data/test/dummy/app/controllers/comments_controller.rb +31 -0
- data/test/dummy/app/controllers/docs_controller.rb +56 -0
- data/test/dummy/app/controllers/identities_controller.rb +5 -0
- data/test/dummy/app/controllers/notes_controller.rb +84 -0
- data/test/dummy/app/controllers/password_resets.rb +28 -0
- data/test/dummy/app/controllers/password_resets_controller.rb +34 -0
- data/test/dummy/app/controllers/sessions_controller.rb +44 -0
- data/test/dummy/app/controllers/sitemap_controller.rb +12 -0
- data/test/dummy/app/controllers/users_controller.rb +35 -0
- data/test/dummy/app/helpers/admins_helper.rb +2 -0
- data/test/dummy/app/helpers/application_helper.rb +31 -0
- data/test/dummy/app/helpers/application_helper.rb.bak +2 -0
- data/test/dummy/app/helpers/articles_helper.rb +2 -0
- data/test/dummy/app/helpers/basic_helper.rb +2 -0
- data/test/dummy/app/helpers/comments_helper.rb +2 -0
- data/test/dummy/app/helpers/ctrs_helper.rb +2 -0
- data/test/dummy/app/helpers/devs_helper.rb +2 -0
- data/test/dummy/app/helpers/pictures_helper.rb +2 -0
- data/test/dummy/app/helpers/sitemap_helper.rb +2 -0
- data/test/dummy/app/helpers/users_helper.rb +2 -0
- data/test/dummy/app/jinda/index.mm +486 -0
- data/test/dummy/app/jinda/template/index.mm +366 -0
- data/test/dummy/app/jinda/template/linkview.haml +21 -0
- data/test/dummy/app/jinda/template/view.html.erb +34 -0
- data/test/dummy/app/mailers/application_mailer.rb +2 -2
- data/test/dummy/app/mailers/application_mailer.rb-org +4 -0
- data/test/dummy/app/mailers/jinda_mailer.rb +7 -0
- data/test/dummy/app/mailers/note_mailer.rb +10 -0
- data/test/dummy/app/mailers/user_mailer.rb +15 -0
- data/test/dummy/app/models/address.rb +14 -0
- data/test/dummy/app/models/article.rb +14 -0
- data/test/dummy/app/models/comment.rb +14 -0
- data/test/dummy/app/models/identity.rb +18 -0
- data/test/dummy/app/models/jinda/doc.rb +36 -0
- data/test/dummy/app/models/jinda/module.rb +11 -0
- data/test/dummy/app/models/jinda/notice.rb +14 -0
- data/test/dummy/app/models/jinda/role.rb +8 -0
- data/test/dummy/app/models/jinda/runseq.rb +24 -0
- data/test/dummy/app/models/jinda/service.rb +17 -0
- data/test/dummy/app/models/jinda/xmain.rb +38 -0
- data/test/dummy/app/models/note.rb +22 -0
- data/test/dummy/app/models/param.rb +41 -0
- data/test/dummy/app/models/person.rb +14 -0
- data/test/dummy/app/models/user.rb +66 -0
- data/test/dummy/app/views/adminbsbs/content.haml +241 -0
- data/test/dummy/app/views/admins/edit_role/edit_role.html.erb +7 -0
- data/test/dummy/app/views/admins/edit_role/select_user.html.erb +4 -0
- data/test/dummy/app/views/api/v1/note.haml +0 -0
- data/test/dummy/app/views/articles/_report.haml +35 -0
- data/test/dummy/app/views/articles/edit.haml +23 -0
- data/test/dummy/app/views/articles/edit_article/edit_article.html.erb +15 -0
- data/test/dummy/app/views/articles/edit_article/select_article.html.erb +12 -0
- data/test/dummy/app/views/articles/index.haml +5 -0
- data/test/dummy/app/views/articles/my.haml +5 -0
- data/test/dummy/app/views/articles/new_article/form_article.html.erb +16 -0
- data/test/dummy/app/views/articles/show.html.haml +58 -0
- data/test/dummy/app/views/articles/xedit_article/edit_article.html.erb +13 -0
- data/test/dummy/app/views/ctrs/vfolder1/viewfile1.html.erb +23 -0
- data/test/dummy/app/views/ctrs/vfolder1/viewfile2.html.erb +23 -0
- data/test/dummy/app/views/ctrs/vfolder2/viewfile2.html.erb +23 -0
- data/test/dummy/app/views/custom/_adsense.haml +6 -0
- data/test/dummy/app/views/docs/doc_edit/doc_edit.html.erb +21 -0
- data/test/dummy/app/views/docs/doc_edit/doc_select.html.erb +14 -0
- data/test/dummy/app/views/docs/doc_new/doc_form.html.erb +32 -0
- data/test/dummy/app/views/docs/doc_new/doc_form.md +36 -0
- data/test/dummy/app/views/docs/doc_xedit/doc_edit.html.erb +21 -0
- data/test/dummy/app/views/docs/edit/select_note.html.erb +14 -0
- data/test/dummy/app/views/docs/index.haml +21 -0
- data/test/dummy/app/views/docs/my.haml +27 -0
- data/test/dummy/app/views/identities/new.html.haml +32 -0
- data/test/dummy/app/views/jinda/_activity.md +10 -0
- data/test/dummy/app/views/jinda/_menu.haml +27 -0
- data/test/dummy/app/views/jinda/_menu_mm.haml +44 -0
- data/test/dummy/app/views/jinda/_model.md +5 -0
- data/test/dummy/app/views/jinda/_modul.md +9 -0
- data/test/dummy/app/views/jinda/_pending_home.haml +5 -0
- data/test/dummy/app/views/jinda/_pending_page.haml +24 -0
- data/test/dummy/app/views/jinda/_service.md +24 -0
- data/test/dummy/app/views/jinda/_static.haml +13 -0
- data/test/dummy/app/views/jinda/doc-thai.md +37 -0
- data/test/dummy/app/views/jinda/doc.md +36 -0
- data/test/dummy/app/views/jinda/error_logs.haml +22 -0
- data/test/dummy/app/views/jinda/feed.rss.builder +27 -0
- data/test/dummy/app/views/jinda/help.haml +20 -0
- data/test/dummy/app/views/jinda/index.html.haml +53 -0
- data/test/dummy/app/views/jinda/logs.haml +22 -0
- data/test/dummy/app/views/jinda/notice_logs.haml +18 -0
- data/test/dummy/app/views/jinda/pending.haml +1 -0
- data/test/dummy/app/views/jinda/run_form.haml +42 -0
- data/test/dummy/app/views/jinda/run_output.haml +38 -0
- data/test/dummy/app/views/jinda/search.haml +20 -0
- data/test/dummy/app/views/jinda/status.haml +61 -0
- data/test/dummy/app/views/jinda_mailer/gmail.html.erb +9 -0
- data/test/dummy/app/views/layouts/_head.html.erb +10 -0
- data/test/dummy/app/views/layouts/_meta_tag.html.erb +19 -0
- data/test/dummy/app/views/layouts/application.haml +4 -0
- data/test/dummy/app/views/layouts/{application.html.erb → application.html.erb.bak} +2 -1
- data/test/dummy/app/views/layouts/bsb/_footer.haml +7 -0
- data/test/dummy/app/views/layouts/bsb/_header.haml +147 -0
- data/test/dummy/app/views/layouts/bsb/_menu.haml +47 -0
- data/test/dummy/app/views/layouts/bsb/_menu_mm.haml +34 -0
- data/test/dummy/app/views/layouts/bsb/_rightbar.haml +123 -0
- data/test/dummy/app/views/layouts/bsb/_sidebar.haml +155 -0
- data/test/dummy/app/views/layouts/bsb/application.haml-bsb +47 -0
- data/test/dummy/app/views/layouts/gmail.html.erb +9 -0
- data/test/dummy/app/views/layouts/jqm/_full.haml +33 -0
- data/test/dummy/app/views/layouts/jqm/_page.haml +16 -0
- data/test/dummy/app/views/layouts/jqm/application.haml-jqm +4 -0
- data/test/dummy/app/views/layouts/mailer.html.haml +3 -0
- data/test/dummy/app/views/layouts/mailer.text.haml +1 -0
- data/test/dummy/app/views/layouts/mobile.html.erb +13 -0
- data/test/dummy/app/views/layouts/mobilejq.html.erb +31 -0
- data/test/dummy/app/views/layouts/print.html.erb +22 -0
- data/test/dummy/app/views/layouts/utf8.html.erb +22 -0
- data/test/dummy/app/views/note_mailer/gmail.html.haml +7 -0
- data/test/dummy/app/views/note_mailer/gmail.text.haml +8 -0
- data/test/dummy/app/views/notes/delete/select_note.html.erb +14 -0
- data/test/dummy/app/views/notes/edit/edit_note.html.erb +10 -0
- data/test/dummy/app/views/notes/edit/select_note.html.erb +14 -0
- data/test/dummy/app/views/notes/index.haml +71 -0
- data/test/dummy/app/views/notes/mail/display_mail.html.erb +20 -0
- data/test/dummy/app/views/notes/mail/select_note.html.erb +19 -0
- data/test/dummy/app/views/notes/mail/show.html.haml +13 -0
- data/test/dummy/app/views/notes/my.haml +21 -0
- data/test/dummy/app/views/notes/new/new_note.html.erb +13 -0
- data/test/dummy/app/views/notes/show.haml +10 -0
- data/test/dummy/app/views/notes/xedit/edit_note.html.erb +10 -0
- data/test/dummy/app/views/password_resets/edit.html.erb +21 -0
- data/test/dummy/app/views/password_resets/new.html.haml +11 -0
- data/test/dummy/app/views/sessions/new.html.haml +22 -0
- data/test/dummy/app/views/sitemap/index.xml.haml +10 -0
- data/test/dummy/app/views/user_mailer/password_reset.html.haml +3 -0
- data/test/dummy/app/views/user_mailer/password_reset.text.erb +3 -0
- data/test/dummy/app/views/user_mailer/password_reset.text.haml +3 -0
- data/test/dummy/app/views/users/index.haml +13 -0
- data/test/dummy/app/views/users/pwd/enter.html.erb +6 -0
- data/test/dummy/app/views/users/user/enter_user.html.erb +10 -0
- data/test/dummy/bin/rails +3 -3
- data/test/dummy/bin/rake +2 -2
- data/test/dummy/bin/setup +9 -17
- data/test/dummy/config/application.rb +51 -9
- data/test/dummy/config/boot.rb +3 -4
- data/test/dummy/config/cloudinary.yml +9 -0
- data/test/dummy/config/credentials.yml.enc +1 -0
- data/test/dummy/config/environment.rb +7 -1
- data/test/dummy/config/environments/development.rb +20 -20
- data/test/dummy/config/environments/production.rb +16 -40
- data/test/dummy/config/environments/test.rb +19 -11
- data/test/dummy/config/initializers/assets.rb +1 -1
- data/test/dummy/config/initializers/content_security_policy.rb +21 -24
- data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -2
- data/test/dummy/config/initializers/fix_mongoid_generator.rb-org +14 -0
- data/test/dummy/config/initializers/inflections.rb +4 -4
- data/test/dummy/config/initializers/jinda.rb +14 -0
- data/test/dummy/config/initializers/mongoid.rb +10 -0
- data/test/dummy/config/initializers/omniauth.rb +17 -0
- data/test/dummy/config/initializers/permissions_policy.rb +11 -0
- data/test/dummy/config/locales/en.yml +3 -3
- data/test/dummy/config/mongoid.yml +196 -0
- data/test/dummy/config/mongoid.yml-docker +182 -0
- data/test/dummy/config/mongoid.yml-localhost +182 -0
- data/test/dummy/config/puma.rb +7 -2
- data/test/dummy/config/routes.rb +5 -1
- data/test/dummy/config.ru +2 -1
- data/test/dummy/db/seeds.rb +6 -0
- data/test/dummy/docker-compose.yml +19 -0
- data/test/dummy/dot/dot.env +2 -0
- data/test/dummy/entrypoint.sh +13 -0
- data/test/dummy/log/development.log +697 -6
- data/test/dummy/public/robots.txt +1 -0
- data/test/dummy/spec/controllers/api/v1_get_index_spec.rb +23 -0
- data/test/dummy/spec/controllers/api/v1_get_my_spec.rb +14 -0
- data/test/dummy/spec/controllers/api/v1_post_spec.rb +19 -0
- data/test/dummy/spec/controllers/sessions_controller_spec.rb +98 -0
- data/test/dummy/spec/features/userlogins_spec.rb +23 -0
- data/test/dummy/spec/mailers/note_spec.rb +24 -0
- data/test/dummy/spec/mailers/previews/note_preview.rb +9 -0
- data/test/dummy/spec/models/note_spec.rb +41 -0
- data/test/dummy/spec/models/user_spec.rb +12 -0
- data/test/dummy/spec/rails_helper.rb +42 -0
- data/test/dummy/spec/spec_helper.rb +80 -0
- data/test/dummy/spec/support/authentication_helper.rb +20 -0
- data/test/dummy/spec/support/databasecleaner.rb +13 -0
- data/test/dummy/spec/support/factory_bot.rb +12 -0
- data/test/dummy/spec/support/omniauth_macros.rb +38 -0
- data/test/dummy/spec/support/request_spec_helper.rb +8 -0
- data/test/dummy/spec/views/articles/_article.html.erb_spec.rbx +14 -0
- data/test/dummy/tmp/development_secret.txt +1 -1
- metadata +188 -17
- data/test/dummy/app/javascript/packs/application.js +0 -15
- data/test/dummy/app/models/application_record.rb +0 -3
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/initializers/application_controller_renderer.rb +0 -8
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/cookies_serializer.rb +0 -5
- data/test/dummy/config/initializers/mime_types.rb +0 -4
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/spring.rb +0 -6
- 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
|
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,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"
|