tb_core 0.9.17
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 +15 -0
- data/MIT-LICENSE +20 -0
- data/README.markdown +60 -0
- data/Rakefile +28 -0
- data/app/assets/images/back_disabled.jpg +0 -0
- data/app/assets/images/back_enabled.jpg +0 -0
- data/app/assets/images/favicon.ico +0 -0
- data/app/assets/images/forward_disabled.jpg +0 -0
- data/app/assets/images/forward_enabled.jpg +0 -0
- data/app/assets/images/sort_asc.png +0 -0
- data/app/assets/images/sort_asc_disabled.png +0 -0
- data/app/assets/images/sort_both.png +0 -0
- data/app/assets/images/sort_desc.png +0 -0
- data/app/assets/images/sort_desc_disabled.png +0 -0
- data/app/assets/images/spud/admin/down_arrow.gif +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_0_eeeeee_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_55_ffffff_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_0073ea_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_666666_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_ff0084_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/images/spud/admin/spud_logo.png +0 -0
- data/app/assets/images/spud/admin/spud_logo@2x.png +0 -0
- data/app/assets/images/spud/admin/up_arrow.gif +0 -0
- data/app/assets/images/spud/admin/users_thumb.png +0 -0
- data/app/assets/javascripts/spud/admin/application.js +133 -0
- data/app/assets/javascripts/spud/admin/dashboard.js +80 -0
- data/app/assets/javascripts/spud/admin/date_picker.js +56 -0
- data/app/assets/javascripts/spud/admin/editor.js +167 -0
- data/app/assets/javascripts/spud/admin/jquery.dataTables.min.js +151 -0
- data/app/assets/javascripts/spud/admin/preinit.js +1 -0
- data/app/assets/javascripts/spud/password_resets.js +2 -0
- data/app/assets/libs/bootstrap/css/bootstrap-responsive.css +1088 -0
- data/app/assets/libs/bootstrap/css/bootstrap.css +5893 -0
- data/app/assets/libs/bootstrap/img/glyphicons-halflings-white.png +0 -0
- data/app/assets/libs/bootstrap/img/glyphicons-halflings.png +0 -0
- data/app/assets/libs/bootstrap/js/bootstrap.js +2025 -0
- data/app/assets/libs/datepicker/css/datepicker.css +223 -0
- data/app/assets/libs/datepicker/js/bootstrap-datepicker.js +779 -0
- data/app/assets/libs/datepicker/less/datepicker.less +122 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_0_eeeeee_40x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_55_ffffff_40x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_0073ea_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_666666_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_ff0084_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/jquery-ui-1.9.1.custom.css +297 -0
- data/app/assets/libs/jquery-ui/css/flick/jquery-ui-1.9.1.custom.min.css +5 -0
- data/app/assets/libs/jquery-ui/js/jquery-ui-1.9.1.custom.js +4870 -0
- data/app/assets/libs/jquery-ui/js/jquery-ui-1.9.1.custom.min.js +6 -0
- data/app/assets/libs/tiny_mce/jquery.tinymce.js +1 -0
- data/app/assets/libs/tiny_mce/langs/en.js +1 -0
- data/app/assets/libs/tiny_mce/license.txt +504 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/css/advhr.css +5 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/js/rule.js +43 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/rule.htm +58 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/css/advimage.css +13 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/image.htm +235 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/img/sample.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/js/image.js +462 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/css/advlink.css +8 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/js/advlink.js +539 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/link.htm +338 -0
- data/app/assets/libs/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
- data/app/assets/libs/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/autolink/editor_plugin_src.js +174 -0
- data/app/assets/libs/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/autoresize/editor_plugin_src.js +119 -0
- data/app/assets/libs/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/contextmenu/editor_plugin_src.js +161 -0
- data/app/assets/libs/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
- data/app/assets/libs/tiny_mce/plugins/example/dialog.htm +22 -0
- data/app/assets/libs/tiny_mce/plugins/example/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
- data/app/assets/libs/tiny_mce/plugins/example/img/example.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/example/js/dialog.js +19 -0
- data/app/assets/libs/tiny_mce/plugins/example/langs/en.js +3 -0
- data/app/assets/libs/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
- data/app/assets/libs/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
- data/app/assets/libs/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/template.htm +387 -0
- data/app/assets/libs/tiny_mce/plugins/layer/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/layer/editor_plugin_src.js +262 -0
- data/app/assets/libs/tiny_mce/plugins/lists/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/lists/editor_plugin_src.js +951 -0
- data/app/assets/libs/tiny_mce/plugins/media/css/media.css +17 -0
- data/app/assets/libs/tiny_mce/plugins/media/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/media/editor_plugin_src.js +890 -0
- data/app/assets/libs/tiny_mce/plugins/media/js/embed.js +73 -0
- data/app/assets/libs/tiny_mce/plugins/media/js/media.js +470 -0
- data/app/assets/libs/tiny_mce/plugins/media/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/media/media.htm +922 -0
- data/app/assets/libs/tiny_mce/plugins/media/moxieplayer.swf +0 -0
- data/app/assets/libs/tiny_mce/plugins/paste/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/paste/editor_plugin_src.js +871 -0
- data/app/assets/libs/tiny_mce/plugins/paste/js/pastetext.js +36 -0
- data/app/assets/libs/tiny_mce/plugins/paste/js/pasteword.js +51 -0
- data/app/assets/libs/tiny_mce/plugins/paste/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/paste/pastetext.htm +27 -0
- data/app/assets/libs/tiny_mce/plugins/paste/pasteword.htm +21 -0
- data/app/assets/libs/tiny_mce/plugins/spellchecker/css/content.css +1 -0
- data/app/assets/libs/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/spellchecker/editor_plugin_src.js +436 -0
- data/app/assets/libs/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/style/css/props.css +14 -0
- data/app/assets/libs/tiny_mce/plugins/style/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/style/editor_plugin_src.js +71 -0
- data/app/assets/libs/tiny_mce/plugins/style/js/props.js +709 -0
- data/app/assets/libs/tiny_mce/plugins/style/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/style/props.htm +845 -0
- data/app/assets/libs/tiny_mce/plugins/style/readme.txt +19 -0
- data/app/assets/libs/tiny_mce/plugins/table/cell.htm +180 -0
- data/app/assets/libs/tiny_mce/plugins/table/css/cell.css +17 -0
- data/app/assets/libs/tiny_mce/plugins/table/css/row.css +25 -0
- data/app/assets/libs/tiny_mce/plugins/table/css/table.css +13 -0
- data/app/assets/libs/tiny_mce/plugins/table/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/table/editor_plugin_src.js +1428 -0
- data/app/assets/libs/tiny_mce/plugins/table/js/cell.js +319 -0
- data/app/assets/libs/tiny_mce/plugins/table/js/merge_cells.js +27 -0
- data/app/assets/libs/tiny_mce/plugins/table/js/row.js +237 -0
- data/app/assets/libs/tiny_mce/plugins/table/js/table.js +489 -0
- data/app/assets/libs/tiny_mce/plugins/table/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/table/merge_cells.htm +32 -0
- data/app/assets/libs/tiny_mce/plugins/table/row.htm +158 -0
- data/app/assets/libs/tiny_mce/plugins/table/table.htm +188 -0
- data/app/assets/libs/tiny_mce/plugins/tableDropdown/editor_plugin.js +140 -0
- data/app/assets/libs/tiny_mce/themes/advanced/about.htm +52 -0
- data/app/assets/libs/tiny_mce/themes/advanced/anchor.htm +26 -0
- data/app/assets/libs/tiny_mce/themes/advanced/charmap.htm +55 -0
- data/app/assets/libs/tiny_mce/themes/advanced/color_picker.htm +70 -0
- data/app/assets/libs/tiny_mce/themes/advanced/editor_template.js +1 -0
- data/app/assets/libs/tiny_mce/themes/advanced/editor_template_src.js +1467 -0
- data/app/assets/libs/tiny_mce/themes/advanced/image.htm +80 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/about.js +73 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/anchor.js +44 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/charmap.js +363 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/color_picker.js +345 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/image.js +251 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/link.js +153 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/source_editor.js +78 -0
- data/app/assets/libs/tiny_mce/themes/advanced/langs/en.js +1 -0
- data/app/assets/libs/tiny_mce/themes/advanced/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/themes/advanced/link.htm +57 -0
- data/app/assets/libs/tiny_mce/themes/advanced/shortcuts.htm +47 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/content.css +51 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/dialog.css +118 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/ui.css +215 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/highcontrast/content.css +25 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +106 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/content.css +49 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/dialog.css +118 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/ui.css +218 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
- data/app/assets/libs/tiny_mce/themes/advanced/source_editor.htm +25 -0
- data/app/assets/libs/tiny_mce/themes/simple/editor_template.js +1 -0
- data/app/assets/libs/tiny_mce/themes/simple/editor_template_src.js +84 -0
- data/app/assets/libs/tiny_mce/themes/simple/img/icons.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/simple/langs/en.js +1 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/default/content.css +25 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/default/ui.css +32 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
- data/app/assets/libs/tiny_mce/tiny_mce.js +1 -0
- data/app/assets/libs/tiny_mce/tiny_mce_popup.js +5 -0
- data/app/assets/libs/tiny_mce/tiny_mce_src.js +16753 -0
- data/app/assets/libs/tiny_mce/utils/editable_selects.js +70 -0
- data/app/assets/libs/tiny_mce/utils/form_utils.js +210 -0
- data/app/assets/libs/tiny_mce/utils/mctabs.js +162 -0
- data/app/assets/libs/tiny_mce/utils/validate.js +252 -0
- data/app/assets/stylesheets/spud/admin/application.css +480 -0
- data/app/assets/stylesheets/spud/admin/jquery-ui.css +568 -0
- data/app/assets/stylesheets/spud/admin/settings.css +4 -0
- data/app/assets/stylesheets/spud/admin/users.css +4 -0
- data/app/assets/stylesheets/spud/forms.css +108 -0
- data/app/assets/stylesheets/spud/login/application.css +302 -0
- data/app/assets/stylesheets/spud/login.css +58 -0
- data/app/assets/stylesheets/spud/password_resets.css +4 -0
- data/app/assets/stylesheets/spud/setup.css +4 -0
- data/app/assets/stylesheets/spud/sitemaps.css +4 -0
- data/app/assets/stylesheets/spud/user_sessions.css +4 -0
- data/app/assets/stylesheets/spud/users.css +4 -0
- data/app/controllers/spud/admin/application_controller.rb +61 -0
- data/app/controllers/spud/admin/dashboard_controller.rb +34 -0
- data/app/controllers/spud/admin/users_controller.rb +109 -0
- data/app/controllers/spud/application_controller.rb +89 -0
- data/app/controllers/spud/password_resets_controller.rb +50 -0
- data/app/controllers/spud/setup_controller.rb +21 -0
- data/app/controllers/spud/sitemaps_controller.rb +8 -0
- data/app/controllers/spud/user_sessions_controller.rb +33 -0
- data/app/controllers/spud/users_controller.rb +45 -0
- data/app/helpers/spud/admin/application_helper.rb +54 -0
- data/app/helpers/spud/application_helper.rb +22 -0
- data/app/helpers/spud/password_resets_helper.rb +2 -0
- data/app/mailers/spud/core_mailer.rb +12 -0
- data/app/models/concerns/spud_authentication.rb +10 -0
- data/app/models/spud_admin_permission.rb +5 -0
- data/app/models/spud_user.rb +26 -0
- data/app/models/spud_user_session.rb +3 -0
- data/app/models/spud_user_setting.rb +6 -0
- data/app/views/layouts/spud/admin/application.html.erb +72 -0
- data/app/views/layouts/spud/admin/detail.html.erb +31 -0
- data/app/views/layouts/spud/login/application.html.erb +17 -0
- data/app/views/layouts/spud/setup.html.erb +47 -0
- data/app/views/spud/admin/dashboard/index.html.erb +18 -0
- data/app/views/spud/admin/users/_edit.html.erb +14 -0
- data/app/views/spud/admin/users/_form.html.erb +90 -0
- data/app/views/spud/admin/users/_new.html.erb +15 -0
- data/app/views/spud/admin/users/edit.html.erb +3 -0
- data/app/views/spud/admin/users/index.html.erb +42 -0
- data/app/views/spud/admin/users/new.html.erb +3 -0
- data/app/views/spud/admin/users/show.html.erb +12 -0
- data/app/views/spud/core_mailer/forgot_password_notification.html.erb +14 -0
- data/app/views/spud/core_mailer/forgot_password_notification.text.erb +10 -0
- data/app/views/spud/password_resets/edit.html.erb +25 -0
- data/app/views/spud/password_resets/new.html.erb +14 -0
- data/app/views/spud/setup/index.html.erb +43 -0
- data/app/views/spud/sitemaps/show.xml.builder +12 -0
- data/app/views/spud/user_sessions/new.html.erb +27 -0
- data/app/views/spud/users/_form.html.erb +60 -0
- data/app/views/spud/users/settings.html.erb +12 -0
- data/config/routes.rb +18 -0
- data/db/migrate/20111214161011_create_spud_admin_permissions.rb +11 -0
- data/db/migrate/20111214161146_create_spud_users.rb +29 -0
- data/db/migrate/20120327124229_add_time_zone_to_spud_user.rb +6 -0
- data/db/migrate/20120328235431_add_scope_to_spud_admin_permissions.rb +6 -0
- data/db/migrate/20120329174000_create_spud_user_settings.rb +11 -0
- data/lib/spud_core/belongs_to_app.rb +59 -0
- data/lib/spud_core/configuration.rb +58 -0
- data/lib/spud_core/engine.rb +55 -0
- data/lib/spud_core/searchable.rb +11 -0
- data/lib/spud_core/test_files.rb +25 -0
- data/lib/spud_core/version.rb +5 -0
- data/lib/tasks/spud_core_tasks.rake +4 -0
- data/lib/tb_core.rb +6 -0
- data/spec/controllers/spud/admin/application_controller_spec.rb +49 -0
- data/spec/controllers/spud/admin/dashboard_controller_spec.rb +129 -0
- data/spec/controllers/spud/admin/users_controller_spec.rb +194 -0
- data/spec/controllers/spud/application_controller_spec.rb +6 -0
- data/spec/controllers/spud/password_reset_controller_spec.rb +93 -0
- data/spec/controllers/spud/setup_controller_spec.rb +56 -0
- data/spec/controllers/spud/sitemap_controllers_spec.rb +20 -0
- data/spec/controllers/spud/user_sessions_controller_spec.rb +51 -0
- data/spec/controllers/spud/users_controller_spec.rb +69 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +58 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +15 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +5 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/schema.rb +59 -0
- data/spec/dummy/log/development.log +39 -0
- data/spec/dummy/log/test.log +37811 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/helpers/spud/admin/application_helper_spec.rb +150 -0
- data/spec/helpers/spud/application_helper_spec.rb +66 -0
- data/spec/lib/spud_core/configuration_spec.rb +34 -0
- data/spec/models/spud_user_spec.rb +27 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/authlogic_helper.rb +2 -0
- metadata +652 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<%= error_messages_for(f.object) %>
|
|
2
|
+
|
|
3
|
+
<fieldset>
|
|
4
|
+
<legend>User Details</legend>
|
|
5
|
+
|
|
6
|
+
<div class="control-group">
|
|
7
|
+
<%=f.label :login, :required=>true,:class=> "control-label"%>
|
|
8
|
+
<div class="controls">
|
|
9
|
+
<%=f.text_field :login,:title => "",:size=>25%>
|
|
10
|
+
<p class="help-block">This is the username used to login to the account.</p>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
<div class="control-group">
|
|
15
|
+
<%=f.label :email,:class=> "control-label"%>
|
|
16
|
+
<div class="controls">
|
|
17
|
+
<%=f.text_field :email, :title => "",:size => 25%>
|
|
18
|
+
<p class="help-block">The email address must be a valid email address.</p>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
</div>
|
|
22
|
+
<div class="control-group">
|
|
23
|
+
<%=f.label :first_name,:class=> "control-label"%>
|
|
24
|
+
<div class="controls">
|
|
25
|
+
<%=f.text_field :first_name, :title => "",:size => 25%>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
</div>
|
|
29
|
+
<div class="control-group">
|
|
30
|
+
<%=f.label :last_name,:class=> "control-label"%>
|
|
31
|
+
<div class="controls">
|
|
32
|
+
<%=f.text_field :last_name, :title => "",:size => 25%>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
</div>
|
|
36
|
+
<div class="control-group">
|
|
37
|
+
<%=f.label :time_zone,:class => "control-label"%>
|
|
38
|
+
<div class="controls">
|
|
39
|
+
<%=f.time_zone_select :time_zone,ActiveSupport::TimeZone.us_zones,:default => Rails.application.config.time_zone%>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
</fieldset>
|
|
44
|
+
<fieldset>
|
|
45
|
+
<legend>Credentials</legend>
|
|
46
|
+
|
|
47
|
+
<div class="control-group">
|
|
48
|
+
<%=f.label :password,:class=> "control-label"%>
|
|
49
|
+
<div class="controls">
|
|
50
|
+
<%=f.password_field :password, :title => "",:size => 25%>
|
|
51
|
+
<p class="help-block">Password must be at least 8 characters</p>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
</div>
|
|
55
|
+
<div class="control-group">
|
|
56
|
+
<%=f.label :password_confirmation,"Confirm",:class=> "control-label"%>
|
|
57
|
+
<div class="controls">
|
|
58
|
+
<%=f.password_field :password_confirmation, :title => "",:size => 25%>
|
|
59
|
+
<p class="help-block">Retype your password here.</p>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
</div>
|
|
63
|
+
<div class="control-group">
|
|
64
|
+
<%=f.label :super_admin,"Super Admin",:class=> "control-label"%>
|
|
65
|
+
<div class="controls">
|
|
66
|
+
<label class="checkbox inline">
|
|
67
|
+
<%=f.check_box :super_admin, :title => ""%>
|
|
68
|
+
The super administrator bypasses all permissions.
|
|
69
|
+
</label>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
</fieldset>
|
|
74
|
+
<fieldset>
|
|
75
|
+
<legend>Permissions</legend>
|
|
76
|
+
<div class="control-group">
|
|
77
|
+
<label class="control-label">Access Control</label>
|
|
78
|
+
<div class="controls">
|
|
79
|
+
<%=f.fields_for :spud_admin_permissions do |builder|%>
|
|
80
|
+
|
|
81
|
+
<%=builder.hidden_field :name%>
|
|
82
|
+
<label class="checkbox inline">
|
|
83
|
+
|
|
84
|
+
<%=builder.check_box :access%><%=builder.object.name%>
|
|
85
|
+
</label>
|
|
86
|
+
|
|
87
|
+
<%end%>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</fieldset>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
<p> Fill in all information pertaining to the new user you wish to create. Fields marked with * are required and must be filled out.</p>
|
|
4
|
+
|
|
5
|
+
<%=form_for @user,:url => spud_admin_users_path(),:html=>{:class=>"form-horizontal"} do |f|%>
|
|
6
|
+
<%=render :partial => "form",:locals => {:f => f}%>
|
|
7
|
+
|
|
8
|
+
<div class="form-actions form-actions-no-modal">
|
|
9
|
+
<%=f.submit "Save User", :class=>"btn btn-primary"%> or <%=link_to "cancel",request.referer,:class => "btn"%>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<%end%>
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<%=content_for :data_controls do%>
|
|
2
|
+
<%=link_to "New User",new_spud_admin_user_path(),:class => "ajax btn btn-primary",:title => "New User"%>
|
|
3
|
+
<%end%>
|
|
4
|
+
<%=content_for :detail do%>
|
|
5
|
+
<table class="admin-table data-table" id="usertable">
|
|
6
|
+
<thead>
|
|
7
|
+
<tr>
|
|
8
|
+
|
|
9
|
+
<th><%= sortable "login"%></th>
|
|
10
|
+
<th><%= sortable "email"%></th>
|
|
11
|
+
<th><%= sortable "first_name", "Name"%></th>
|
|
12
|
+
|
|
13
|
+
<th><%= sortable "last_login_at", "Last Login"%></th>
|
|
14
|
+
<th><%= sortable "created_at", "Date Created"%></th>
|
|
15
|
+
<th></th>
|
|
16
|
+
</tr>
|
|
17
|
+
</thead>
|
|
18
|
+
<tbody>
|
|
19
|
+
<%@users.each do |user|%>
|
|
20
|
+
<tr id="row_user_<%=user.id%>">
|
|
21
|
+
|
|
22
|
+
<td><%=link_to user.login,edit_spud_admin_user_path(:id => user.id),:class => "ajax", :title => "Edit #{user.login}"%></td>
|
|
23
|
+
<td><%=user.email%></td>
|
|
24
|
+
<td><%=user.first_name%> <%=user.last_name%></td>
|
|
25
|
+
|
|
26
|
+
<td><%=timestamp user.last_login_at%></td>
|
|
27
|
+
<td><%=timestamp user.created_at%></td>
|
|
28
|
+
<td align="right"><%=link_to "Remove",spud_admin_user_path(:id => user.id),:method => :delete,:remote => true,:confirm => "Are you sure you want to remove this user?",:class => "btn btn-danger"%></td>
|
|
29
|
+
</tr>
|
|
30
|
+
<%end%>
|
|
31
|
+
</tbody>
|
|
32
|
+
<tfoot>
|
|
33
|
+
<tr>
|
|
34
|
+
<td colspan="6">
|
|
35
|
+
<%=will_paginate @users%>
|
|
36
|
+
</td>
|
|
37
|
+
</tr>
|
|
38
|
+
</tfoot>
|
|
39
|
+
</table>
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
<%end%>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<%=content_for :data_controls do%>
|
|
2
|
+
<%=link_to "Edit",edit_spud_admin_user_path(:id => @user.id),:class => "ajax",:title => "Edit User"%> | <%=link_to "Remove",spud_admin_user_path(:id => @user.id),:method => :delete,:title => "Remove User",:confirm => "Are you sure you wish to remove this user?"%>
|
|
3
|
+
<%end%>
|
|
4
|
+
|
|
5
|
+
<%=content_for :detail do%>
|
|
6
|
+
<div class="info_card">
|
|
7
|
+
<p><strong>Login:</strong> <%=@user.login%> <%="(Super Administrator)" if @user.super_admin%></p>
|
|
8
|
+
<p><strong>Email:</strong> <%=link_to @user.email, "mailto:#{@user.email}"%></p>
|
|
9
|
+
<p><strong>Last Login:</strong> <span title="IP: <%=@user.last_login_ip%>"><%=timestamp @user.last_login_at%></span></p>
|
|
10
|
+
<p><strong>Created:</strong> <%=timestamp @user.created_at%></p>
|
|
11
|
+
</div>
|
|
12
|
+
<%end%>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<h2>Reset Password Request</h2>
|
|
8
|
+
<p>A password reset was requested by the user tied to this email address. If you believe this is in error, please double check your security settings to prevent unauthorized access of your account</p>
|
|
9
|
+
|
|
10
|
+
<p>Otherwise, you may reset your password by clicking on the link below:</p>
|
|
11
|
+
<p><%=link_to @url,@url%></p>
|
|
12
|
+
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Reset Password Request
|
|
2
|
+
======================
|
|
3
|
+
|
|
4
|
+
A password reset was requested by the user tied to this email address. If you believe this is in error, please double check your security settings to prevent unauthorized access of your account.
|
|
5
|
+
|
|
6
|
+
Otherwise, you may reset your password by clicking on the link below:
|
|
7
|
+
|
|
8
|
+
<%=@url%>
|
|
9
|
+
|
|
10
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<div class="login-form">
|
|
2
|
+
<h1>Spud CMS Admin</h1>
|
|
3
|
+
<%= form_for @user, url: spud_password_reset_path(:id => @user.perishable_token) do |f| %>
|
|
4
|
+
<% if flash[:notice] %>
|
|
5
|
+
<div class="alert alert-success">
|
|
6
|
+
<%= flash[:notice] %>
|
|
7
|
+
</div>
|
|
8
|
+
<% end %>
|
|
9
|
+
<%= error_messages_for(f.object) %>
|
|
10
|
+
|
|
11
|
+
<div class="field-group">
|
|
12
|
+
<%= f.label :password %>
|
|
13
|
+
<%= f.password_field :password %>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="field-group">
|
|
16
|
+
<%= f.label :password_confirmation %>
|
|
17
|
+
<%= f.password_field :password_confirmation %>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div class="field-group">
|
|
21
|
+
<%= f.submit "Reset Password" %>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<% end %>
|
|
25
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<div class="login-form">
|
|
2
|
+
<h1>Forgot Password</h1>
|
|
3
|
+
<%= form_tag spud_password_resets_path do %>
|
|
4
|
+
|
|
5
|
+
<div class="field-group">
|
|
6
|
+
<%= label_tag :email %>
|
|
7
|
+
<%= text_field_tag :email %>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
<div class="field-group">
|
|
11
|
+
<%= submit_tag "Send Reset Instructions" %>
|
|
12
|
+
</div>
|
|
13
|
+
<% end %>
|
|
14
|
+
</div>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<%content_for :detail do%>
|
|
2
|
+
<%=form_tag "/spud/setup",:method => :post,:class=>"form-horizontal" do %>
|
|
3
|
+
<fieldset>
|
|
4
|
+
<legend>New Admin Account</legend>
|
|
5
|
+
|
|
6
|
+
<div class="control-group">
|
|
7
|
+
<%=label_tag :login, "Login",:class => "control-label"%>
|
|
8
|
+
<div class="controls">
|
|
9
|
+
<%=text_field_tag :login,nil,:title => "",:size=>25%>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="control-group">
|
|
13
|
+
<%=label_tag :email, "Email",:class => "control-label"%>
|
|
14
|
+
<div class="controls">
|
|
15
|
+
<%=text_field_tag :email,nil,:title => "",:size=>25%>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<div class="control-group">
|
|
20
|
+
<%=label_tag :password, "Password",:class => "control-label"%>
|
|
21
|
+
<div class="controls">
|
|
22
|
+
<%=password_field_tag :password,nil,:title => "",:size=>25%>
|
|
23
|
+
<p class="help-block">Password must be at least 8 characters</p>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="control-group">
|
|
27
|
+
<%=label_tag :password_confirmation, "Confirm",:class => "control-label"%>
|
|
28
|
+
<div class="controls">
|
|
29
|
+
<%=password_field_tag :password_confirmation,nil,:title => "",:size=>25%>
|
|
30
|
+
<p class="help-block">Retype your password here.</p>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
</fieldset>
|
|
37
|
+
<div class="form-actions">
|
|
38
|
+
<%=submit_tag "Create Admin Account", :class=>"btn btn-primary"%>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<%end%>
|
|
42
|
+
|
|
43
|
+
<%end%>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
xml.instruct! :xml, :version => '1.0', :encoding => 'UTF-8'
|
|
3
|
+
|
|
4
|
+
# create the urlset
|
|
5
|
+
xml.sitemapindex :xmlns => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
|
|
6
|
+
@sitemap_urls.each do |map|
|
|
7
|
+
xml.sitemap do
|
|
8
|
+
xml.loc eval(map.to_s + " :format => :xml")
|
|
9
|
+
xml.lastmod Time.now.utc.xmlschema
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<div class="login-form">
|
|
2
|
+
<h1>Spud CMS Admin</h1>
|
|
3
|
+
<%= form_for @user_session, url: spud_user_session_path do |f| %>
|
|
4
|
+
<% if flash[:notice] %>
|
|
5
|
+
<div class="alert alert-success">
|
|
6
|
+
<%= flash[:notice] %>
|
|
7
|
+
</div>
|
|
8
|
+
<% end %>
|
|
9
|
+
<%= error_messages_for(f.object) %>
|
|
10
|
+
|
|
11
|
+
<div class="field-group">
|
|
12
|
+
<%= f.label :login %>
|
|
13
|
+
<%= f.text_field :login %>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="field-group">
|
|
16
|
+
<%= f.label :password %>
|
|
17
|
+
<%= f.password_field :password %>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="field-group">
|
|
20
|
+
<%= f.check_box :remember_me %> <%= f.label :remember_me, class: 'inline' %>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="field-group">
|
|
23
|
+
<%= f.submit "Login" %> or <%=link_to "Forgot Password?",new_spud_password_reset_url%>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<% end %>
|
|
27
|
+
</div>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<%=error_messages_for f.object%>
|
|
2
|
+
<fieldset>
|
|
3
|
+
<legend>User Details</legend>
|
|
4
|
+
|
|
5
|
+
<div class="control-group">
|
|
6
|
+
<%=f.label :login, :required=>true,:class=>"control-label"%>
|
|
7
|
+
<div class="controls">
|
|
8
|
+
<%=f.text_field :login,:title => "",:size=>25%>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
</div>
|
|
12
|
+
<div class="control-group">
|
|
13
|
+
<%=f.label :email,:class=>"control-label"%>
|
|
14
|
+
<div class="controls">
|
|
15
|
+
<%=f.text_field :email, :title => "",:size => 25%>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
</div>
|
|
19
|
+
<div class="control-group">
|
|
20
|
+
<%=f.label :first_name,:class=>"control-label"%>
|
|
21
|
+
<div class="controls">
|
|
22
|
+
<%=f.text_field :first_name, :title => "",:size => 25%>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="control-group">
|
|
26
|
+
<%=f.label :last_name,:class=>"control-label"%>
|
|
27
|
+
<div class="controls">
|
|
28
|
+
<%=f.text_field :last_name, :title => "",:size => 25%>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="control-group">
|
|
32
|
+
<%=f.label :time_zone,:class => "control-label"%>
|
|
33
|
+
<div class="controls">
|
|
34
|
+
<%=f.time_zone_select :time_zone,ActiveSupport::TimeZone.us_zones,:default => Rails.application.config.time_zone%>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
</fieldset>
|
|
40
|
+
<fieldset>
|
|
41
|
+
<legend>Credentials</legend>
|
|
42
|
+
|
|
43
|
+
<div class="control-group">
|
|
44
|
+
<%=f.label :password,:class=>"control-label"%>
|
|
45
|
+
<div class="controls">
|
|
46
|
+
<%=f.password_field :password, :title => "",:size => 25%>
|
|
47
|
+
<p class="help-block">Password must be at least 8 characters</p>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
</div>
|
|
51
|
+
<div class="control-group">
|
|
52
|
+
<%=f.label :password_confirmation,"Confirm",:class=>"control-label"%>
|
|
53
|
+
<div class="controls">
|
|
54
|
+
<%=f.password_field :password_confirmation, :title => "",:size => 25%>
|
|
55
|
+
<p class="help-block">Retype your password here.</p>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
</fieldset>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
<p>Fields marked with * are required and must be filled out.</p>
|
|
4
|
+
|
|
5
|
+
<%=form_for @current_user,:url => spud_user_path(),:html=>{:class=>"form-horizontal"} do |f|%>
|
|
6
|
+
<%=render :partial => "form",:locals => {:f => f}%>
|
|
7
|
+
<div class="form-actions">
|
|
8
|
+
<%=f.submit "Save Settings", :class=>"btn btn-primary"%> or <%=link_to "cancel",request.referer,:class => "btn"%>
|
|
9
|
+
</div>
|
|
10
|
+
<%end%>
|
|
11
|
+
|
|
12
|
+
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Rails.application.routes.draw do
|
|
2
|
+
namespace :spud do
|
|
3
|
+
resource :user_session
|
|
4
|
+
resource :user
|
|
5
|
+
match 'settings' => "users#settings"
|
|
6
|
+
match 'save_key' => "users#save_setting"
|
|
7
|
+
namespace :admin do
|
|
8
|
+
root :to => "dashboard#index"
|
|
9
|
+
resources :users
|
|
10
|
+
match 'switch' => "dashboard#switch"
|
|
11
|
+
end
|
|
12
|
+
resource :sitemap,:only => [:show]
|
|
13
|
+
resources :password_resets
|
|
14
|
+
match 'setup' => 'setup#index'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class CreateSpudUsers < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :spud_users do |t|
|
|
4
|
+
|
|
5
|
+
t.string :first_name
|
|
6
|
+
t.string :last_name
|
|
7
|
+
t.boolean :super_admin
|
|
8
|
+
t.string :login, :null => false # optional, you can use email instead, or both
|
|
9
|
+
t.string :email, :null => false # optional, you can use login instead, or both
|
|
10
|
+
t.string :crypted_password, :null => false # optional, see below
|
|
11
|
+
t.string :password_salt, :null => false # optional, but highly recommended
|
|
12
|
+
t.string :persistence_token, :null => false # required
|
|
13
|
+
t.string :single_access_token, :null => false # optional, see Authlogic::Session::Params
|
|
14
|
+
t.string :perishable_token, :null => false # optional, see Authlogic::Session::Perishability
|
|
15
|
+
|
|
16
|
+
# Magic columns, just like ActiveRecord's created_at and updated_at. These are automatically maintained by Authlogic if they are present.
|
|
17
|
+
t.integer :login_count, :null => false, :default => 0 # optional, see Authlogic::Session::MagicColumns
|
|
18
|
+
t.integer :failed_login_count, :null => false, :default => 0 # optional, see Authlogic::Session::MagicColumns
|
|
19
|
+
t.datetime :last_request_at # optional, see Authlogic::Session::MagicColumns
|
|
20
|
+
t.datetime :current_login_at # optional, see Authlogic::Session::MagicColumns
|
|
21
|
+
t.datetime :last_login_at # optional, see Authlogic::Session::MagicColumns
|
|
22
|
+
t.string :current_login_ip # optional, see Authlogic::Session::MagicColumns
|
|
23
|
+
t.string :last_login_ip # optional, see Authlogic::Session::MagicColumns
|
|
24
|
+
t.timestamps
|
|
25
|
+
end
|
|
26
|
+
add_index :spud_users,:login
|
|
27
|
+
add_index :spud_users,:email
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Spud::BelongsToApp
|
|
2
|
+
extend ActiveSupport::Concern
|
|
3
|
+
included do
|
|
4
|
+
extend ClassMethods
|
|
5
|
+
end
|
|
6
|
+
# class Config
|
|
7
|
+
# attr_reader :page_application
|
|
8
|
+
# attr_reader :page_thumbnail
|
|
9
|
+
# def initialize(app,thumb)
|
|
10
|
+
# @page_application = app
|
|
11
|
+
# @page_thumbnail = thumb
|
|
12
|
+
# end
|
|
13
|
+
# end
|
|
14
|
+
module ClassMethods
|
|
15
|
+
def belongs_to_spud_app(name=nil,options={})
|
|
16
|
+
@page_title = options[:page_title]
|
|
17
|
+
Spud::Core.admin_applications.each do |app|
|
|
18
|
+
if app[:name].parameterize.underscore.to_sym == name
|
|
19
|
+
@page_application = app
|
|
20
|
+
break
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
self.class_eval do
|
|
24
|
+
|
|
25
|
+
before_filter { |controller|
|
|
26
|
+
@page_thumbnail = self.class.page_application[:thumbnail]
|
|
27
|
+
@application_name = self.class.page_application[:name]
|
|
28
|
+
@page_name = self.class.page_title
|
|
29
|
+
|
|
30
|
+
if current_user.super_admin == false
|
|
31
|
+
permission = current_user_permissions.select{|perm| perm.name == @application_name}
|
|
32
|
+
if permission.blank?
|
|
33
|
+
flash[:error] = "You do not have access to this area."
|
|
34
|
+
redirect_to spud_admin_root_url and return
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
if controller.action_name == 'new' || controller.action_name == 'create'
|
|
39
|
+
@page_name = "New #{@page_name.singularize}"
|
|
40
|
+
elsif controller.action_name == 'edit' || controller.action_name == 'update'
|
|
41
|
+
@page_name = "Edit #{@page_name.singularize}"
|
|
42
|
+
elsif controller.action_name == 'show'
|
|
43
|
+
@page_name = "Show #{@page_name.singularize}"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
def page_application
|
|
52
|
+
@page_application || self.superclass.instance_variable_get('@page_application')
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def page_title
|
|
56
|
+
@page_title || self.superclass.instance_variable_get('@page_title') || page_application[:name]
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module Spud
|
|
2
|
+
module Core
|
|
3
|
+
include ActiveSupport::Configurable
|
|
4
|
+
config_accessor :site_name,:admin_applications,:sitemap_urls,:multisite_mode_enabled,:multisite_config,:from_address,:site_id,:short_name, :javascripts,:stylesheets, :admin_javascripts, :admin_stylesheets
|
|
5
|
+
self.admin_applications = [{:name => "Users",:thumbnail => "spud/admin/users_thumb.png",:url => "/spud/admin/users",:order => 100}]
|
|
6
|
+
self.site_name = "Company Name"
|
|
7
|
+
self.site_id = 0
|
|
8
|
+
self.short_name = 'default'
|
|
9
|
+
self.sitemap_urls = []
|
|
10
|
+
self.javascripts = []
|
|
11
|
+
self.stylesheets = []
|
|
12
|
+
self.multisite_mode_enabled = false
|
|
13
|
+
self.multisite_config = []
|
|
14
|
+
self.from_address = "no-reply@spudengine.com"
|
|
15
|
+
|
|
16
|
+
self.admin_javascripts = ['spud/admin/application']
|
|
17
|
+
self.admin_stylesheets = ['spud/admin/application']
|
|
18
|
+
|
|
19
|
+
def self.site_config_for_host(host)
|
|
20
|
+
configs = Spud::Core.multisite_config.select{|p| p[:hosts].include?(host)}
|
|
21
|
+
if configs.blank?
|
|
22
|
+
return default_site_config
|
|
23
|
+
else
|
|
24
|
+
return configs[0]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.site_config_for_id(id)
|
|
29
|
+
if(id == Spud::Core.config.site_id)
|
|
30
|
+
return self.default_site_config
|
|
31
|
+
else
|
|
32
|
+
matches = Spud::Core.config.multisite_config.select{ |site| site[:site_id] == id }
|
|
33
|
+
return matches[0] if matches.any?
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.default_site_config
|
|
38
|
+
return {:site_id => Spud::Core.config.site_id, :site_name => Spud::Core.config.site_name, :short_name => Spud::Core.config.short_name}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.append_admin_javascripts(*args)
|
|
42
|
+
if args[0].class == Array
|
|
43
|
+
Spud::Core.config.admin_javascripts += args[0]
|
|
44
|
+
else
|
|
45
|
+
Spud::Core.config.admin_javascripts += args
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self.append_admin_stylesheets(*args)
|
|
50
|
+
if args[0].class == Array
|
|
51
|
+
Spud::Core.config.admin_stylesheets += args[0]
|
|
52
|
+
else
|
|
53
|
+
Spud::Core.config.admin_stylesheets += args
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# require 'spud_core'
|
|
2
|
+
# require 'rails'
|
|
3
|
+
# require 'action_controller'
|
|
4
|
+
# require 'rubygems'
|
|
5
|
+
require 'jquery-rails'
|
|
6
|
+
require 'retina_tag'
|
|
7
|
+
require 'authlogic'
|
|
8
|
+
# require 'dynamic_form'
|
|
9
|
+
require 'breadcrumbs_on_rails'
|
|
10
|
+
require 'will_paginate'
|
|
11
|
+
require 'codemirror-rails'
|
|
12
|
+
|
|
13
|
+
module Spud
|
|
14
|
+
module Core
|
|
15
|
+
class Engine < ::Rails::Engine
|
|
16
|
+
require "#{root}/lib/spud_core/belongs_to_app"
|
|
17
|
+
require "#{root}/lib/spud_core/searchable"
|
|
18
|
+
|
|
19
|
+
def self.require_model(model_name)
|
|
20
|
+
require "#{root}/app/models/#{model_name}"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.require_controller(controller_name)
|
|
24
|
+
require "#{root}/app/controllers/#{controller_name}"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
engine_name :tb_core
|
|
28
|
+
|
|
29
|
+
initializer :assets do |config|
|
|
30
|
+
Rails.application.config.assets.precompile += [
|
|
31
|
+
"tiny_mce/plugins/**/*",
|
|
32
|
+
"tiny_mce/themes/**/*",
|
|
33
|
+
"tiny_mce/utils/*",
|
|
34
|
+
"tiny_mce/langs/*",
|
|
35
|
+
'tiny_mce/tiny_mce_popup.js',
|
|
36
|
+
"tiny_mce/*",
|
|
37
|
+
"spud/admin*"
|
|
38
|
+
]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
initializer :controller_overrides do |config|
|
|
42
|
+
ActionController::Base.class_eval do
|
|
43
|
+
include Spud::BelongsToApp
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
initializer :model_overrides do |config|
|
|
48
|
+
ActiveRecord::Base.class_eval do
|
|
49
|
+
include Spud::Searchable
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|