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.
Files changed (341) hide show
  1. checksums.yaml +15 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.markdown +60 -0
  4. data/Rakefile +28 -0
  5. data/app/assets/images/back_disabled.jpg +0 -0
  6. data/app/assets/images/back_enabled.jpg +0 -0
  7. data/app/assets/images/favicon.ico +0 -0
  8. data/app/assets/images/forward_disabled.jpg +0 -0
  9. data/app/assets/images/forward_enabled.jpg +0 -0
  10. data/app/assets/images/sort_asc.png +0 -0
  11. data/app/assets/images/sort_asc_disabled.png +0 -0
  12. data/app/assets/images/sort_both.png +0 -0
  13. data/app/assets/images/sort_desc.png +0 -0
  14. data/app/assets/images/sort_desc_disabled.png +0 -0
  15. data/app/assets/images/spud/admin/down_arrow.gif +0 -0
  16. data/app/assets/images/spud/admin/flick/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  17. data/app/assets/images/spud/admin/flick/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  18. data/app/assets/images/spud/admin/flick/ui-bg_flat_55_ffffff_40x100.png +0 -0
  19. data/app/assets/images/spud/admin/flick/ui-bg_flat_75_ffffff_40x100.png +0 -0
  20. data/app/assets/images/spud/admin/flick/ui-bg_glass_65_ffffff_1x400.png +0 -0
  21. data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
  22. data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
  23. data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
  24. data/app/assets/images/spud/admin/flick/ui-icons_0073ea_256x240.png +0 -0
  25. data/app/assets/images/spud/admin/flick/ui-icons_454545_256x240.png +0 -0
  26. data/app/assets/images/spud/admin/flick/ui-icons_666666_256x240.png +0 -0
  27. data/app/assets/images/spud/admin/flick/ui-icons_ff0084_256x240.png +0 -0
  28. data/app/assets/images/spud/admin/flick/ui-icons_ffffff_256x240.png +0 -0
  29. data/app/assets/images/spud/admin/spud_logo.png +0 -0
  30. data/app/assets/images/spud/admin/spud_logo@2x.png +0 -0
  31. data/app/assets/images/spud/admin/up_arrow.gif +0 -0
  32. data/app/assets/images/spud/admin/users_thumb.png +0 -0
  33. data/app/assets/javascripts/spud/admin/application.js +133 -0
  34. data/app/assets/javascripts/spud/admin/dashboard.js +80 -0
  35. data/app/assets/javascripts/spud/admin/date_picker.js +56 -0
  36. data/app/assets/javascripts/spud/admin/editor.js +167 -0
  37. data/app/assets/javascripts/spud/admin/jquery.dataTables.min.js +151 -0
  38. data/app/assets/javascripts/spud/admin/preinit.js +1 -0
  39. data/app/assets/javascripts/spud/password_resets.js +2 -0
  40. data/app/assets/libs/bootstrap/css/bootstrap-responsive.css +1088 -0
  41. data/app/assets/libs/bootstrap/css/bootstrap.css +5893 -0
  42. data/app/assets/libs/bootstrap/img/glyphicons-halflings-white.png +0 -0
  43. data/app/assets/libs/bootstrap/img/glyphicons-halflings.png +0 -0
  44. data/app/assets/libs/bootstrap/js/bootstrap.js +2025 -0
  45. data/app/assets/libs/datepicker/css/datepicker.css +223 -0
  46. data/app/assets/libs/datepicker/js/bootstrap-datepicker.js +779 -0
  47. data/app/assets/libs/datepicker/less/datepicker.less +122 -0
  48. data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  49. data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  50. data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_55_ffffff_40x100.png +0 -0
  51. data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  52. data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  53. data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
  54. data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
  55. data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
  56. data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_0073ea_256x240.png +0 -0
  57. data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_454545_256x240.png +0 -0
  58. data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_666666_256x240.png +0 -0
  59. data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_ff0084_256x240.png +0 -0
  60. data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_ffffff_256x240.png +0 -0
  61. data/app/assets/libs/jquery-ui/css/flick/jquery-ui-1.9.1.custom.css +297 -0
  62. data/app/assets/libs/jquery-ui/css/flick/jquery-ui-1.9.1.custom.min.css +5 -0
  63. data/app/assets/libs/jquery-ui/js/jquery-ui-1.9.1.custom.js +4870 -0
  64. data/app/assets/libs/jquery-ui/js/jquery-ui-1.9.1.custom.min.js +6 -0
  65. data/app/assets/libs/tiny_mce/jquery.tinymce.js +1 -0
  66. data/app/assets/libs/tiny_mce/langs/en.js +1 -0
  67. data/app/assets/libs/tiny_mce/license.txt +504 -0
  68. data/app/assets/libs/tiny_mce/plugins/advhr/css/advhr.css +5 -0
  69. data/app/assets/libs/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
  70. data/app/assets/libs/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
  71. data/app/assets/libs/tiny_mce/plugins/advhr/js/rule.js +43 -0
  72. data/app/assets/libs/tiny_mce/plugins/advhr/langs/en_dlg.js +1 -0
  73. data/app/assets/libs/tiny_mce/plugins/advhr/rule.htm +58 -0
  74. data/app/assets/libs/tiny_mce/plugins/advimage/css/advimage.css +13 -0
  75. data/app/assets/libs/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
  76. data/app/assets/libs/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
  77. data/app/assets/libs/tiny_mce/plugins/advimage/image.htm +235 -0
  78. data/app/assets/libs/tiny_mce/plugins/advimage/img/sample.gif +0 -0
  79. data/app/assets/libs/tiny_mce/plugins/advimage/js/image.js +462 -0
  80. data/app/assets/libs/tiny_mce/plugins/advimage/langs/en_dlg.js +1 -0
  81. data/app/assets/libs/tiny_mce/plugins/advlink/css/advlink.css +8 -0
  82. data/app/assets/libs/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
  83. data/app/assets/libs/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
  84. data/app/assets/libs/tiny_mce/plugins/advlink/js/advlink.js +539 -0
  85. data/app/assets/libs/tiny_mce/plugins/advlink/langs/en_dlg.js +1 -0
  86. data/app/assets/libs/tiny_mce/plugins/advlink/link.htm +338 -0
  87. data/app/assets/libs/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
  88. data/app/assets/libs/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
  89. data/app/assets/libs/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
  90. data/app/assets/libs/tiny_mce/plugins/autolink/editor_plugin_src.js +174 -0
  91. data/app/assets/libs/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
  92. data/app/assets/libs/tiny_mce/plugins/autoresize/editor_plugin_src.js +119 -0
  93. data/app/assets/libs/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
  94. data/app/assets/libs/tiny_mce/plugins/contextmenu/editor_plugin_src.js +161 -0
  95. data/app/assets/libs/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
  96. data/app/assets/libs/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
  97. data/app/assets/libs/tiny_mce/plugins/example/dialog.htm +22 -0
  98. data/app/assets/libs/tiny_mce/plugins/example/editor_plugin.js +1 -0
  99. data/app/assets/libs/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
  100. data/app/assets/libs/tiny_mce/plugins/example/img/example.gif +0 -0
  101. data/app/assets/libs/tiny_mce/plugins/example/js/dialog.js +19 -0
  102. data/app/assets/libs/tiny_mce/plugins/example/langs/en.js +3 -0
  103. data/app/assets/libs/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
  104. data/app/assets/libs/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
  105. data/app/assets/libs/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
  106. data/app/assets/libs/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
  107. data/app/assets/libs/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
  108. data/app/assets/libs/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
  109. data/app/assets/libs/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
  110. data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
  111. data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
  112. data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
  113. data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
  114. data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
  115. data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
  116. data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
  117. data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
  118. data/app/assets/libs/tiny_mce/plugins/inlinepopups/template.htm +387 -0
  119. data/app/assets/libs/tiny_mce/plugins/layer/editor_plugin.js +1 -0
  120. data/app/assets/libs/tiny_mce/plugins/layer/editor_plugin_src.js +262 -0
  121. data/app/assets/libs/tiny_mce/plugins/lists/editor_plugin.js +1 -0
  122. data/app/assets/libs/tiny_mce/plugins/lists/editor_plugin_src.js +951 -0
  123. data/app/assets/libs/tiny_mce/plugins/media/css/media.css +17 -0
  124. data/app/assets/libs/tiny_mce/plugins/media/editor_plugin.js +1 -0
  125. data/app/assets/libs/tiny_mce/plugins/media/editor_plugin_src.js +890 -0
  126. data/app/assets/libs/tiny_mce/plugins/media/js/embed.js +73 -0
  127. data/app/assets/libs/tiny_mce/plugins/media/js/media.js +470 -0
  128. data/app/assets/libs/tiny_mce/plugins/media/langs/en_dlg.js +1 -0
  129. data/app/assets/libs/tiny_mce/plugins/media/media.htm +922 -0
  130. data/app/assets/libs/tiny_mce/plugins/media/moxieplayer.swf +0 -0
  131. data/app/assets/libs/tiny_mce/plugins/paste/editor_plugin.js +1 -0
  132. data/app/assets/libs/tiny_mce/plugins/paste/editor_plugin_src.js +871 -0
  133. data/app/assets/libs/tiny_mce/plugins/paste/js/pastetext.js +36 -0
  134. data/app/assets/libs/tiny_mce/plugins/paste/js/pasteword.js +51 -0
  135. data/app/assets/libs/tiny_mce/plugins/paste/langs/en_dlg.js +1 -0
  136. data/app/assets/libs/tiny_mce/plugins/paste/pastetext.htm +27 -0
  137. data/app/assets/libs/tiny_mce/plugins/paste/pasteword.htm +21 -0
  138. data/app/assets/libs/tiny_mce/plugins/spellchecker/css/content.css +1 -0
  139. data/app/assets/libs/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
  140. data/app/assets/libs/tiny_mce/plugins/spellchecker/editor_plugin_src.js +436 -0
  141. data/app/assets/libs/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
  142. data/app/assets/libs/tiny_mce/plugins/style/css/props.css +14 -0
  143. data/app/assets/libs/tiny_mce/plugins/style/editor_plugin.js +1 -0
  144. data/app/assets/libs/tiny_mce/plugins/style/editor_plugin_src.js +71 -0
  145. data/app/assets/libs/tiny_mce/plugins/style/js/props.js +709 -0
  146. data/app/assets/libs/tiny_mce/plugins/style/langs/en_dlg.js +1 -0
  147. data/app/assets/libs/tiny_mce/plugins/style/props.htm +845 -0
  148. data/app/assets/libs/tiny_mce/plugins/style/readme.txt +19 -0
  149. data/app/assets/libs/tiny_mce/plugins/table/cell.htm +180 -0
  150. data/app/assets/libs/tiny_mce/plugins/table/css/cell.css +17 -0
  151. data/app/assets/libs/tiny_mce/plugins/table/css/row.css +25 -0
  152. data/app/assets/libs/tiny_mce/plugins/table/css/table.css +13 -0
  153. data/app/assets/libs/tiny_mce/plugins/table/editor_plugin.js +1 -0
  154. data/app/assets/libs/tiny_mce/plugins/table/editor_plugin_src.js +1428 -0
  155. data/app/assets/libs/tiny_mce/plugins/table/js/cell.js +319 -0
  156. data/app/assets/libs/tiny_mce/plugins/table/js/merge_cells.js +27 -0
  157. data/app/assets/libs/tiny_mce/plugins/table/js/row.js +237 -0
  158. data/app/assets/libs/tiny_mce/plugins/table/js/table.js +489 -0
  159. data/app/assets/libs/tiny_mce/plugins/table/langs/en_dlg.js +1 -0
  160. data/app/assets/libs/tiny_mce/plugins/table/merge_cells.htm +32 -0
  161. data/app/assets/libs/tiny_mce/plugins/table/row.htm +158 -0
  162. data/app/assets/libs/tiny_mce/plugins/table/table.htm +188 -0
  163. data/app/assets/libs/tiny_mce/plugins/tableDropdown/editor_plugin.js +140 -0
  164. data/app/assets/libs/tiny_mce/themes/advanced/about.htm +52 -0
  165. data/app/assets/libs/tiny_mce/themes/advanced/anchor.htm +26 -0
  166. data/app/assets/libs/tiny_mce/themes/advanced/charmap.htm +55 -0
  167. data/app/assets/libs/tiny_mce/themes/advanced/color_picker.htm +70 -0
  168. data/app/assets/libs/tiny_mce/themes/advanced/editor_template.js +1 -0
  169. data/app/assets/libs/tiny_mce/themes/advanced/editor_template_src.js +1467 -0
  170. data/app/assets/libs/tiny_mce/themes/advanced/image.htm +80 -0
  171. data/app/assets/libs/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  172. data/app/assets/libs/tiny_mce/themes/advanced/img/flash.gif +0 -0
  173. data/app/assets/libs/tiny_mce/themes/advanced/img/icons.gif +0 -0
  174. data/app/assets/libs/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  175. data/app/assets/libs/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  176. data/app/assets/libs/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  177. data/app/assets/libs/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  178. data/app/assets/libs/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  179. data/app/assets/libs/tiny_mce/themes/advanced/img/trans.gif +0 -0
  180. data/app/assets/libs/tiny_mce/themes/advanced/img/video.gif +0 -0
  181. data/app/assets/libs/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  182. data/app/assets/libs/tiny_mce/themes/advanced/js/about.js +73 -0
  183. data/app/assets/libs/tiny_mce/themes/advanced/js/anchor.js +44 -0
  184. data/app/assets/libs/tiny_mce/themes/advanced/js/charmap.js +363 -0
  185. data/app/assets/libs/tiny_mce/themes/advanced/js/color_picker.js +345 -0
  186. data/app/assets/libs/tiny_mce/themes/advanced/js/image.js +251 -0
  187. data/app/assets/libs/tiny_mce/themes/advanced/js/link.js +153 -0
  188. data/app/assets/libs/tiny_mce/themes/advanced/js/source_editor.js +78 -0
  189. data/app/assets/libs/tiny_mce/themes/advanced/langs/en.js +1 -0
  190. data/app/assets/libs/tiny_mce/themes/advanced/langs/en_dlg.js +1 -0
  191. data/app/assets/libs/tiny_mce/themes/advanced/link.htm +57 -0
  192. data/app/assets/libs/tiny_mce/themes/advanced/shortcuts.htm +47 -0
  193. data/app/assets/libs/tiny_mce/themes/advanced/skins/default/content.css +51 -0
  194. data/app/assets/libs/tiny_mce/themes/advanced/skins/default/dialog.css +118 -0
  195. data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  196. data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  197. data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  198. data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  199. data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  200. data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  201. data/app/assets/libs/tiny_mce/themes/advanced/skins/default/ui.css +215 -0
  202. data/app/assets/libs/tiny_mce/themes/advanced/skins/highcontrast/content.css +25 -0
  203. data/app/assets/libs/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +106 -0
  204. data/app/assets/libs/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
  205. data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/content.css +49 -0
  206. data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/dialog.css +118 -0
  207. data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  208. data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  209. data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  210. data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/ui.css +218 -0
  211. data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
  212. data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
  213. data/app/assets/libs/tiny_mce/themes/advanced/source_editor.htm +25 -0
  214. data/app/assets/libs/tiny_mce/themes/simple/editor_template.js +1 -0
  215. data/app/assets/libs/tiny_mce/themes/simple/editor_template_src.js +84 -0
  216. data/app/assets/libs/tiny_mce/themes/simple/img/icons.gif +0 -0
  217. data/app/assets/libs/tiny_mce/themes/simple/langs/en.js +1 -0
  218. data/app/assets/libs/tiny_mce/themes/simple/skins/default/content.css +25 -0
  219. data/app/assets/libs/tiny_mce/themes/simple/skins/default/ui.css +32 -0
  220. data/app/assets/libs/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
  221. data/app/assets/libs/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
  222. data/app/assets/libs/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
  223. data/app/assets/libs/tiny_mce/tiny_mce.js +1 -0
  224. data/app/assets/libs/tiny_mce/tiny_mce_popup.js +5 -0
  225. data/app/assets/libs/tiny_mce/tiny_mce_src.js +16753 -0
  226. data/app/assets/libs/tiny_mce/utils/editable_selects.js +70 -0
  227. data/app/assets/libs/tiny_mce/utils/form_utils.js +210 -0
  228. data/app/assets/libs/tiny_mce/utils/mctabs.js +162 -0
  229. data/app/assets/libs/tiny_mce/utils/validate.js +252 -0
  230. data/app/assets/stylesheets/spud/admin/application.css +480 -0
  231. data/app/assets/stylesheets/spud/admin/jquery-ui.css +568 -0
  232. data/app/assets/stylesheets/spud/admin/settings.css +4 -0
  233. data/app/assets/stylesheets/spud/admin/users.css +4 -0
  234. data/app/assets/stylesheets/spud/forms.css +108 -0
  235. data/app/assets/stylesheets/spud/login/application.css +302 -0
  236. data/app/assets/stylesheets/spud/login.css +58 -0
  237. data/app/assets/stylesheets/spud/password_resets.css +4 -0
  238. data/app/assets/stylesheets/spud/setup.css +4 -0
  239. data/app/assets/stylesheets/spud/sitemaps.css +4 -0
  240. data/app/assets/stylesheets/spud/user_sessions.css +4 -0
  241. data/app/assets/stylesheets/spud/users.css +4 -0
  242. data/app/controllers/spud/admin/application_controller.rb +61 -0
  243. data/app/controllers/spud/admin/dashboard_controller.rb +34 -0
  244. data/app/controllers/spud/admin/users_controller.rb +109 -0
  245. data/app/controllers/spud/application_controller.rb +89 -0
  246. data/app/controllers/spud/password_resets_controller.rb +50 -0
  247. data/app/controllers/spud/setup_controller.rb +21 -0
  248. data/app/controllers/spud/sitemaps_controller.rb +8 -0
  249. data/app/controllers/spud/user_sessions_controller.rb +33 -0
  250. data/app/controllers/spud/users_controller.rb +45 -0
  251. data/app/helpers/spud/admin/application_helper.rb +54 -0
  252. data/app/helpers/spud/application_helper.rb +22 -0
  253. data/app/helpers/spud/password_resets_helper.rb +2 -0
  254. data/app/mailers/spud/core_mailer.rb +12 -0
  255. data/app/models/concerns/spud_authentication.rb +10 -0
  256. data/app/models/spud_admin_permission.rb +5 -0
  257. data/app/models/spud_user.rb +26 -0
  258. data/app/models/spud_user_session.rb +3 -0
  259. data/app/models/spud_user_setting.rb +6 -0
  260. data/app/views/layouts/spud/admin/application.html.erb +72 -0
  261. data/app/views/layouts/spud/admin/detail.html.erb +31 -0
  262. data/app/views/layouts/spud/login/application.html.erb +17 -0
  263. data/app/views/layouts/spud/setup.html.erb +47 -0
  264. data/app/views/spud/admin/dashboard/index.html.erb +18 -0
  265. data/app/views/spud/admin/users/_edit.html.erb +14 -0
  266. data/app/views/spud/admin/users/_form.html.erb +90 -0
  267. data/app/views/spud/admin/users/_new.html.erb +15 -0
  268. data/app/views/spud/admin/users/edit.html.erb +3 -0
  269. data/app/views/spud/admin/users/index.html.erb +42 -0
  270. data/app/views/spud/admin/users/new.html.erb +3 -0
  271. data/app/views/spud/admin/users/show.html.erb +12 -0
  272. data/app/views/spud/core_mailer/forgot_password_notification.html.erb +14 -0
  273. data/app/views/spud/core_mailer/forgot_password_notification.text.erb +10 -0
  274. data/app/views/spud/password_resets/edit.html.erb +25 -0
  275. data/app/views/spud/password_resets/new.html.erb +14 -0
  276. data/app/views/spud/setup/index.html.erb +43 -0
  277. data/app/views/spud/sitemaps/show.xml.builder +12 -0
  278. data/app/views/spud/user_sessions/new.html.erb +27 -0
  279. data/app/views/spud/users/_form.html.erb +60 -0
  280. data/app/views/spud/users/settings.html.erb +12 -0
  281. data/config/routes.rb +18 -0
  282. data/db/migrate/20111214161011_create_spud_admin_permissions.rb +11 -0
  283. data/db/migrate/20111214161146_create_spud_users.rb +29 -0
  284. data/db/migrate/20120327124229_add_time_zone_to_spud_user.rb +6 -0
  285. data/db/migrate/20120328235431_add_scope_to_spud_admin_permissions.rb +6 -0
  286. data/db/migrate/20120329174000_create_spud_user_settings.rb +11 -0
  287. data/lib/spud_core/belongs_to_app.rb +59 -0
  288. data/lib/spud_core/configuration.rb +58 -0
  289. data/lib/spud_core/engine.rb +55 -0
  290. data/lib/spud_core/searchable.rb +11 -0
  291. data/lib/spud_core/test_files.rb +25 -0
  292. data/lib/spud_core/version.rb +5 -0
  293. data/lib/tasks/spud_core_tasks.rake +4 -0
  294. data/lib/tb_core.rb +6 -0
  295. data/spec/controllers/spud/admin/application_controller_spec.rb +49 -0
  296. data/spec/controllers/spud/admin/dashboard_controller_spec.rb +129 -0
  297. data/spec/controllers/spud/admin/users_controller_spec.rb +194 -0
  298. data/spec/controllers/spud/application_controller_spec.rb +6 -0
  299. data/spec/controllers/spud/password_reset_controller_spec.rb +93 -0
  300. data/spec/controllers/spud/setup_controller_spec.rb +56 -0
  301. data/spec/controllers/spud/sitemap_controllers_spec.rb +20 -0
  302. data/spec/controllers/spud/user_sessions_controller_spec.rb +51 -0
  303. data/spec/controllers/spud/users_controller_spec.rb +69 -0
  304. data/spec/dummy/README.rdoc +261 -0
  305. data/spec/dummy/Rakefile +7 -0
  306. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  307. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  308. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  309. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  310. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  311. data/spec/dummy/config/application.rb +58 -0
  312. data/spec/dummy/config/boot.rb +10 -0
  313. data/spec/dummy/config/database.yml +15 -0
  314. data/spec/dummy/config/environment.rb +5 -0
  315. data/spec/dummy/config/environments/development.rb +37 -0
  316. data/spec/dummy/config/environments/production.rb +67 -0
  317. data/spec/dummy/config/environments/test.rb +37 -0
  318. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  319. data/spec/dummy/config/initializers/inflections.rb +15 -0
  320. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  321. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  322. data/spec/dummy/config/initializers/session_store.rb +8 -0
  323. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  324. data/spec/dummy/config/locales/en.yml +5 -0
  325. data/spec/dummy/config/routes.rb +5 -0
  326. data/spec/dummy/config.ru +4 -0
  327. data/spec/dummy/db/schema.rb +59 -0
  328. data/spec/dummy/log/development.log +39 -0
  329. data/spec/dummy/log/test.log +37811 -0
  330. data/spec/dummy/public/404.html +26 -0
  331. data/spec/dummy/public/422.html +26 -0
  332. data/spec/dummy/public/500.html +25 -0
  333. data/spec/dummy/public/favicon.ico +0 -0
  334. data/spec/dummy/script/rails +6 -0
  335. data/spec/helpers/spud/admin/application_helper_spec.rb +150 -0
  336. data/spec/helpers/spud/application_helper_spec.rb +66 -0
  337. data/spec/lib/spud_core/configuration_spec.rb +34 -0
  338. data/spec/models/spud_user_spec.rb +27 -0
  339. data/spec/spec_helper.rb +40 -0
  340. data/spec/support/authlogic_helper.rb +2 -0
  341. 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%>&nbsp;&nbsp;
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,3 @@
1
+ <%=content_for :detail do%>
2
+ <%=render "edit"%>
3
+ <%end%>
@@ -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%>&nbsp;<%=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,3 @@
1
+ <%=content_for :detail do%>
2
+ <%=render "new"%>
3
+ <%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,11 @@
1
+ class CreateSpudAdminPermissions < ActiveRecord::Migration
2
+ def change
3
+ create_table :spud_admin_permissions do |t|
4
+ t.integer :user_id
5
+ t.string :name
6
+ t.boolean :access
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -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,6 @@
1
+ class AddTimeZoneToSpudUser < ActiveRecord::Migration
2
+ def change
3
+ add_column :spud_users, :time_zone, :string
4
+
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ class AddScopeToSpudAdminPermissions < ActiveRecord::Migration
2
+ def change
3
+ add_column :spud_admin_permissions, :scope, :string
4
+
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ class CreateSpudUserSettings < ActiveRecord::Migration
2
+ def change
3
+ create_table :spud_user_settings do |t|
4
+ t.integer :spud_user_id
5
+ t.string :key
6
+ t.string :value
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ 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