jinda 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +179 -0
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/generators/jinda/USAGE +2 -0
- data/lib/generators/jinda/install_generator.rb +192 -0
- data/lib/generators/jinda/mongoid_generator.rb +35 -0
- data/lib/generators/jinda/templates/app/assets/config/manifest.js +3 -0
- data/lib/generators/jinda/templates/app/assets/images/4dcity-old.ico +0 -0
- data/lib/generators/jinda/templates/app/assets/images/4dcity.ico +0 -0
- data/lib/generators/jinda/templates/app/assets/images/account.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/add.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/ajax-loader-circle.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/images/ajax-loader.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/images/anchor.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/application_double.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/application_form_edit.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/arrow_left.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/arrow_right.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/arrow_turn_left.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/arrow_turn_right.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/calendar.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/cancel.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/chart_bar.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/clock.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/cog.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/control_fastforward.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/control_play.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/cross.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/delete.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/external-link.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/facebook-button.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/facebook-sign-in-button.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/facebooksmall.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/favicon.ico +0 -0
- data/lib/generators/jinda/templates/app/assets/images/freemind(mm).png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/help.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/highway-menu.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/highway.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/house.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/icons-18-black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/icons-18-white.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/icons-36-black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/icons-36-white.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/logo.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/logo_jinda.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/logout.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/new.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/images/new.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page_attach.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page_green.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page_output.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page_pdf.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/pencil.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/printer.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/refresh.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/report.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/rssmall.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/tick.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/twittersmall.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/user.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/view_code.png +0 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/application.js +26 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/cable.js +13 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jqm/application.js-jqm +26 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jqm/disable_enter_key.js +10 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jqm/iscroll-wrapper.js +32 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jqm/iscroll.js +1084 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jqm/jinda.js +14 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jqm/jquery.mobile-1.2.1.js +9272 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jqm/jquery.mobile.datebox.js +1772 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jqm/jquery.mobile.splitview.js +695 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/application.scss +30 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_bold.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_bolditalic.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_italic.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew.css +47 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/ajax-loader.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_blue.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_red.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-18-black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-18-white.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-36-black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-36-white.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/indicator.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/application.scss-jqm +30 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/articles.scss +84 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jinda.css +138 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jquery.mobile-1.2.1.css +2339 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jquery.mobile.datebox.css +65 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jquery.mobile.grids.collapsible.css +122 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/jquery.mobile.splitview.css +128 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/kul-4.2.css +1516 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/kul-4.2.min.css +11 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/rouge.css.erb +11 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jqm/sarabun.css +37 -0
- data/lib/generators/jinda/templates/app/channels/application_cable/channel.rb +4 -0
- data/lib/generators/jinda/templates/app/channels/application_cable/connection.rb +4 -0
- data/lib/generators/jinda/templates/app/controllers/admins_controller.rb +6 -0
- data/lib/generators/jinda/templates/app/controllers/application_controller.rb +40 -0
- data/lib/generators/jinda/templates/app/controllers/articles_controller.rb +67 -0
- data/lib/generators/jinda/templates/app/controllers/comments_controller.rb +17 -0
- data/lib/generators/jinda/templates/app/controllers/ctrs_controller.rb +2 -0
- data/lib/generators/jinda/templates/app/controllers/devs_controller.rb +2 -0
- data/lib/generators/jinda/templates/app/controllers/identities_controller.rb +5 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_controller.rb +537 -0
- data/lib/generators/jinda/templates/app/controllers/password_resets.rb +28 -0
- data/lib/generators/jinda/templates/app/controllers/password_resets_controller.rb +34 -0
- data/lib/generators/jinda/templates/app/controllers/sessions_controller.rb +37 -0
- data/lib/generators/jinda/templates/app/controllers/sitemap_controller.rb +12 -0
- data/lib/generators/jinda/templates/app/controllers/users_controller.rb +34 -0
- data/lib/generators/jinda/templates/app/helpers/admins_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/application_helper.rb +33 -0
- data/lib/generators/jinda/templates/app/helpers/articles_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/basic_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/comments_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/ctrs_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/devs_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/pictures_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/sitemap_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/users_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/jinda/index.mm +189 -0
- data/lib/generators/jinda/templates/app/jinda/template/view.html.erb +23 -0
- data/lib/generators/jinda/templates/app/jobs/application_job.rb +2 -0
- data/lib/generators/jinda/templates/app/mailers/application_mailer.rb +4 -0
- data/lib/generators/jinda/templates/app/mailers/jinda_mailer.rb +7 -0
- data/lib/generators/jinda/templates/app/mailers/user_mailer.rb +15 -0
- data/lib/generators/jinda/templates/app/models/address.rb +14 -0
- data/lib/generators/jinda/templates/app/models/article.rb +14 -0
- data/lib/generators/jinda/templates/app/models/ckeditor/asset.rb +5 -0
- data/lib/generators/jinda/templates/app/models/ckeditor/attachment_file.rb +13 -0
- data/lib/generators/jinda/templates/app/models/ckeditor/picture.rb +14 -0
- data/lib/generators/jinda/templates/app/models/comment.rb +11 -0
- data/lib/generators/jinda/templates/app/models/identity.rb +16 -0
- data/lib/generators/jinda/templates/app/models/jinda/doc.rb +31 -0
- data/lib/generators/jinda/templates/app/models/jinda/module.rb +11 -0
- data/lib/generators/jinda/templates/app/models/jinda/notice.rb +14 -0
- data/lib/generators/jinda/templates/app/models/jinda/role.rb +8 -0
- data/lib/generators/jinda/templates/app/models/jinda/runseq.rb +24 -0
- data/lib/generators/jinda/templates/app/models/jinda/service.rb +17 -0
- data/lib/generators/jinda/templates/app/models/jinda/xmain.rb +38 -0
- data/lib/generators/jinda/templates/app/models/param.rb +41 -0
- data/lib/generators/jinda/templates/app/models/person.rb +14 -0
- data/lib/generators/jinda/templates/app/models/user.rb +59 -0
- data/lib/generators/jinda/templates/app/views/adminbsbs/content.haml +241 -0
- data/lib/generators/jinda/templates/app/views/admins/edit_role/edit_role.html.erb +7 -0
- data/lib/generators/jinda/templates/app/views/admins/edit_role/select_user.html.erb +4 -0
- data/lib/generators/jinda/templates/app/views/articles/edit.haml +12 -0
- data/lib/generators/jinda/templates/app/views/articles/edit_article/edit_article.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/articles/edit_article/select_article.html.erb +12 -0
- data/lib/generators/jinda/templates/app/views/articles/index.haml +23 -0
- data/lib/generators/jinda/templates/app/views/articles/my.haml +21 -0
- data/lib/generators/jinda/templates/app/views/articles/new_article/form_article.html.erb +14 -0
- data/lib/generators/jinda/templates/app/views/articles/show.html.haml +24 -0
- data/lib/generators/jinda/templates/app/views/articles/xedit_article/edit_article.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/articles/xedit_article/xedit_article.html.erb +11 -0
- data/lib/generators/jinda/templates/app/views/ctrs/vfolder1/viewfile1.html.erb +23 -0
- data/lib/generators/jinda/templates/app/views/ctrs/vfolder1/viewfile2.html.erb +23 -0
- data/lib/generators/jinda/templates/app/views/ctrs/vfolder2/viewfile2.html.erb +23 -0
- data/lib/generators/jinda/templates/app/views/custom/_adsense.haml +6 -0
- data/lib/generators/jinda/templates/app/views/identities/new.html.erb +30 -0
- data/lib/generators/jinda/templates/app/views/jinda/_activity.md +10 -0
- data/lib/generators/jinda/templates/app/views/jinda/_menu.haml +24 -0
- data/lib/generators/jinda/templates/app/views/jinda/_menu_mm.haml +29 -0
- data/lib/generators/jinda/templates/app/views/jinda/_model.md +5 -0
- data/lib/generators/jinda/templates/app/views/jinda/_modul.md +9 -0
- data/lib/generators/jinda/templates/app/views/jinda/_pending_home.haml +5 -0
- data/lib/generators/jinda/templates/app/views/jinda/_pending_page.haml +24 -0
- data/lib/generators/jinda/templates/app/views/jinda/_service.md +24 -0
- data/lib/generators/jinda/templates/app/views/jinda/_static.haml +23 -0
- data/lib/generators/jinda/templates/app/views/jinda/doc-thai.md +37 -0
- data/lib/generators/jinda/templates/app/views/jinda/doc.md +36 -0
- data/lib/generators/jinda/templates/app/views/jinda/error_logs.haml +22 -0
- data/lib/generators/jinda/templates/app/views/jinda/feed.rss.builder +27 -0
- data/lib/generators/jinda/templates/app/views/jinda/help.haml +20 -0
- data/lib/generators/jinda/templates/app/views/jinda/index.html.haml +39 -0
- data/lib/generators/jinda/templates/app/views/jinda/logs.haml +22 -0
- data/lib/generators/jinda/templates/app/views/jinda/pending.haml +1 -0
- data/lib/generators/jinda/templates/app/views/jinda/run_form.haml +37 -0
- data/lib/generators/jinda/templates/app/views/jinda/run_output.haml +38 -0
- data/lib/generators/jinda/templates/app/views/jinda/search.haml +20 -0
- data/lib/generators/jinda/templates/app/views/jinda/status.haml +61 -0
- data/lib/generators/jinda/templates/app/views/jinda_mailer/gmail.html.erb +9 -0
- data/lib/generators/jinda/templates/app/views/layouts/_head.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/layouts/_meta_tags.html.erb +5 -0
- data/lib/generators/jinda/templates/app/views/layouts/_metatag.html.erb +19 -0
- data/lib/generators/jinda/templates/app/views/layouts/application.haml +4 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_footer.haml +7 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_header.haml +147 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu.haml +47 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu_mm.haml +34 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_rightbar.haml +123 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_sidebar.haml +155 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/application.haml-bsb +47 -0
- data/lib/generators/jinda/templates/app/views/layouts/gmail.html.erb +9 -0
- data/lib/generators/jinda/templates/app/views/layouts/jqm/_full.haml +41 -0
- data/lib/generators/jinda/templates/app/views/layouts/jqm/_page.haml +16 -0
- data/lib/generators/jinda/templates/app/views/layouts/jqm/application.haml-jqm +4 -0
- data/lib/generators/jinda/templates/app/views/layouts/mailer.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/layouts/mailer.html.haml +3 -0
- data/lib/generators/jinda/templates/app/views/layouts/mailer.text.erb +1 -0
- data/lib/generators/jinda/templates/app/views/layouts/mailer.text.haml +1 -0
- data/lib/generators/jinda/templates/app/views/layouts/mobile.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/layouts/mobilejq.html.erb +31 -0
- data/lib/generators/jinda/templates/app/views/layouts/print.html.erb +22 -0
- data/lib/generators/jinda/templates/app/views/layouts/utf8.html.erb +22 -0
- data/lib/generators/jinda/templates/app/views/new.html.erb +7 -0
- data/lib/generators/jinda/templates/app/views/password_resets/edit.html.erb +21 -0
- data/lib/generators/jinda/templates/app/views/password_resets/new.html.erb +7 -0
- data/lib/generators/jinda/templates/app/views/sessions/new.html.erb +16 -0
- data/lib/generators/jinda/templates/app/views/sitemap/index.xml.haml +10 -0
- data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.html.haml +3 -0
- data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.text.erb +3 -0
- data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.text.haml +3 -0
- data/lib/generators/jinda/templates/app/views/users/index.haml +13 -0
- data/lib/generators/jinda/templates/app/views/users/pwd/enter.html.erb +6 -0
- data/lib/generators/jinda/templates/app/views/users/user/enter_user.html.erb +8 -0
- data/lib/generators/jinda/templates/cloudinary.yml +9 -0
- data/lib/generators/jinda/templates/jinda.yml +10 -0
- data/lib/generators/jinda/templates/public/404.html +67 -0
- data/lib/generators/jinda/templates/public/422.html +67 -0
- data/lib/generators/jinda/templates/public/500.html +66 -0
- data/lib/generators/jinda/templates/public/assets/images/logo.png +0 -0
- data/lib/generators/jinda/templates/public/favicon.ico +0 -0
- data/lib/generators/jinda/templates/public/robots.txt +3 -0
- data/lib/generators/jinda/templates/seeds.rb +6 -0
- data/lib/generators/jinda/templates/spec/controllers/admins_controller_spec.rb +5 -0
- data/lib/generators/jinda/templates/spec/controllers/devs_controller_spec.rb +5 -0
- data/lib/generators/jinda/templates/spec/controllers/users_controller_spec.rb +5 -0
- data/lib/generators/jinda/templates/spec/helpers/admins_helper_spec.rb +15 -0
- data/lib/generators/jinda/templates/spec/helpers/devs_helper_spec.rb +15 -0
- data/lib/generators/jinda/templates/spec/helpers/users_helper_spec.rb +15 -0
- data/lib/generators/jinda/templates/spec/spec_helper.rb +38 -0
- data/lib/jinda.rb +6 -0
- data/lib/jinda/helpers.rb +517 -0
- data/lib/jinda/railtie.rb +18 -0
- data/lib/jinda/version.rb +3 -0
- data/lib/tasks/jinda.rake +202 -0
- data/test/jinda_test.rb +7 -0
- data/test/test_helper.rb +4 -0
- metadata +345 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<style>
|
|
7
|
+
.rails-default-error-page {
|
|
8
|
+
background-color: #EFEFEF;
|
|
9
|
+
color: #2E2F30;
|
|
10
|
+
text-align: center;
|
|
11
|
+
font-family: arial, sans-serif;
|
|
12
|
+
margin: 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.rails-default-error-page div.dialog {
|
|
16
|
+
width: 95%;
|
|
17
|
+
max-width: 33em;
|
|
18
|
+
margin: 4em auto 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.rails-default-error-page div.dialog > div {
|
|
22
|
+
border: 1px solid #CCC;
|
|
23
|
+
border-right-color: #999;
|
|
24
|
+
border-left-color: #999;
|
|
25
|
+
border-bottom-color: #BBB;
|
|
26
|
+
border-top: #B00100 solid 4px;
|
|
27
|
+
border-top-left-radius: 9px;
|
|
28
|
+
border-top-right-radius: 9px;
|
|
29
|
+
background-color: white;
|
|
30
|
+
padding: 7px 12% 0;
|
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.rails-default-error-page h1 {
|
|
35
|
+
font-size: 100%;
|
|
36
|
+
color: #730E15;
|
|
37
|
+
line-height: 1.5em;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.rails-default-error-page div.dialog > p {
|
|
41
|
+
margin: 0 0 1em;
|
|
42
|
+
padding: 1em;
|
|
43
|
+
background-color: #F7F7F7;
|
|
44
|
+
border: 1px solid #CCC;
|
|
45
|
+
border-right-color: #999;
|
|
46
|
+
border-left-color: #999;
|
|
47
|
+
border-bottom-color: #999;
|
|
48
|
+
border-bottom-left-radius: 4px;
|
|
49
|
+
border-bottom-right-radius: 4px;
|
|
50
|
+
border-top-color: #DADADA;
|
|
51
|
+
color: #666;
|
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
55
|
+
</head>
|
|
56
|
+
|
|
57
|
+
<body class="rails-default-error-page">
|
|
58
|
+
<!-- This file lives in public/422.html -->
|
|
59
|
+
<div class="dialog">
|
|
60
|
+
<div>
|
|
61
|
+
<h1>The change you wanted was rejected.</h1>
|
|
62
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
|
63
|
+
</div>
|
|
64
|
+
<p>If you are the application owner check the logs for more information.</p>
|
|
65
|
+
</div>
|
|
66
|
+
</body>
|
|
67
|
+
</html>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<style>
|
|
7
|
+
.rails-default-error-page {
|
|
8
|
+
background-color: #EFEFEF;
|
|
9
|
+
color: #2E2F30;
|
|
10
|
+
text-align: center;
|
|
11
|
+
font-family: arial, sans-serif;
|
|
12
|
+
margin: 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.rails-default-error-page div.dialog {
|
|
16
|
+
width: 95%;
|
|
17
|
+
max-width: 33em;
|
|
18
|
+
margin: 4em auto 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.rails-default-error-page div.dialog > div {
|
|
22
|
+
border: 1px solid #CCC;
|
|
23
|
+
border-right-color: #999;
|
|
24
|
+
border-left-color: #999;
|
|
25
|
+
border-bottom-color: #BBB;
|
|
26
|
+
border-top: #B00100 solid 4px;
|
|
27
|
+
border-top-left-radius: 9px;
|
|
28
|
+
border-top-right-radius: 9px;
|
|
29
|
+
background-color: white;
|
|
30
|
+
padding: 7px 12% 0;
|
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.rails-default-error-page h1 {
|
|
35
|
+
font-size: 100%;
|
|
36
|
+
color: #730E15;
|
|
37
|
+
line-height: 1.5em;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.rails-default-error-page div.dialog > p {
|
|
41
|
+
margin: 0 0 1em;
|
|
42
|
+
padding: 1em;
|
|
43
|
+
background-color: #F7F7F7;
|
|
44
|
+
border: 1px solid #CCC;
|
|
45
|
+
border-right-color: #999;
|
|
46
|
+
border-left-color: #999;
|
|
47
|
+
border-bottom-color: #999;
|
|
48
|
+
border-bottom-left-radius: 4px;
|
|
49
|
+
border-bottom-right-radius: 4px;
|
|
50
|
+
border-top-color: #DADADA;
|
|
51
|
+
color: #666;
|
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
55
|
+
</head>
|
|
56
|
+
|
|
57
|
+
<body class="rails-default-error-page">
|
|
58
|
+
<!-- This file lives in public/500.html -->
|
|
59
|
+
<div class="dialog">
|
|
60
|
+
<div>
|
|
61
|
+
<h1>We're sorry, but something went wrong.</h1>
|
|
62
|
+
</div>
|
|
63
|
+
<p>If you are the application owner check the logs for more information.</p>
|
|
64
|
+
</div>
|
|
65
|
+
</body>
|
|
66
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
unless Identity.where(code:"admin").exists?
|
|
2
|
+
identity= Identity.create :code => "admin", :email => "admin@test.com", :password => "secret",
|
|
3
|
+
:password_confirmation => "secret"
|
|
4
|
+
User.create :provider => "identity", :uid => identity.id.to_s, :code => identity.code,
|
|
5
|
+
:email => identity.email, :role => "M,A,D"
|
|
6
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
# Specs in this file have access to a helper object that includes
|
|
4
|
+
# the AdminsHelper. For example:
|
|
5
|
+
#
|
|
6
|
+
# describe AdminsHelper do
|
|
7
|
+
# describe "string concat" do
|
|
8
|
+
# it "concats two strings with spaces" do
|
|
9
|
+
# helper.concat_strings("this","that").should == "this that"
|
|
10
|
+
# end
|
|
11
|
+
# end
|
|
12
|
+
# end
|
|
13
|
+
describe AdminsHelper do
|
|
14
|
+
pending "add some examples to (or delete) #{__FILE__}"
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
# Specs in this file have access to a helper object that includes
|
|
4
|
+
# the DevsHelper. For example:
|
|
5
|
+
#
|
|
6
|
+
# describe DevsHelper do
|
|
7
|
+
# describe "string concat" do
|
|
8
|
+
# it "concats two strings with spaces" do
|
|
9
|
+
# helper.concat_strings("this","that").should == "this that"
|
|
10
|
+
# end
|
|
11
|
+
# end
|
|
12
|
+
# end
|
|
13
|
+
describe DevsHelper do
|
|
14
|
+
pending "add some examples to (or delete) #{__FILE__}"
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
# Specs in this file have access to a helper object that includes
|
|
4
|
+
# the UsersHelper. For example:
|
|
5
|
+
#
|
|
6
|
+
# describe UsersHelper do
|
|
7
|
+
# describe "string concat" do
|
|
8
|
+
# it "concats two strings with spaces" do
|
|
9
|
+
# helper.concat_strings("this","that").should == "this that"
|
|
10
|
+
# end
|
|
11
|
+
# end
|
|
12
|
+
# end
|
|
13
|
+
describe UsersHelper do
|
|
14
|
+
pending "add some examples to (or delete) #{__FILE__}"
|
|
15
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
|
2
|
+
REQUEST.ENV["RAILS_ENV"] ||= 'test'
|
|
3
|
+
require File.expand_path("../../config/environment", __FILE__)
|
|
4
|
+
require 'rspec/rails'
|
|
5
|
+
require 'rspec/autorun'
|
|
6
|
+
|
|
7
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
|
8
|
+
# in spec/support/ and its subdirectories.
|
|
9
|
+
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
|
|
10
|
+
|
|
11
|
+
RSpec.configure do |config|
|
|
12
|
+
# ## Mock Framework
|
|
13
|
+
#
|
|
14
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
|
15
|
+
#
|
|
16
|
+
# config.mock_with :mocha
|
|
17
|
+
# config.mock_with :flexmock
|
|
18
|
+
# config.mock_with :rr
|
|
19
|
+
|
|
20
|
+
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
|
21
|
+
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
|
22
|
+
|
|
23
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
|
24
|
+
# examples within a transaction, remove the following line or assign false
|
|
25
|
+
# instead of true.
|
|
26
|
+
config.use_transactional_fixtures = true
|
|
27
|
+
|
|
28
|
+
# If true, the base class of anonymous controllers will be inferred
|
|
29
|
+
# automatically. This will be the default behavior in future versions of
|
|
30
|
+
# rspec-rails.
|
|
31
|
+
config.infer_base_class_for_anonymous_controllers = false
|
|
32
|
+
|
|
33
|
+
# Run specs in random order to surface order dependencies. If you find an
|
|
34
|
+
# order dependency and want to debug it, you can fix the order by providing
|
|
35
|
+
# the seed, which is printed after each run.
|
|
36
|
+
# --seed 1234
|
|
37
|
+
config.order = "random"
|
|
38
|
+
end
|
data/lib/jinda.rb
ADDED
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
|
2
|
+
module Jinda
|
|
3
|
+
module Helpers
|
|
4
|
+
require "rexml/document"
|
|
5
|
+
include REXML
|
|
6
|
+
# methods from application_controller
|
|
7
|
+
def b(s)
|
|
8
|
+
"<b>#{s}</b>".html_safe
|
|
9
|
+
end
|
|
10
|
+
def date_thai(d= Time.now, options={})
|
|
11
|
+
unless d
|
|
12
|
+
""
|
|
13
|
+
else
|
|
14
|
+
y = d.year+543
|
|
15
|
+
if options[:monthfull] || options[:month_full]
|
|
16
|
+
mh= ['มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฏาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม']
|
|
17
|
+
else
|
|
18
|
+
mh= ['ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.']
|
|
19
|
+
end
|
|
20
|
+
if options[:dateonly] || options[:date_only]
|
|
21
|
+
d.day.to_s+" "+mh[d.month-1]+" "+y.to_s
|
|
22
|
+
else
|
|
23
|
+
d.day.to_s+" "+mh[d.month-1]+" "+y.to_s+" เวลา "+sprintf("%02d",d.hour.to_s)+":"+sprintf("%02d",d.min.to_s)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
def link_to_blank(body, url_options = {}, html_options = {})
|
|
28
|
+
link_to(body, url_options, html_options.merge(target: "_blank"))
|
|
29
|
+
end
|
|
30
|
+
def code_text(s) # old def code(s)
|
|
31
|
+
"<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'>#{s}</code></pre>".html_safe
|
|
32
|
+
end
|
|
33
|
+
def refresh_to(url='/', option={})
|
|
34
|
+
if option[:alert]
|
|
35
|
+
ma_log option[:alert]
|
|
36
|
+
end
|
|
37
|
+
render inline: "<script>window.location.replace('#{url}')</script>"
|
|
38
|
+
end
|
|
39
|
+
def read_binary(path)
|
|
40
|
+
File.open path, "rb" do |f| f.read end
|
|
41
|
+
end
|
|
42
|
+
def redirect_to_root
|
|
43
|
+
redirect_to root_path
|
|
44
|
+
end
|
|
45
|
+
def get_option(opt, runseq=@runseq)
|
|
46
|
+
xml= REXML::Document.new(runseq.xml).root
|
|
47
|
+
url=''
|
|
48
|
+
xml.each_element('///node') do |n|
|
|
49
|
+
text= n.attributes['TEXT']
|
|
50
|
+
url= text if text =~/^#{opt}:\s*/
|
|
51
|
+
end
|
|
52
|
+
c, h= url.split(':', 2)
|
|
53
|
+
opt= h ? h.strip : false
|
|
54
|
+
end
|
|
55
|
+
def ma_comment?(s)
|
|
56
|
+
s[0]==35
|
|
57
|
+
end
|
|
58
|
+
def get_ip
|
|
59
|
+
request.env['HTTP_X_FORWARDED_FOR'] || request.env['REMOTE_ADDR']
|
|
60
|
+
end
|
|
61
|
+
def get_default_role
|
|
62
|
+
default_role= Jinda::Role.where(:code =>'default').first
|
|
63
|
+
return default_role ? default_role.name.to_s : ''
|
|
64
|
+
end
|
|
65
|
+
def name2code(s)
|
|
66
|
+
# rather not ignore # symbol cause it could be comment
|
|
67
|
+
code, name = s.split(':')
|
|
68
|
+
code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
|
|
69
|
+
end
|
|
70
|
+
def name2camel(s)
|
|
71
|
+
s.gsub(' ','_').camelcase
|
|
72
|
+
end
|
|
73
|
+
def true_action?(s)
|
|
74
|
+
%w(call ws redirect invoke email).include? s
|
|
75
|
+
end
|
|
76
|
+
def set_global
|
|
77
|
+
$xmain= @xmain ; $runseq = @runseq ; $user = current_ma_user ; $xvars= @xmain.xvars; $ip = request.env["REMOTE_ADDR"]
|
|
78
|
+
end
|
|
79
|
+
def authorize? # use in pending tasks
|
|
80
|
+
@runseq= @xmain.runseqs.find @xmain.current_runseq
|
|
81
|
+
return false unless @runseq
|
|
82
|
+
@user = current_ma_user
|
|
83
|
+
set_global
|
|
84
|
+
return false unless eval(@runseq.rule) if @runseq.rule
|
|
85
|
+
return true if true_action?(@runseq.action)
|
|
86
|
+
# return false if check_wait
|
|
87
|
+
return true if @runseq.role.blank?
|
|
88
|
+
unless @runseq.role.empty?
|
|
89
|
+
return false unless @user.role
|
|
90
|
+
return @user.role.upcase.split(',').include?(@runseq.role.upcase)
|
|
91
|
+
end
|
|
92
|
+
return true
|
|
93
|
+
end
|
|
94
|
+
def authorize_init? # use when initialize new transaction
|
|
95
|
+
# check module role
|
|
96
|
+
mrole = @service.module.role
|
|
97
|
+
return false if mrole && !current_ma_user
|
|
98
|
+
return false if mrole && !current_ma_user.has_role(mrole)
|
|
99
|
+
|
|
100
|
+
# check step 1 role
|
|
101
|
+
xml= @service.xml
|
|
102
|
+
step1 = REXML::Document.new(xml).root.elements['node']
|
|
103
|
+
role= get_option_xml("role", step1) || ""
|
|
104
|
+
# rule= get_option_xml("rule", step1) || true
|
|
105
|
+
return true if role==""
|
|
106
|
+
unless current_ma_user
|
|
107
|
+
return role.blank?
|
|
108
|
+
else
|
|
109
|
+
return false unless current_ma_user.role
|
|
110
|
+
return current_ma_user.has_role(role)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
def ma_log(message)
|
|
114
|
+
Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
|
|
115
|
+
:unread=> true, :ip=> ($ip || request.env["REMOTE_ADDR"])
|
|
116
|
+
# if session[:user_id]
|
|
117
|
+
# Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
|
|
118
|
+
# :user_id => $user.id, :unread=> true, :ip=>request.env["REMOTE_ADDR"]
|
|
119
|
+
# else
|
|
120
|
+
# Jinda::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
|
|
121
|
+
# :unread=> true, :ip=>request.env["REMOTE_ADDR"]
|
|
122
|
+
# end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
alias :ma_notice :ma_log
|
|
126
|
+
|
|
127
|
+
# methods from application_helper
|
|
128
|
+
def markdown(text)
|
|
129
|
+
erbified = ERB.new(text.html_safe).result(binding)
|
|
130
|
+
red = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
|
|
131
|
+
red.render(erbified).html_safe
|
|
132
|
+
end
|
|
133
|
+
def align_text(s, pixel=3)
|
|
134
|
+
"<span style='position:relative; top:-#{pixel}px;'>#{s}</span>".html_safe
|
|
135
|
+
end
|
|
136
|
+
def status_icon(status)
|
|
137
|
+
case status
|
|
138
|
+
when 'R'
|
|
139
|
+
image_tag 'user.png'
|
|
140
|
+
when 'F'
|
|
141
|
+
image_tag 'tick.png'
|
|
142
|
+
when 'I'
|
|
143
|
+
image_tag 'control_play.png'
|
|
144
|
+
when 'E'
|
|
145
|
+
image_tag 'logout.png'
|
|
146
|
+
when 'X'
|
|
147
|
+
image_tag 'cross.png'
|
|
148
|
+
else
|
|
149
|
+
image_tag 'cancel.png'
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
def role_name(code)
|
|
153
|
+
role= Jinda::Role.where(code:code).first
|
|
154
|
+
return role ? role.name : ""
|
|
155
|
+
end
|
|
156
|
+
def uncomment(s)
|
|
157
|
+
s.sub(/^#\s/,'')
|
|
158
|
+
end
|
|
159
|
+
def code_div(s)
|
|
160
|
+
"<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'> #{s}</code></pre>".html_safe
|
|
161
|
+
end
|
|
162
|
+
def ajax?(s)
|
|
163
|
+
return s.match('file_field') ? false : true
|
|
164
|
+
end
|
|
165
|
+
def step(s, total) # square text
|
|
166
|
+
s = (s==0)? 1: s.to_i
|
|
167
|
+
total = total.to_i
|
|
168
|
+
out ="<div class='step'>"
|
|
169
|
+
(s-1).times {|ss| out += "<span class='steps_done'>#{(ss+1)}</span>" }
|
|
170
|
+
out += %Q@<span class='step_now' >@
|
|
171
|
+
out += s.to_s
|
|
172
|
+
out += "</span>"
|
|
173
|
+
out += %Q@@
|
|
174
|
+
for i in s+1..total
|
|
175
|
+
out += "<span class='steps_more'>#{i}</span>"
|
|
176
|
+
end
|
|
177
|
+
out += "</div>"
|
|
178
|
+
out.html_safe
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def current_ma_user
|
|
182
|
+
# if session[:user_id]
|
|
183
|
+
# return @user ||= User.find(session[:user_id]['$oid'])
|
|
184
|
+
# else
|
|
185
|
+
# return nil
|
|
186
|
+
# end
|
|
187
|
+
#@user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
|
|
188
|
+
@user ||= User.where(:auth_token => cookies[:auth_token]).first if cookies[:auth_token]
|
|
189
|
+
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def ui_action?(s)
|
|
193
|
+
%w(form output mail pdf).include? s
|
|
194
|
+
end
|
|
195
|
+
# def handle_ma_notice
|
|
196
|
+
# if Jinda::Notice.recent.count>0
|
|
197
|
+
# notice= Jinda::Notice.recent.last
|
|
198
|
+
# notice.update_attribute :unread, false
|
|
199
|
+
# "<script>notice('#{notice.message}');</script>"
|
|
200
|
+
# else
|
|
201
|
+
# ""
|
|
202
|
+
# end
|
|
203
|
+
# end
|
|
204
|
+
def process_services
|
|
205
|
+
# todo: persist mm_md5
|
|
206
|
+
xml= @app||get_app
|
|
207
|
+
if defined? session
|
|
208
|
+
md5= Digest::MD5.hexdigest(xml.to_s)
|
|
209
|
+
if session[:mm_md5]
|
|
210
|
+
return if session[:mm_md5]==md5
|
|
211
|
+
else
|
|
212
|
+
session[:mm_md5]= md5
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
protected_services = []
|
|
216
|
+
protected_modules = []
|
|
217
|
+
mseq= 0
|
|
218
|
+
@services= xml.elements["//node[@TEXT='services']"] || REXML::Document.new
|
|
219
|
+
@services.each_element('node') do |m|
|
|
220
|
+
ss= m.attributes["TEXT"]
|
|
221
|
+
code, name= ss.split(':', 2)
|
|
222
|
+
next if code.blank?
|
|
223
|
+
next if code.comment?
|
|
224
|
+
module_code= code.to_code
|
|
225
|
+
# create or update to GmaModule
|
|
226
|
+
ma_module= Jinda::Module.find_or_create_by :code=>module_code
|
|
227
|
+
ma_module.update_attributes :uid=>ma_module.id.to_s
|
|
228
|
+
protected_modules << ma_module.uid
|
|
229
|
+
name = module_code if name.blank?
|
|
230
|
+
ma_module.update_attributes :name=> name.strip, :seq=> mseq
|
|
231
|
+
mseq += 1
|
|
232
|
+
seq= 0
|
|
233
|
+
m.each_element('node') do |s|
|
|
234
|
+
service_name= s.attributes["TEXT"].to_s
|
|
235
|
+
scode, sname= service_name.split(':', 2)
|
|
236
|
+
sname ||= scode; sname.strip!
|
|
237
|
+
scode= scode.to_code
|
|
238
|
+
if scode=="role"
|
|
239
|
+
ma_module.update_attribute :role, sname
|
|
240
|
+
next
|
|
241
|
+
end
|
|
242
|
+
if scode.downcase=="link"
|
|
243
|
+
role= get_option_xml("role", s) || ""
|
|
244
|
+
rule= get_option_xml("rule", s) || ""
|
|
245
|
+
ma_service= Jinda::Service.find_or_create_by :module_code=> ma_module.code, :code=> scode, :name=> sname
|
|
246
|
+
ma_service.update_attributes :xml=>s.to_s, :name=>sname,
|
|
247
|
+
:list=>listed(s), :ma_secured=>ma_secured?(s),
|
|
248
|
+
:module_id=>ma_module.id, :seq => seq,
|
|
249
|
+
:confirm=> get_option_xml("confirm", xml),
|
|
250
|
+
:role => role, :rule => rule, :uid=> ma_service.id.to_s
|
|
251
|
+
seq += 1
|
|
252
|
+
protected_services << ma_service.uid
|
|
253
|
+
else
|
|
254
|
+
# normal service
|
|
255
|
+
step1 = s.elements['node']
|
|
256
|
+
role= get_option_xml("role", step1) || ""
|
|
257
|
+
rule= get_option_xml("rule", step1) || ""
|
|
258
|
+
ma_service= Jinda::Service.find_or_create_by :module_code=> ma_module.code, :code=> scode
|
|
259
|
+
ma_service.update_attributes :xml=>s.to_s, :name=>sname,
|
|
260
|
+
:list=>listed(s), :ma_secured=>ma_secured?(s),
|
|
261
|
+
:module_id=>ma_module.id, :seq => seq,
|
|
262
|
+
:confirm=> get_option_xml("confirm", xml),
|
|
263
|
+
:role => role, :rule => rule, :uid=> ma_service.id.to_s
|
|
264
|
+
seq += 1
|
|
265
|
+
protected_services << ma_service.uid
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
Jinda::Module.not_in(:uid=>protected_modules).delete_all
|
|
270
|
+
Jinda::Service.not_in(:uid=>protected_services).delete_all
|
|
271
|
+
end
|
|
272
|
+
def get_app
|
|
273
|
+
f= MM || "#{Rails.root}/app/jinda/index.mm"
|
|
274
|
+
dir= File.dirname(f)
|
|
275
|
+
t= REXML::Document.new(File.read(MM).gsub("\n","")).root
|
|
276
|
+
recheck= true ; first_pass= true
|
|
277
|
+
while recheck
|
|
278
|
+
recheck= false
|
|
279
|
+
t.elements.each("//node") do |n|
|
|
280
|
+
if n.attributes['LINK'] # has attached file
|
|
281
|
+
if first_pass
|
|
282
|
+
f= "#{dir}/#{n.attributes['LINK']}"
|
|
283
|
+
else
|
|
284
|
+
f= n.attributes['LINK']
|
|
285
|
+
end
|
|
286
|
+
next unless File.exists?(f)
|
|
287
|
+
tt= REXML::Document.new(File.read(f).gsub("\n","")).root.elements["node"]
|
|
288
|
+
make_folders_absolute(f,tt)
|
|
289
|
+
tt.elements.each("node") do |tt_node|
|
|
290
|
+
n.parent.insert_before n, tt_node
|
|
291
|
+
end
|
|
292
|
+
recheck= true
|
|
293
|
+
n.parent.delete_element n
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
first_pass = false
|
|
297
|
+
end
|
|
298
|
+
return t
|
|
299
|
+
end
|
|
300
|
+
def controller_exists?(modul)
|
|
301
|
+
File.exists? "#{Rails.root}/app/controllers/#{modul}_controller.rb"
|
|
302
|
+
end
|
|
303
|
+
def dup_hash(a)
|
|
304
|
+
h = Hash.new(0)
|
|
305
|
+
a.each do |aa|
|
|
306
|
+
h[aa] += 1
|
|
307
|
+
end
|
|
308
|
+
return h
|
|
309
|
+
end
|
|
310
|
+
def login?
|
|
311
|
+
## To use remember me cookies then remove
|
|
312
|
+
#session[:user_id] != nil
|
|
313
|
+
current_ma_user != nil
|
|
314
|
+
#cookies[:auth_token] != nil
|
|
315
|
+
end
|
|
316
|
+
def own_xmain?
|
|
317
|
+
if $xmain
|
|
318
|
+
return current_ma_user.id==$xvars['user_id']
|
|
319
|
+
else
|
|
320
|
+
# if eval on first step would return true so user can start service
|
|
321
|
+
return true
|
|
322
|
+
end
|
|
323
|
+
end
|
|
324
|
+
def get_option_xml(opt, xml)
|
|
325
|
+
if xml
|
|
326
|
+
url=''
|
|
327
|
+
xml.each_element('node') do |n|
|
|
328
|
+
text= n.attributes['TEXT']
|
|
329
|
+
url= text if text =~/^#{opt}/
|
|
330
|
+
end
|
|
331
|
+
return nil if url.blank?
|
|
332
|
+
c, h= url.split(':', 2)
|
|
333
|
+
opt= h ? h.strip : true
|
|
334
|
+
else
|
|
335
|
+
return nil
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
def listed(node)
|
|
339
|
+
icons=[]
|
|
340
|
+
node.each_element("icon") do |nn|
|
|
341
|
+
icons << nn.attributes["BUILTIN"]
|
|
342
|
+
end
|
|
343
|
+
return !icons.include?("closed")
|
|
344
|
+
end
|
|
345
|
+
def ma_secured?(node)
|
|
346
|
+
icons=[]
|
|
347
|
+
node.each_element("icon") do |nn|
|
|
348
|
+
icons << nn.attributes["BUILTIN"]
|
|
349
|
+
end
|
|
350
|
+
return icons.include?("password")
|
|
351
|
+
end
|
|
352
|
+
def freemind2action(s)
|
|
353
|
+
case s.downcase
|
|
354
|
+
#when 'bookmark' # Excellent
|
|
355
|
+
# 'call'
|
|
356
|
+
when 'bookmark' # Excellent
|
|
357
|
+
'do'
|
|
358
|
+
when 'attach' # Look here
|
|
359
|
+
'form'
|
|
360
|
+
when 'edit' # Refine
|
|
361
|
+
'pdf'
|
|
362
|
+
when 'wizard' # Magic
|
|
363
|
+
'ws'
|
|
364
|
+
when 'help' # Question
|
|
365
|
+
'if'
|
|
366
|
+
when 'forward' # Forward
|
|
367
|
+
'redirect'
|
|
368
|
+
when 'kaddressbook' #Phone
|
|
369
|
+
'invoke' # invoke new service along the way
|
|
370
|
+
when 'list'
|
|
371
|
+
'list'
|
|
372
|
+
when 'mail'
|
|
373
|
+
'mail'
|
|
374
|
+
when 'xmag' # Tobe discussed
|
|
375
|
+
'search'
|
|
376
|
+
end
|
|
377
|
+
end
|
|
378
|
+
def affirm(s)
|
|
379
|
+
return s =~ /[y|yes|t|true]/i ? true : false
|
|
380
|
+
end
|
|
381
|
+
def negate(s)
|
|
382
|
+
return s =~ /[n|no|f|false]/i ? true : false
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
# module FormBuilder
|
|
386
|
+
# def date_field(method, options = {})
|
|
387
|
+
# default= self.object.send(method) || Date.today
|
|
388
|
+
# data_options= ({"mode"=>"calbox"}).merge(options)
|
|
389
|
+
# %Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>).html_safe
|
|
390
|
+
# end
|
|
391
|
+
# end
|
|
392
|
+
end
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
class String
|
|
396
|
+
def comment?
|
|
397
|
+
self[0]=='#'
|
|
398
|
+
end
|
|
399
|
+
def to_code
|
|
400
|
+
s= self.dup
|
|
401
|
+
# s.downcase!
|
|
402
|
+
# s.gsub! /[\s\-_]/, ""
|
|
403
|
+
# s
|
|
404
|
+
code, name = s.split(':')
|
|
405
|
+
code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
module ActionView
|
|
410
|
+
module Helpers
|
|
411
|
+
module DateHelper
|
|
412
|
+
def date_field_tag(method, options = {})
|
|
413
|
+
default= options[:default] || Date.today
|
|
414
|
+
data_options= ({"mode"=>"calbox"}).merge(options)
|
|
415
|
+
%Q(<input name='#{method}' id='#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>).html_safe
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
class FormBuilder
|
|
419
|
+
# def date_select_thai(method)
|
|
420
|
+
# self.date_select method, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year]
|
|
421
|
+
# end
|
|
422
|
+
def date_field(method, options = {})
|
|
423
|
+
default= options[:default] || self.object.send(method) || Date.today
|
|
424
|
+
data_options= ({"mode"=>"calbox"}).merge(options)
|
|
425
|
+
out= %Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>)
|
|
426
|
+
out.html_safe
|
|
427
|
+
end
|
|
428
|
+
def time_field(method, options = {})
|
|
429
|
+
default= self.object.send(method) || Time.now
|
|
430
|
+
data_options= ({"mode"=>"timebox"}).merge(options)
|
|
431
|
+
out=%Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>)
|
|
432
|
+
out.html_safe
|
|
433
|
+
end
|
|
434
|
+
def date_select_thai(method, default= Time.now, disabled=false)
|
|
435
|
+
date_select method, :default => default, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year], :disabled=>disabled
|
|
436
|
+
end
|
|
437
|
+
def datetime_select_thai(method, default= Time.now, disabled=false)
|
|
438
|
+
datetime_select method, :default => default, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year], :disabled=>disabled
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
def point(o={})
|
|
442
|
+
o[:zoom]= 11 unless o[:zoom]
|
|
443
|
+
o[:width]= '100%' unless o[:width]
|
|
444
|
+
o[:height]= '300px' unless o[:height]
|
|
445
|
+
o[:lat] = 13.91819 unless o[:lat]
|
|
446
|
+
o[:lng] = 100.48889 unless o[:lng]
|
|
447
|
+
|
|
448
|
+
out = <<-EOT
|
|
449
|
+
<script type='text/javascript'>
|
|
450
|
+
//<![CDATA[
|
|
451
|
+
var latLng;
|
|
452
|
+
var map_#{self.object_name};
|
|
453
|
+
var marker_#{self.object_name};
|
|
454
|
+
|
|
455
|
+
function init_map() {
|
|
456
|
+
var lat = #{o[:lat]};
|
|
457
|
+
var lng = #{o[:lng]};
|
|
458
|
+
//var lat = position.coords.latitude"; // HTML5 pass position in function initialize(position)
|
|
459
|
+
// google.loader.ClientLocation.latitude;
|
|
460
|
+
//var lng = position.coords.longitude;
|
|
461
|
+
// google.loader.ClientLocation.longitude;
|
|
462
|
+
latLng = new google.maps.LatLng(lat, lng);
|
|
463
|
+
map_#{self.object_name} = new google.maps.Map(document.getElementById("map_#{self.object_name}"), {
|
|
464
|
+
zoom: #{o[:zoom]},
|
|
465
|
+
center: latLng,
|
|
466
|
+
mapTypeId: google.maps.MapTypeId.ROADMAP
|
|
467
|
+
});
|
|
468
|
+
marker_#{self.object_name} = new google.maps.Marker({
|
|
469
|
+
position: latLng,
|
|
470
|
+
map: map_#{self.object_name},
|
|
471
|
+
draggable: true,
|
|
472
|
+
});
|
|
473
|
+
google.maps.event.addListener(marker_#{self.object_name}, 'dragend', function(event) {
|
|
474
|
+
$('##{self.object_name}_lat').val(event.latLng.lat());
|
|
475
|
+
$('##{self.object_name}_lng').val(event.latLng.lng());
|
|
476
|
+
});
|
|
477
|
+
google.maps.event.addListener(map_#{self.object_name}, 'click', function(event) {
|
|
478
|
+
$('##{self.object_name}_lat').val(event.latLng.lat());
|
|
479
|
+
$('##{self.object_name}_lng').val(event.latLng.lng());
|
|
480
|
+
move();
|
|
481
|
+
});
|
|
482
|
+
$('##{self.object_name}_lat').val(lat);
|
|
483
|
+
$('##{self.object_name}_lng').val(lng);
|
|
484
|
+
};
|
|
485
|
+
|
|
486
|
+
function move() {
|
|
487
|
+
latLng = new google.maps.LatLng($('##{self.object_name}_lat').val(), $('##{self.object_name}_lng').val());
|
|
488
|
+
map_#{self.object_name}.panTo(latLng);
|
|
489
|
+
marker_#{self.object_name}.setPosition(latLng);
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
//google.maps.event.addDomListener(window, 'load', init_map);
|
|
493
|
+
|
|
494
|
+
//]]>
|
|
495
|
+
</script>
|
|
496
|
+
<div class="field" data-role="fieldcontain">
|
|
497
|
+
Latitude: #{self.text_field :lat, :style=>"width:300px;" }
|
|
498
|
+
Longitude: #{self.text_field :lng, :style=>"width:300px;" }
|
|
499
|
+
</div>
|
|
500
|
+
<p/>
|
|
501
|
+
<div id='map_#{self.object_name}' style='max-width: none !important; width:#{o[:width]}; height:#{o[:height]};' class='map'></div>
|
|
502
|
+
<script>
|
|
503
|
+
$('##{self.object_name}_lat').change(function() {move()});
|
|
504
|
+
$('##{self.object_name}_lng').change(function() {move()});
|
|
505
|
+
//var w= $("input[id*=lat]").parent().width();
|
|
506
|
+
//$("input[id*=lat]").css('width','300px');
|
|
507
|
+
//$("input[id*=lng]").css('width','300px');
|
|
508
|
+
$( document ).one( "pagechange", function(){
|
|
509
|
+
init_map();
|
|
510
|
+
});
|
|
511
|
+
</script>
|
|
512
|
+
EOT
|
|
513
|
+
out.html_safe
|
|
514
|
+
end
|
|
515
|
+
end
|
|
516
|
+
end
|
|
517
|
+
end
|