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,89 @@
|
|
|
1
|
+
class Spud::ApplicationController < ActionController::Base
|
|
2
|
+
unloadable
|
|
3
|
+
protect_from_forgery
|
|
4
|
+
helper_method :current_user_session, :current_user
|
|
5
|
+
around_filter :set_time_zone
|
|
6
|
+
|
|
7
|
+
if Spud::Core.multisite_mode_enabled
|
|
8
|
+
before_filter :multisite_caching
|
|
9
|
+
end
|
|
10
|
+
include Spud::ApplicationHelper
|
|
11
|
+
before_filter :to
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def to
|
|
17
|
+
ActionMailer::Base.default_url_options = {:host => request.host_with_port}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def current_user_session
|
|
21
|
+
return @current_user_session if defined?(@current_user_session)
|
|
22
|
+
@current_user_session = SpudUserSession.find
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def current_user
|
|
26
|
+
return @current_user if defined?(@current_user)
|
|
27
|
+
@current_user = current_user_session && current_user_session.spud_user
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def current_user_permissions
|
|
31
|
+
return @current_user_permissions if defined?(@current_user_permissions)
|
|
32
|
+
@current_user_permissions = current_user.spud_admin_permissions.where(:access => true).all
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def require_user
|
|
36
|
+
unless current_user
|
|
37
|
+
store_location
|
|
38
|
+
flash[:notice] = "You must be logged in to access this page"
|
|
39
|
+
redirect_to new_spud_user_session_url
|
|
40
|
+
return false
|
|
41
|
+
end
|
|
42
|
+
return true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def require_no_user
|
|
46
|
+
if current_user
|
|
47
|
+
store_location
|
|
48
|
+
flash[:notice] = "You must be logged out to access this page"
|
|
49
|
+
redirect_to root_url
|
|
50
|
+
return false
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def store_location
|
|
55
|
+
session[:return_to] = request.url
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def redirect_back_or_default(default)
|
|
59
|
+
redirect_to(back_or_default(default))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def back_or_default(default)
|
|
63
|
+
result = !session[:return_to].blank? ? session[:return_to] : default
|
|
64
|
+
session[:return_to] = nil
|
|
65
|
+
return result
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def set_time_zone
|
|
69
|
+
old_time_zone = Time.zone
|
|
70
|
+
Time.zone = current_user.time_zone if current_user and current_user.time_zone.blank? == false
|
|
71
|
+
yield
|
|
72
|
+
ensure
|
|
73
|
+
Time.zone = old_time_zone
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def multisite_caching
|
|
77
|
+
if Spud::Core.multisite_mode_enabled
|
|
78
|
+
@old_cache_directory = Rails.application.config.action_controller.page_cache_directory
|
|
79
|
+
if(@old_cache_directory.blank?)
|
|
80
|
+
@old_cache_directory = Rails.application.config.action_controller.page_cache_directory = File.join(Rails.root,'public')
|
|
81
|
+
end
|
|
82
|
+
site_config = Spud::Core.site_config_for_host request.host_with_port
|
|
83
|
+
|
|
84
|
+
self.class.page_cache_directory = File.join(@old_cache_directory.to_s,site_config[:short_name].to_s.downcase)
|
|
85
|
+
logger.debug "Cache directory set to: #{Rails.application.config.action_controller.page_cache_directory}"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
class Spud::PasswordResetsController < Spud::ApplicationController
|
|
2
|
+
before_filter :require_no_user, :only => [:new, :create]
|
|
3
|
+
before_filter :load_user_using_perishable_token, :only => [:edit, :update]
|
|
4
|
+
|
|
5
|
+
layout 'spud/login/application'
|
|
6
|
+
|
|
7
|
+
def new
|
|
8
|
+
render
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def create
|
|
12
|
+
@user = SpudUser.find_by_email(params[:email])
|
|
13
|
+
if @user
|
|
14
|
+
Spud::CoreMailer.forgot_password_notification(@user).deliver
|
|
15
|
+
flash[:notice] = "Instructions to reset your password have been emailed to you. " +
|
|
16
|
+
"Please check your email."
|
|
17
|
+
redirect_to new_spud_user_session_url
|
|
18
|
+
else
|
|
19
|
+
flash[:notice] = "No user was found with that email address"
|
|
20
|
+
render :action => :new
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def edit
|
|
25
|
+
render
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def update
|
|
29
|
+
@user.password = params[:spud_user][:password]
|
|
30
|
+
@user.password_confirmation = params[:spud_user][:password_confirmation]
|
|
31
|
+
if @user.save
|
|
32
|
+
flash[:notice] = "Password successfully updated"
|
|
33
|
+
redirect_to new_spud_user_session_url
|
|
34
|
+
else
|
|
35
|
+
render :action => :edit
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
def load_user_using_perishable_token
|
|
41
|
+
@user = SpudUser.find_using_perishable_token(params[:id])
|
|
42
|
+
unless @user
|
|
43
|
+
flash[:notice] = "We're sorry, but we could not locate your account. " +
|
|
44
|
+
"If you are having issues try copying and pasting the URL " +
|
|
45
|
+
"from your email into your browser or restarting the " +
|
|
46
|
+
"reset password process."
|
|
47
|
+
redirect_to new_spud_user_session_url
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class Spud::SetupController < Spud::ApplicationController
|
|
2
|
+
layout 'spud/setup'
|
|
3
|
+
def index
|
|
4
|
+
@page_thumbnail = "spud/admin/users_thumb.png"
|
|
5
|
+
@page_name = "First Time Setup"
|
|
6
|
+
if SpudUser.count != 0
|
|
7
|
+
flash[:error] = "Access Denied! This wizard may only be executed when the database is empty."
|
|
8
|
+
redirect_to new_spud_user_session_url and return
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
if request.post?
|
|
12
|
+
@user = SpudUser.new(:login => params[:login],:email => params[:email],:password => params[:password],:password_confirmation => params[:password_confirmation])
|
|
13
|
+
@user.super_admin = true
|
|
14
|
+
if @user.save
|
|
15
|
+
redirect_back_or_default(new_spud_user_session_url) and return
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
flash[:error] = "Error creating administrative account!"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class Spud::UserSessionsController < Spud::ApplicationController
|
|
2
|
+
before_filter :require_no_user, :only => [:new, :create]
|
|
3
|
+
before_filter :require_user, :only => :destroy
|
|
4
|
+
layout 'spud/login/application'
|
|
5
|
+
def new
|
|
6
|
+
if SpudUser.all.count == 0
|
|
7
|
+
logger.debug "NO USERS!"
|
|
8
|
+
redirect_to spud_setup_url() and return
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
@user_session = SpudUserSession.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create
|
|
15
|
+
@user_session = SpudUserSession.new(params[:spud_user_session])
|
|
16
|
+
if @user_session.save
|
|
17
|
+
flash[:notice] = "Login successful!"
|
|
18
|
+
redirect_back_or_default spud_admin_root_path
|
|
19
|
+
else
|
|
20
|
+
render :action => :new
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def destroy
|
|
25
|
+
current_user_session.destroy
|
|
26
|
+
flash[:notice] = "Logout successful!"
|
|
27
|
+
if !request.referer.blank?
|
|
28
|
+
session[:return_to] = request.referer
|
|
29
|
+
end
|
|
30
|
+
redirect_back_or_default new_spud_user_session_url
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
class Spud::UsersController < Spud::ApplicationController
|
|
2
|
+
before_filter :require_user
|
|
3
|
+
layout 'spud/admin/detail'
|
|
4
|
+
|
|
5
|
+
def settings
|
|
6
|
+
if current_user.has_admin_rights?
|
|
7
|
+
add_breadcrumb "Dashboard", :spud_admin_root_path
|
|
8
|
+
end
|
|
9
|
+
add_breadcrumb "Settings", :spud_settings_path
|
|
10
|
+
@page_thumbnail = "spud/admin/users_thumb.png"
|
|
11
|
+
@page_name = "Settings"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def update
|
|
15
|
+
|
|
16
|
+
add_breadcrumb "Settings", :spud_settings_path
|
|
17
|
+
@page_thumbnail = "spud/admin/users_thumb.png"
|
|
18
|
+
@page_name = "Settings"
|
|
19
|
+
if @current_user.update_attributes(params[:spud_user].slice :login,:first_name,:last_name,:email,:password,:password_confirmation,:time_zone)
|
|
20
|
+
flash[:notice] = "User settings saved successfully."
|
|
21
|
+
redirect_to spud_admin_root_url()
|
|
22
|
+
else
|
|
23
|
+
flash[:error] = "There was an error while saving the user."
|
|
24
|
+
render :action => "settings"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def save_setting
|
|
30
|
+
if params[:key].blank?
|
|
31
|
+
render :status => 500,:text => nil and return
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
setting = @current_user.spud_user_settings.where(:key => params[:key]).first
|
|
35
|
+
if setting.blank?
|
|
36
|
+
setting = @current_user.spud_user_settings.new(:key => params[:key])
|
|
37
|
+
end
|
|
38
|
+
setting.value = params[:value]
|
|
39
|
+
if setting.save
|
|
40
|
+
render :status => 200,:text => nil and return
|
|
41
|
+
else
|
|
42
|
+
render :status => 500,:text => nil and return
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Spud::Admin::ApplicationHelper
|
|
2
|
+
|
|
3
|
+
def timestamp(timedate=nil)
|
|
4
|
+
return "Never" if timedate.blank?
|
|
5
|
+
return Time.now() - timedate > 604800 ? timedate.strftime("%B %d") + ' at ' + timedate.strftime("%I:%M %p") : time_ago_in_words(timedate) + ' ago'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def current_admin_site_name
|
|
9
|
+
site_name = Spud::Core.site_name
|
|
10
|
+
if Spud::Core.multisite_mode_enabled && !session[:admin_site].blank?
|
|
11
|
+
config = Spud::Core.multisite_config.select{|p| p[:site_id].to_i == session[:admin_site].to_i}
|
|
12
|
+
site_name = config[0][:site_name] if !config.blank?
|
|
13
|
+
end
|
|
14
|
+
return site_name
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def header_style
|
|
18
|
+
style_str = ''
|
|
19
|
+
if Spud::Core.multisite_mode_enabled
|
|
20
|
+
config = Spud::Core.multisite_config.select{|p| p[:site_id].to_i == session[:admin_site].to_i}
|
|
21
|
+
style_str = config[0][:header_style] if !config.blank? && config[0].has_key?(:header_style)
|
|
22
|
+
end
|
|
23
|
+
return style_str
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def link_to_remove_fields(name, f)
|
|
27
|
+
f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)",:class => "btn btn-danger")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def link_to_add_fields(name, f, association)
|
|
31
|
+
new_object = f.object.class.reflect_on_association(association).klass.new
|
|
32
|
+
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
|
|
33
|
+
render(association.to_s.singularize + "_fields", :f => builder)
|
|
34
|
+
end
|
|
35
|
+
link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")",:class =>"btn")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def error_messages_for(object)
|
|
39
|
+
content = ""
|
|
40
|
+
if object.errors.any?
|
|
41
|
+
content += "<div class='spud_admin_form_error_list'>"
|
|
42
|
+
content += "<h4>#{pluralize(object.errors.count, "error")} prohibited you from saving:</h4>"
|
|
43
|
+
content +="<ul>"
|
|
44
|
+
object.errors.full_messages.each do |msg|
|
|
45
|
+
content+="<li>#{msg}</li>"
|
|
46
|
+
end
|
|
47
|
+
content +="</ul></div>"
|
|
48
|
+
end
|
|
49
|
+
return content.html_safe
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Spud::ApplicationHelper
|
|
2
|
+
def current_site_name
|
|
3
|
+
return Spud::Core.site_name if !Spud::Core.multisite_mode_enabled
|
|
4
|
+
config = Spud::Core.site_config_for_host(request.host_with_port)
|
|
5
|
+
return Spud::Core.site_name if config.blank?
|
|
6
|
+
|
|
7
|
+
return config[:site_name]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def current_site_id
|
|
11
|
+
config = Spud::Core.site_config_for_host(request.host_with_port)
|
|
12
|
+
return config[:site_id] unless config.blank?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def sortable(column, title = nil)
|
|
16
|
+
title ||= column.titleize
|
|
17
|
+
css_class = column == sort_column ? "current #{sort_direction}" : nil
|
|
18
|
+
direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
|
|
19
|
+
link_to title, {:sort => column, :direction => direction}, {:class => css_class}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
class Spud::CoreMailer < ActionMailer::Base
|
|
2
|
+
# default_url_options[:host] = request.host_with_port
|
|
3
|
+
|
|
4
|
+
def forgot_password_notification(user)
|
|
5
|
+
@user = user
|
|
6
|
+
@url = edit_spud_password_reset_url(:id => user.perishable_token)
|
|
7
|
+
# @url = "/spud/password_resets/#{user.perishable_token}/edit"
|
|
8
|
+
mail(:from =>Spud::Core.from_address,:to => user.email, :subject => "Forgot Password Request from #{Spud::Core.config.site_name}")
|
|
9
|
+
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module Concerns
|
|
2
|
+
module SpudAuthentication
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
included do
|
|
5
|
+
acts_as_authentic do |c|
|
|
6
|
+
# c.my_config_option = my_value # for available options see documentation in: Authlogic::ActsAsAuthentic
|
|
7
|
+
end # block optional
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
class SpudUser < ActiveRecord::Base
|
|
2
|
+
include Concerns::SpudAuthentication
|
|
3
|
+
|
|
4
|
+
has_many :spud_admin_permissions,:foreign_key => :user_id
|
|
5
|
+
has_many :spud_user_settings
|
|
6
|
+
accepts_nested_attributes_for :spud_admin_permissions, :allow_destroy => true
|
|
7
|
+
|
|
8
|
+
attr_accessible :login,:email,:first_name,:last_name,:password,:password_confirmation,:password_salt,:last_login_at,:last_request_at,:last_login_ip,:failed_login_count,:current_login_at,:login_count,:persistence_token,:perishable_token,:single_access_token,:crypted_password, :current_login_ip, :created_at, :updated_at,:spud_admin_permissions_attributes,:time_zone, :as => [:default, :admin]
|
|
9
|
+
attr_accessible :super_admin, :id, :as => :admin
|
|
10
|
+
|
|
11
|
+
def has_admin_rights?
|
|
12
|
+
return self.super_admin || self.spud_admin_permissions.count > 0
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def full_name
|
|
16
|
+
if first_name.blank? && last_name.blank?
|
|
17
|
+
return self.login
|
|
18
|
+
end
|
|
19
|
+
if self.first_name.blank?
|
|
20
|
+
return self.last_name
|
|
21
|
+
elsif self.last_name.blank?
|
|
22
|
+
return self.first_name
|
|
23
|
+
end
|
|
24
|
+
return "#{self.first_name} #{self.last_name}"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Spud Admin</title>
|
|
5
|
+
<%= stylesheet_link_tag *Spud::Core.config.admin_stylesheets %>
|
|
6
|
+
<%= javascript_include_tag *Spud::Core.config.admin_javascripts %>
|
|
7
|
+
<%= csrf_meta_tags %>
|
|
8
|
+
<%=yield :head%>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div id="header" style="<%=header_style%>">
|
|
12
|
+
<%=link_to spud_admin_root_url do%>
|
|
13
|
+
<h1>Spud Admin</h1>
|
|
14
|
+
<%end%>
|
|
15
|
+
|
|
16
|
+
<div id="user_meta">
|
|
17
|
+
<span class="greeting">Hello <%=@current_user.full_name%></span> | <%=link_to "Settings", spud_settings_path%> | <%=link_to "Logout",spud_user_session_url,:method => :delete%></a>
|
|
18
|
+
</div>
|
|
19
|
+
<%if Spud::Core.multisite_mode_enabled == true%>
|
|
20
|
+
<div id="multisite_switcher" class="right_floated">
|
|
21
|
+
<%=form_tag spud_admin_switch_url do%>
|
|
22
|
+
<%=select_tag :multisite_select,options_for_select([[Spud::Core.site_name,nil]] + Spud::Core.multisite_config.collect{|c| [c[:site_name],c[:site_id]]},session[:admin_site])%>
|
|
23
|
+
<%end%>
|
|
24
|
+
</div>
|
|
25
|
+
<%end%>
|
|
26
|
+
</div>
|
|
27
|
+
<div id="breadcrumbs">
|
|
28
|
+
<%= render_breadcrumbs :separator => ' / ' %>
|
|
29
|
+
</div>
|
|
30
|
+
<div id="content">
|
|
31
|
+
<% if flash[:notice] %>
|
|
32
|
+
<div class="alert alert-success">
|
|
33
|
+
<a class="close" data-dismiss="alert">×</a>
|
|
34
|
+
<%= flash[:notice] %>
|
|
35
|
+
</div>
|
|
36
|
+
<% end %>
|
|
37
|
+
<% if flash[:warning] %>
|
|
38
|
+
|
|
39
|
+
<div class="alert alert-warning">
|
|
40
|
+
<a class="close" data-dismiss="alert">×</a>
|
|
41
|
+
<%= flash[:warning] %>
|
|
42
|
+
</div>
|
|
43
|
+
<% end %>
|
|
44
|
+
<% if flash[:error]%>
|
|
45
|
+
|
|
46
|
+
<div class="alert alert-error">
|
|
47
|
+
<a class="close" data-dismiss="alert">×</a>
|
|
48
|
+
<%= flash[:error] %>
|
|
49
|
+
</div>
|
|
50
|
+
<%-end%>
|
|
51
|
+
<%= content_for?(:content) ? yield(:content) : yield %>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
<div id="modal_window" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
58
|
+
<div class="modal-header">
|
|
59
|
+
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
60
|
+
<h3 class="modal-title"></h3>
|
|
61
|
+
</div>
|
|
62
|
+
<div class="modal-body">
|
|
63
|
+
|
|
64
|
+
</div>
|
|
65
|
+
<div class="modal-footer modal-footer-default">
|
|
66
|
+
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
|
67
|
+
<button class="btn btn-primary form-submit">Save changes</button>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
</body>
|
|
72
|
+
</html>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<%=content_for :content do %>
|
|
2
|
+
<div id="detail_wrapper">
|
|
3
|
+
<span class="data_controls">
|
|
4
|
+
<%=yield :data_controls%>
|
|
5
|
+
</span>
|
|
6
|
+
<h2>
|
|
7
|
+
<%if @page_thumbnail%>
|
|
8
|
+
<span class="thumb_wrapper"><%=image_tag(@page_thumbnail)%></span>
|
|
9
|
+
<%end%>
|
|
10
|
+
<%=@page_name%>
|
|
11
|
+
</h2>
|
|
12
|
+
|
|
13
|
+
<div id="details">
|
|
14
|
+
<%if content_for?(:detail_nav)%>
|
|
15
|
+
<div id="detail_nav_wrapper">
|
|
16
|
+
<div id="detail_nav">
|
|
17
|
+
<%= yield(:detail_nav)%>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
<div id="detail_main_wrapper">
|
|
21
|
+
<div id="detail_main">
|
|
22
|
+
<%= content_for?(:detail) ? yield(:detail) : yield %></div>
|
|
23
|
+
</div>
|
|
24
|
+
<br style="clear:both;"/>
|
|
25
|
+
<%else%>
|
|
26
|
+
<%= content_for?(:detail) ? yield(:detail) : yield %>
|
|
27
|
+
<%end%>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
<%end%>
|
|
31
|
+
<%= render :template => 'layouts/spud/admin/application' %>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Spud Admin</title>
|
|
5
|
+
<%= stylesheet_link_tag("spud/login/application") %>
|
|
6
|
+
|
|
7
|
+
<%= csrf_meta_tags %>
|
|
8
|
+
<%=content_for :head%>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
|
|
12
|
+
<div id="content_wrapper">
|
|
13
|
+
<div id="content"><%=yield%></div>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Spud Admin</title>
|
|
5
|
+
<%= stylesheet_link_tag "spud/admin/application" %>
|
|
6
|
+
<%= javascript_include_tag "spud/admin/application" %>
|
|
7
|
+
<%= csrf_meta_tags %>
|
|
8
|
+
<%=content_for :head%>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div id="header">
|
|
12
|
+
<h1>Spud First Time Setup</h1>
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
<div id="breadcrumbs">
|
|
16
|
+
<%= render_breadcrumbs :separator => ' / ' %>
|
|
17
|
+
</div>
|
|
18
|
+
<div id="content">
|
|
19
|
+
<div id="detail_wrapper">
|
|
20
|
+
<h2>
|
|
21
|
+
<%if @page_thumbnail%>
|
|
22
|
+
<span class="thumb_wrapper"><%=image_tag(@page_thumbnail)%></span>
|
|
23
|
+
<%end%>
|
|
24
|
+
<%=@page_name%>
|
|
25
|
+
</h2>
|
|
26
|
+
|
|
27
|
+
<div id="details">
|
|
28
|
+
<%if content_for?(:detail_nav)%>
|
|
29
|
+
<div id="detail_nav_wrapper">
|
|
30
|
+
<div id="detail_nav">
|
|
31
|
+
<%= yield(:detail_nav)%></div>
|
|
32
|
+
|
|
33
|
+
</div>
|
|
34
|
+
<div id="detail_main_wrapper">
|
|
35
|
+
<div id="detail_main">
|
|
36
|
+
<%= content_for?(:detail) ? yield(:detail) : yield %></div>
|
|
37
|
+
</div>
|
|
38
|
+
<br style="clear:both;"/>
|
|
39
|
+
<%else%>
|
|
40
|
+
<%= content_for?(:detail) ? yield(:detail) : yield %>
|
|
41
|
+
<%end%>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
</body>
|
|
47
|
+
</html>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
<div class="sortable">
|
|
3
|
+
<%@admin_applications.each do |admin_application|%>
|
|
4
|
+
|
|
5
|
+
<div class="admin_application" id="application_name_<%=admin_application[:name]%>"><a href="<%=admin_application[:url]%>">
|
|
6
|
+
<div class="image_wrapper"><%=image_tag(admin_application[:thumbnail])%></div>
|
|
7
|
+
<span class="application_name"><%=admin_application[:name]%></span>
|
|
8
|
+
</a>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<%end%>
|
|
12
|
+
</div>
|
|
13
|
+
<div id="dashboard-editmode">
|
|
14
|
+
<a href="#" class="btn btn-primary" id="dashboard-editsave">Done Editing</a> <a id="dashboard-editcancel" href="#" class="btn">Cancel</a>
|
|
15
|
+
</div>
|
|
16
|
+
<script type="text/javascript">
|
|
17
|
+
$(document).ready(Spud.Admin.Dashboard.init);
|
|
18
|
+
</script>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
<p> Fill in all information pertaining to the current user you wish to modify. Fields marked with * are required and must be filled out.</p>
|
|
4
|
+
|
|
5
|
+
<%=form_for @user,:url => spud_admin_user_path(:id => @user.id),: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
|
+
|