appyantra_admin 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +24 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +101 -0
  5. data/Rakefile +26 -0
  6. data/app/assets/images/appyantra_admin/.gitkeep +0 -0
  7. data/app/assets/images/appyantra_admin/breadcrumb_divider.png +0 -0
  8. data/app/assets/images/appyantra_admin/btn_submit.png +0 -0
  9. data/app/assets/images/appyantra_admin/btn_submit_2.png +0 -0
  10. data/app/assets/images/appyantra_admin/btn_view_site.png +0 -0
  11. data/app/assets/images/appyantra_admin/header_bg.png +0 -0
  12. data/app/assets/images/appyantra_admin/header_shadow.png +0 -0
  13. data/app/assets/images/appyantra_admin/icn_add_user.png +0 -0
  14. data/app/assets/images/appyantra_admin/icn_alert_error.png +0 -0
  15. data/app/assets/images/appyantra_admin/icn_alert_info.png +0 -0
  16. data/app/assets/images/appyantra_admin/icn_alert_success.png +0 -0
  17. data/app/assets/images/appyantra_admin/icn_alert_warning.png +0 -0
  18. data/app/assets/images/appyantra_admin/icn_audio.png +0 -0
  19. data/app/assets/images/appyantra_admin/icn_categories.png +0 -0
  20. data/app/assets/images/appyantra_admin/icn_edit.png +0 -0
  21. data/app/assets/images/appyantra_admin/icn_edit_article.png +0 -0
  22. data/app/assets/images/appyantra_admin/icn_folder.png +0 -0
  23. data/app/assets/images/appyantra_admin/icn_jump_back.png +0 -0
  24. data/app/assets/images/appyantra_admin/icn_logout.png +0 -0
  25. data/app/assets/images/appyantra_admin/icn_new_article.png +0 -0
  26. data/app/assets/images/appyantra_admin/icn_photo.png +0 -0
  27. data/app/assets/images/appyantra_admin/icn_profile.png +0 -0
  28. data/app/assets/images/appyantra_admin/icn_search.png +0 -0
  29. data/app/assets/images/appyantra_admin/icn_security.png +0 -0
  30. data/app/assets/images/appyantra_admin/icn_settings.png +0 -0
  31. data/app/assets/images/appyantra_admin/icn_tags.png +0 -0
  32. data/app/assets/images/appyantra_admin/icn_trash.png +0 -0
  33. data/app/assets/images/appyantra_admin/icn_user.png +0 -0
  34. data/app/assets/images/appyantra_admin/icn_video.png +0 -0
  35. data/app/assets/images/appyantra_admin/icn_view_users.png +0 -0
  36. data/app/assets/images/appyantra_admin/module_footer_bg.png +0 -0
  37. data/app/assets/images/appyantra_admin/post_message.png +0 -0
  38. data/app/assets/images/appyantra_admin/secondary_bar.png +0 -0
  39. data/app/assets/images/appyantra_admin/secondary_bar_shadow.png +0 -0
  40. data/app/assets/images/appyantra_admin/sidebar.png +0 -0
  41. data/app/assets/images/appyantra_admin/sidebar_divider.png +0 -0
  42. data/app/assets/images/appyantra_admin/sidebar_shadow.png +0 -0
  43. data/app/assets/images/appyantra_admin/table_sorter_header.png +0 -0
  44. data/app/assets/images/appyantra_admin/trash.png +0 -0
  45. data/app/assets/images/appyantra_admin/view.png +0 -0
  46. data/app/assets/images/website/600x300.gif +0 -0
  47. data/app/assets/images/website/alert-overlay.png +0 -0
  48. data/app/assets/images/website/bg.png +0 -0
  49. data/app/assets/images/website/link_bg.png +0 -0
  50. data/app/assets/images/website/link_border.png +0 -0
  51. data/app/assets/images/website/place_holder_img.png +0 -0
  52. data/app/assets/images/website/triangle.gif +0 -0
  53. data/app/assets/javascripts/appyantra_admin/admin_settings.js.coffee +3 -0
  54. data/app/assets/javascripts/appyantra_admin/admins/profiles.js.coffee +3 -0
  55. data/app/assets/javascripts/appyantra_admin/application.js +9 -0
  56. data/app/assets/javascripts/appyantra_admin/hideshow.js +39 -0
  57. data/app/assets/javascripts/appyantra_admin/home.js.coffee +3 -0
  58. data/app/assets/javascripts/appyantra_admin/jquery-1.5.2.min.js +16 -0
  59. data/app/assets/javascripts/appyantra_admin/jquery.equalHeight.js +20 -0
  60. data/app/assets/javascripts/appyantra_admin/jquery.tablesorter.min.js +4 -0
  61. data/app/assets/javascripts/appyantra_admin/managed_models.js.coffee +7 -0
  62. data/app/assets/javascripts/website/application.js +8 -0
  63. data/app/assets/javascripts/website/ie/DD_belatedPNG_0.0.8a-min.js +13 -0
  64. data/app/assets/javascripts/website/jquery.easing.1.3.js +205 -0
  65. data/app/assets/javascripts/website/jquery.roundabout-1.0.min.js +41 -0
  66. data/app/assets/javascripts/website/jquery.roundabout-shapes-1.1.js +150 -0
  67. data/app/assets/stylesheets/appyantra_admin/admin_settings.css.scss +3 -0
  68. data/app/assets/stylesheets/appyantra_admin/admins/profiles.css.scss +3 -0
  69. data/app/assets/stylesheets/appyantra_admin/application.css +7 -0
  70. data/app/assets/stylesheets/appyantra_admin/ie/ie.css +43 -0
  71. data/app/assets/stylesheets/appyantra_admin/main.css +1191 -0
  72. data/app/assets/stylesheets/appyantra_admin/managed_models.css.scss +3 -0
  73. data/app/assets/stylesheets/website/application.css +7 -0
  74. data/app/assets/stylesheets/website/reset.css +53 -0
  75. data/app/assets/stylesheets/website/styles.css +889 -0
  76. data/app/controllers/appyantra_admin/admin_settings_controller.rb +101 -0
  77. data/app/controllers/appyantra_admin/application_controller.rb +30 -0
  78. data/app/controllers/appyantra_admin/assets_controller.rb +91 -0
  79. data/app/controllers/appyantra_admin/home_controller.rb +24 -0
  80. data/app/controllers/appyantra_admin/pages_controller.rb +123 -0
  81. data/app/controllers/appyantra_admin/passwords_controller.rb +28 -0
  82. data/app/controllers/appyantra_admin/profiles_controller.rb +94 -0
  83. data/app/controllers/appyantra_admin/sessions_controller.rb +20 -0
  84. data/app/controllers/appyantra_admin/users/confirmations_controller.rb +15 -0
  85. data/app/controllers/appyantra_admin/users/passwords_controller.rb +16 -0
  86. data/app/controllers/appyantra_admin/users/registrations_controller.rb +16 -0
  87. data/app/controllers/appyantra_admin/users/sessions_controller.rb +15 -0
  88. data/app/controllers/appyantra_admin/users/user_paths.rb +33 -0
  89. data/app/controllers/appyantra_admin/users_controller.rb +92 -0
  90. data/app/helpers/appyantra_admin/admin_settings_helper.rb +9 -0
  91. data/app/helpers/appyantra_admin/application_helper.rb +73 -0
  92. data/app/helpers/appyantra_admin/pages_helper.rb +38 -0
  93. data/app/models/activity_feed.rb +5 -0
  94. data/app/models/activity_log_observer.rb +58 -0
  95. data/app/models/admin.rb +11 -0
  96. data/app/models/admin_setting.rb +74 -0
  97. data/app/models/encrypted_text.rb +20 -0
  98. data/app/models/link.rb +5 -0
  99. data/app/models/page.rb +24 -0
  100. data/app/models/page_keyword.rb +4 -0
  101. data/app/models/person.rb +14 -0
  102. data/app/models/short_text.rb +23 -0
  103. data/app/models/text.rb +11 -0
  104. data/app/models/user.rb +11 -0
  105. data/app/sweepers/appyantra_admin/pages_sweeper.rb +20 -0
  106. data/app/views/appyantra_admin/admin_settings/edit.html.haml +7 -0
  107. data/app/views/appyantra_admin/admin_settings/index.html.haml +56 -0
  108. data/app/views/appyantra_admin/admin_settings/mail_settings.html.haml +7 -0
  109. data/app/views/appyantra_admin/admin_settings/new.html.haml +7 -0
  110. data/app/views/appyantra_admin/assets/display.js.haml +3 -0
  111. data/app/views/appyantra_admin/assets/edit.html.haml +7 -0
  112. data/app/views/appyantra_admin/assets/new.html.haml +7 -0
  113. data/app/views/appyantra_admin/assets/show.html.haml +55 -0
  114. data/app/views/appyantra_admin/home/index.html.haml +74 -0
  115. data/app/views/appyantra_admin/mailer/reset_password_instructions.html.haml +6 -0
  116. data/app/views/appyantra_admin/mailer/unlock_instructions.html.haml +6 -0
  117. data/app/views/appyantra_admin/pages/_form.html.haml +40 -0
  118. data/app/views/appyantra_admin/pages/_page.html.haml +43 -0
  119. data/app/views/appyantra_admin/pages/edit.html.haml +19 -0
  120. data/app/views/appyantra_admin/pages/index.html.haml +46 -0
  121. data/app/views/appyantra_admin/pages/new.html.haml +7 -0
  122. data/app/views/appyantra_admin/pages/show.html.haml +1 -0
  123. data/app/views/appyantra_admin/passwords/edit.html.haml +15 -0
  124. data/app/views/appyantra_admin/passwords/new.html.haml +11 -0
  125. data/app/views/appyantra_admin/profiles/_admin_profile_form.html.haml +12 -0
  126. data/app/views/appyantra_admin/profiles/_admin_user.html.haml +11 -0
  127. data/app/views/appyantra_admin/profiles/edit.html.haml +18 -0
  128. data/app/views/appyantra_admin/profiles/index.html.haml +51 -0
  129. data/app/views/appyantra_admin/profiles/new.html.haml +6 -0
  130. data/app/views/appyantra_admin/profiles/show.html.haml +10 -0
  131. data/app/views/appyantra_admin/profiles/show.js.haml +3 -0
  132. data/app/views/appyantra_admin/sessions/new.html.haml +17 -0
  133. data/app/views/appyantra_admin/shared/_asset_item.html.haml +15 -0
  134. data/app/views/appyantra_admin/shared/_assets_list.html.haml +6 -0
  135. data/app/views/appyantra_admin/shared/_formtastic_semantic_form.html.haml +3 -0
  136. data/app/views/appyantra_admin/shared/_hash_form.html.haml +7 -0
  137. data/app/views/appyantra_admin/shared/_links.haml +6 -0
  138. data/app/views/appyantra_admin/shared/types/_encrypted_text.html.haml +1 -0
  139. data/app/views/appyantra_admin/shared/types/_link.html.haml +1 -0
  140. data/app/views/appyantra_admin/shared/types/_short_text.html.haml +1 -0
  141. data/app/views/appyantra_admin/shared/types/_text.html.haml +1 -0
  142. data/app/views/appyantra_admin/unlocks/new.html.haml +10 -0
  143. data/app/views/appyantra_admin/users/_form.html.haml +12 -0
  144. data/app/views/appyantra_admin/users/_user.html.haml +11 -0
  145. data/app/views/appyantra_admin/users/edit.html.haml +18 -0
  146. data/app/views/appyantra_admin/users/index.html.haml +54 -0
  147. data/app/views/appyantra_admin/users/new.html.haml +6 -0
  148. data/app/views/appyantra_admin/users/show.html.haml +10 -0
  149. data/app/views/appyantra_admin/users/show.js.haml +3 -0
  150. data/app/views/layouts/application.html.haml +98 -0
  151. data/app/views/layouts/appyantra_admin/application.html.haml +106 -0
  152. data/app/views/layouts/appyantra_admin/landing_page.html.haml +30 -0
  153. data/app/views/layouts/appyantra_admin/website.html.haml +96 -0
  154. data/app/views/pages/_google_analytics.html.haml +11 -0
  155. data/app/views/pages/_meta_tags.html.haml +2 -0
  156. data/app/views/pages/page.html.haml +4 -0
  157. data/app/views/users/confirmations/new.html.haml +26 -0
  158. data/app/views/users/mailer/confirmation_instructions.html.haml +4 -0
  159. data/app/views/users/mailer/reset_password_instructions.html.haml +6 -0
  160. data/app/views/users/mailer/unlock_instructions.html.haml +5 -0
  161. data/app/views/users/passwords/edit.html.haml +31 -0
  162. data/app/views/users/passwords/new.html.haml +22 -0
  163. data/app/views/users/registrations/edit.html.haml +42 -0
  164. data/app/views/users/registrations/new.html.haml +35 -0
  165. data/app/views/users/sessions/new.html.haml +26 -0
  166. data/app/views/website/index.html.haml +50 -0
  167. data/appyantra_admin.gemspec +24 -0
  168. data/config/initializers/devise.rb +209 -0
  169. data/config/initializers/formtastic.rb +82 -0
  170. data/config/initializers/mail_settings.rb +11 -0
  171. data/config/initializers/secret_token.rb +7 -0
  172. data/config/initializers/session_store.rb +8 -0
  173. data/config/initializers/wrap_parameters.rb +14 -0
  174. data/config/routes.rb +71 -0
  175. data/db/migrate/20120123093508_create_links.rb +15 -0
  176. data/db/migrate/20120123093916_create_texts.rb +10 -0
  177. data/db/migrate/20120123094124_create_admin_settings.rb +12 -0
  178. data/db/migrate/20120124202814_devise_create_admins.rb +25 -0
  179. data/db/migrate/20120125093505_add_name_to_admins.rb +6 -0
  180. data/db/migrate/20120217075442_devise_create_users.rb +25 -0
  181. data/db/migrate/20120217090326_add_name_to_users.rb +6 -0
  182. data/db/migrate/20120224210009_create_pages.rb +19 -0
  183. data/db/migrate/20120302084134_add_group_to_admin_settings.rb +5 -0
  184. data/db/migrate/20120309075847_create_encrypted_texts.rb +10 -0
  185. data/db/migrate/20120309075904_create_short_texts.rb +10 -0
  186. data/db/migrate/20120312234850_add_seo_to_pages.rb +5 -0
  187. data/db/migrate/20120312235235_create_keywords.rb +10 -0
  188. data/db/migrate/20120314063338_create_activity_feeds.rb +15 -0
  189. data/lib/appyantra_admin.rb +49 -0
  190. data/lib/appyantra_admin/crypto.rb +43 -0
  191. data/lib/appyantra_admin/engine.rb +17 -0
  192. data/lib/appyantra_admin/utils.rb +27 -0
  193. data/lib/appyantra_admin/version.rb +3 -0
  194. data/lib/generators/appyantra_admin/install/USAGE +8 -0
  195. data/lib/generators/appyantra_admin/install/install_generator.rb +34 -0
  196. data/lib/generators/appyantra_admin/install/templates/appyantra_admin.rb +28 -0
  197. data/lib/tasks/appyantra_admin_tasks.rake +47 -0
  198. data/script/rails +6 -0
  199. data/test/dummy/.gitignore +36 -0
  200. data/test/dummy/.rspec +1 -0
  201. data/test/dummy/Gemfile +43 -0
  202. data/test/dummy/Guardfile +19 -0
  203. data/test/dummy/README +261 -0
  204. data/test/dummy/Rakefile +8 -0
  205. data/test/dummy/app/assets/javascripts/application.js +9 -0
  206. data/test/dummy/app/assets/stylesheets/application.css +7 -0
  207. data/test/dummy/app/controllers/application_controller.rb +3 -0
  208. data/test/dummy/app/helpers/application_helper.rb +2 -0
  209. data/test/dummy/app/models/product.rb +2 -0
  210. data/test/dummy/config.ru +4 -0
  211. data/test/dummy/config/application.rb +48 -0
  212. data/test/dummy/config/boot.rb +6 -0
  213. data/test/dummy/config/environment.rb +5 -0
  214. data/test/dummy/config/environments/development.rb +30 -0
  215. data/test/dummy/config/environments/production.rb +60 -0
  216. data/test/dummy/config/environments/test.rb +39 -0
  217. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  218. data/test/dummy/config/initializers/inflections.rb +10 -0
  219. data/test/dummy/config/initializers/mime_types.rb +5 -0
  220. data/test/dummy/config/initializers/secret_token.rb +7 -0
  221. data/test/dummy/config/initializers/session_store.rb +8 -0
  222. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  223. data/test/dummy/config/locales/en.yml +5 -0
  224. data/test/dummy/config/routes.rb +4 -0
  225. data/test/dummy/db/migrate/20120213070715_create_products.rb +11 -0
  226. data/test/dummy/db/seeds.rb +7 -0
  227. data/test/dummy/doc/README_FOR_APP +2 -0
  228. data/test/dummy/public/404.html +26 -0
  229. data/test/dummy/public/422.html +26 -0
  230. data/test/dummy/public/500.html +26 -0
  231. data/test/dummy/public/favicon.ico +0 -0
  232. data/test/dummy/public/robots.txt +5 -0
  233. data/test/dummy/script/rails +6 -0
  234. data/test/dummy/spec/controllers/appyantra_admin/admin_settings_controller_spec.rb +56 -0
  235. data/test/dummy/spec/controllers/appyantra_admin/assets_controller_spec.rb +64 -0
  236. data/test/dummy/spec/controllers/appyantra_admin/home_controller_spec.rb +28 -0
  237. data/test/dummy/spec/controllers/appyantra_admin/passwords_controller_spec.rb +40 -0
  238. data/test/dummy/spec/controllers/appyantra_admin/profiles_controller_spec.rb +88 -0
  239. data/test/dummy/spec/controllers/appyantra_admin/sessions_controller_spec.rb +32 -0
  240. data/test/dummy/spec/factories.rb +55 -0
  241. data/test/dummy/spec/factories/products.rb +9 -0
  242. data/test/dummy/spec/helpers/appyantra_admin/application_helper_spec.rb +31 -0
  243. data/test/dummy/spec/models/admin_setting_spec.rb +22 -0
  244. data/test/dummy/spec/models/admin_spec.rb +10 -0
  245. data/test/dummy/spec/models/encrypted_text_spec.rb +13 -0
  246. data/test/dummy/spec/models/link_spec.rb +5 -0
  247. data/test/dummy/spec/models/text_spec.rb +5 -0
  248. data/test/dummy/spec/requests/appyantra_admin/admin_user_auth_spec.rb +54 -0
  249. data/test/dummy/spec/requests/appyantra_admin/dashboard_spec.rb +34 -0
  250. data/test/dummy/spec/requests/appyantra_admin/mailer_spec.rb +72 -0
  251. data/test/dummy/spec/requests/appyantra_admin/manage_pages_spec.rb +209 -0
  252. data/test/dummy/spec/requests/appyantra_admin/manage_website_users_spec.rb +97 -0
  253. data/test/dummy/spec/requests/appyantra_admin/website_users_spec.rb +25 -0
  254. data/test/dummy/spec/routing/sessions_routing_spec.rb +11 -0
  255. data/test/dummy/spec/spec_helper.rb +51 -0
  256. data/test/dummy/spec/support/capybara.rb +7 -0
  257. data/test/dummy/spec/support/controller_macros.rb +8 -0
  258. data/test/dummy/spec/support/integration_macros.rb +40 -0
  259. data/test/dummy/spec/support/load_routes.rb +5 -0
  260. data/test/dummy/spec/support/matchers/user_matcher.rb +13 -0
  261. metadata +428 -0
@@ -0,0 +1,20 @@
1
+ module AppyantraAdmin
2
+ class SessionsController < Devise::SessionsController
3
+
4
+ layout '/appyantra_admin/application'
5
+ layout '/appyantra_admin/landing_page', only: [:new]
6
+
7
+ before_filter(only: [:new]) { @page_title = 'Sign In'}
8
+
9
+ private
10
+
11
+ def after_sign_out_path_for(resource)
12
+ main_app.new_admin_session_path
13
+ end
14
+
15
+ def after_sign_in_path_for(resource)
16
+ main_app.appyantra_admin_home_path
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module AppyantraAdmin
2
+ class Users::ConfirmationsController < Devise::ConfirmationsController
3
+
4
+ layout 'application'
5
+
6
+ before_filter(only: [:new]) { @page_title = 'Resend confirmation instructions'}
7
+
8
+ helper AppyantraAdmin::ApplicationHelper
9
+
10
+ private
11
+
12
+ include AppyantraAdmin::Users::UserPaths
13
+
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ module AppyantraAdmin
2
+ class Users::PasswordsController < Devise::PasswordsController
3
+
4
+ layout 'application'
5
+
6
+ before_filter(only: [:edit]) { @page_title = 'Change your password'}
7
+ before_filter(only: [:new]) { @page_title = 'Forgot your password?'}
8
+
9
+ helper AppyantraAdmin::ApplicationHelper
10
+
11
+ private
12
+
13
+ include AppyantraAdmin::Users::UserPaths
14
+
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module AppyantraAdmin
2
+ class Users::RegistrationsController < Devise::RegistrationsController
3
+
4
+ layout 'application'
5
+
6
+ before_filter(only: [:new]) { @page_title = 'Sign Up'}
7
+ before_filter(only: [:edit]) { @page_title = 'Update Account'}
8
+
9
+ helper AppyantraAdmin::ApplicationHelper
10
+
11
+ private
12
+
13
+ include AppyantraAdmin::Users::UserPaths
14
+
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module AppyantraAdmin
2
+ class Users::SessionsController < Devise::SessionsController
3
+
4
+ layout 'application'
5
+
6
+ before_filter(only: [:new]) { @page_title = 'Sign In' }
7
+
8
+ helper AppyantraAdmin::ApplicationHelper
9
+
10
+ private
11
+
12
+ include AppyantraAdmin::Users::UserPaths
13
+
14
+ end
15
+ end
@@ -0,0 +1,33 @@
1
+ module AppyantraAdmin
2
+ module Users::UserPaths
3
+
4
+ def after_sign_out_path_for(resource)
5
+ main_app.root_path
6
+ end
7
+
8
+ def after_sign_in_path_for(resource)
9
+ main_app.root_path
10
+ end
11
+
12
+ def after_inactive_sign_up_path_for(resource)
13
+ main_app.root_path
14
+ end
15
+
16
+ def after_update_path_for(resource)
17
+ main_app.root_path
18
+ end
19
+
20
+ def after_resending_confirmation_instructions_path_for(resource_name)
21
+ main_app.root_path
22
+ end
23
+
24
+ def after_confirmation_path_for(resource_name, resource)
25
+ main_app.root_path
26
+ end
27
+
28
+ def after_sending_reset_password_instructions_path_for(resource_name)
29
+ main_app.root_path
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,92 @@
1
+ module AppyantraAdmin
2
+ class UsersController < ApplicationController
3
+
4
+ include AppyantraAdmin::Utils
5
+
6
+ before_filter :authenticate_admin!
7
+
8
+ # breadcrumbs
9
+ before_filter(only: [:index, :new, :edit, :show]) { |c| c.add_breadcrumb(['Home', main_app.appyantra_admin_home_path])}
10
+ before_filter(only: [:new, :edit, :show]) { |c| c.add_breadcrumb(['User Profiles', main_app.appyantra_admin_users_path])}
11
+
12
+ def index
13
+ @page_title = 'User Profiles'
14
+ current_breadcrumb @page_title
15
+ @users = User.all
16
+ end
17
+
18
+ def new
19
+ @page_title = 'New User'
20
+ current_breadcrumb 'New'
21
+ @user = User.new
22
+ end
23
+
24
+ def create
25
+ selected_user = User.new(params[:user])
26
+ password = random_password
27
+ selected_user.password = password
28
+ selected_user.password_confirmation = password
29
+ respond_to do |format|
30
+ if selected_user.save
31
+ format.html do |format|
32
+ flash[:notice] = "User Profile was successfully created"
33
+ redirect_to main_app.appyantra_admin_users_path
34
+ end
35
+ else
36
+ # TODO handle errors
37
+ end
38
+ end
39
+ end
40
+
41
+ def show
42
+ @selected_user = User.find(params[:id])
43
+ @page_title = 'User | ' + @selected_user.display_name
44
+ current_breadcrumb @selected_user.display_name
45
+ respond_to do |format|
46
+ format.html
47
+ format.js
48
+ end
49
+ end
50
+
51
+ def edit
52
+ @user = User.find(params[:id])
53
+ @page_title = 'User | ' + @user.display_name
54
+ add_breadcrumb([@user.display_name, main_app.edit_appyantra_admin_user_path(@user)])
55
+ current_breadcrumb 'Edit'
56
+ render 'edit'
57
+ end
58
+
59
+ def update
60
+ selected_user = User.find(params[:id])
61
+ respond_to do |format|
62
+ if selected_user.update_attributes(params[:user])
63
+ format.html do |format|
64
+ flash[:notice] = "User Profile was successfully updated."
65
+ redirect_to main_app.appyantra_admin_users_path
66
+ end
67
+ else
68
+ # TODO handle errors
69
+ end
70
+ end
71
+ end
72
+
73
+ def update_password
74
+ user = User.find(params[:id])
75
+ password_params = params[:user]
76
+ user.reset_password!(password_params[:password], password_params[:password_confirmation])
77
+ # TODO Fix auto logout issue when password is changed
78
+ # sign_in(current_admin, :bypass => true)
79
+ flash[:notice] = "Password was successfully updated."
80
+ redirect_to main_app.appyantra_admin_users_path
81
+ # TODO handle errors
82
+ end
83
+
84
+ def destroy
85
+ user = User.find(params[:id])
86
+ user.destroy
87
+ flash[:notice] = "User was successfully deleted."
88
+ redirect_to main_app.appyantra_admin_users_path
89
+ end
90
+
91
+ end
92
+ end
@@ -0,0 +1,9 @@
1
+ module AppyantraAdmin::AdminSettingsHelper
2
+ def fetch_group_settings(group)
3
+ AdminSetting.where(group: group)
4
+ end
5
+
6
+ def settings_groups
7
+ AdminSetting.managed_groups
8
+ end
9
+ end
@@ -0,0 +1,73 @@
1
+ module AppyantraAdmin::ApplicationHelper
2
+ def display_date(date)
3
+ date.strftime("%m-%d-%Y %H:%M")
4
+ end
5
+
6
+ def setting_value(entity_name, default='Not Set')
7
+ setting = AdminSetting.find_by_name(entity_name)
8
+ if setting && setting.entity
9
+ render partial: "/appyantra_admin/shared/types/#{setting.entity.class.name.underscore}", locals: { entity: setting.entity}
10
+ else
11
+ default
12
+ end
13
+ end
14
+
15
+ def breadcrumb
16
+ breadcrumb_html = ''
17
+ if @breadcrumbs
18
+ while !@breadcrumbs.empty? do
19
+ curr_breadcrumb = @breadcrumbs.pop
20
+ breadcrumb_html << "<a href='#{curr_breadcrumb[1]}'>#{curr_breadcrumb[0]}</a><div class='breadcrumb_divider'></div>"
21
+ end
22
+ breadcrumb_html << "<a class='current'>#{@current_breadcrumb}</a>"
23
+ end
24
+ breadcrumb_html
25
+ end
26
+
27
+ # displays the name of the first field of a model
28
+ def asset_display_field(asset_class_name)
29
+ asset_class = eval asset_class_name
30
+ asset_class.column_names[1].capitalize
31
+ end
32
+
33
+ # displays the value of the first field of a model object (asset)
34
+ def asset_display_name(asset)
35
+ field_name = asset.class.column_names[1]
36
+ asset[field_name]
37
+ end
38
+
39
+ def page_title
40
+ if @page
41
+ @page.title
42
+ elsif @page_title
43
+ @page_title
44
+ end
45
+ end
46
+
47
+ def path_for slug
48
+ if Page.where(slug: slug).exists?
49
+ main_app.display_page_path(slug)
50
+ else
51
+ '#'
52
+ end
53
+ end
54
+
55
+ def include_rich_text_editor
56
+ if AdminSetting.value_of('rich_text_editor') == 'ckeditor'
57
+ javascript_include_tag "ckeditor/ckeditor.js"
58
+ end
59
+ end
60
+
61
+ def google_analytics_script
62
+ analytics_settings = AdminSetting.group_settings('Google Analytics')
63
+ if analytics_settings.has_key?(:tracking_code) && analytics_settings.has_key?(:domain)
64
+ tracking_code = analytics_settings[:tracking_code]
65
+ domain = analytics_settings[:domain]
66
+ render partial: '/pages/google_analytics', locals: { analytics_tracking_code: tracking_code, analytics_domain: domain }
67
+ end
68
+ end
69
+
70
+ def fetch_activity_feeds
71
+ ActivityFeed.latest
72
+ end
73
+ end
@@ -0,0 +1,38 @@
1
+ module AppyantraAdmin::PagesHelper
2
+ def categories
3
+ Page.where('category is not null').select('distinct category')
4
+ end
5
+
6
+ def default_category
7
+ page = Page.where('category is not null').select('distinct category').first
8
+ if page
9
+ page.category
10
+ else
11
+ ''
12
+ end
13
+ end
14
+
15
+ def published_status page
16
+ if page.published
17
+ 'Yes'
18
+ else
19
+ 'No'
20
+ end
21
+ end
22
+
23
+ def page_category page
24
+ unless page.category.empty?
25
+ page.category
26
+ else
27
+ 'Not specified.'
28
+ end
29
+ end
30
+
31
+ def page_keywords(page)
32
+ (page.keywords.collect{|pk| pk.keyword}).join(', ')
33
+ end
34
+
35
+ def page_layouts
36
+ ['None'] + AppyantraAdmin.page_layouts
37
+ end
38
+ end
@@ -0,0 +1,5 @@
1
+ class ActivityFeed < ActiveRecord::Base
2
+
3
+ scope :latest, order("created_at DESC").limit(10)
4
+
5
+ end
@@ -0,0 +1,58 @@
1
+ class ActivityLogObserver < ActiveRecord::Observer
2
+
3
+ observe :page, :user, :admin
4
+
5
+ def after_create(record)
6
+ log_activity record, 'created', :created_by
7
+ end
8
+
9
+ def after_update(record)
10
+ log_activity record, 'updated', :last_updated_by
11
+ end
12
+
13
+ def after_destroy(record)
14
+ log_activity record, 'deleted', :deleted_by
15
+ end
16
+
17
+ private
18
+
19
+ def infer_actor(record, actor_method)
20
+ if record.respond_to?(actor_method)
21
+ # actor e.g. page.created_by --> admin
22
+ actor_obj = record.send(actor_method)
23
+ if actor_obj
24
+ # check if the actor has a display_name
25
+ if actor_obj.respond_to?(:display_name)
26
+ display_name = actor_obj.send(:display_name)
27
+ else
28
+ display_name = actor_obj.class.name
29
+ end
30
+ # create a hash for the actor
31
+ actor = { type: actor_obj.class.name, id: actor_obj.id, display_name: display_name }
32
+ else
33
+ actor = {}
34
+ end
35
+ else
36
+ actor = {}
37
+ end
38
+ end
39
+
40
+ def log_activity(record, action, actor_method)
41
+ actor = infer_actor(record, actor_method)
42
+ ActivityFeed.create(item_type: record.class.name, item_id: record.id,
43
+ item: record_identifier(record), actor: actor[:display_name],
44
+ actor_type: actor[:type], actor_id: actor[:id], activity: action)
45
+ end
46
+
47
+ def record_identifier(record)
48
+ if record.respond_to?(:identifier)
49
+ record.send(:identifier)
50
+ elsif record.respond_to?(:display_name)
51
+ record.send(:display_name)
52
+ else
53
+ record.class.name << '#' << record.id
54
+ end
55
+ end
56
+
57
+ end
58
+
@@ -0,0 +1,11 @@
1
+ class Admin < ActiveRecord::Base
2
+ # Include default devise modules. Others available are:
3
+ # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
4
+ devise :database_authenticatable,
5
+ :recoverable, :rememberable, :trackable, :validatable
6
+
7
+ # Setup accessible (or protected) attributes for your model
8
+ attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name
9
+
10
+ include Person
11
+ end
@@ -0,0 +1,74 @@
1
+ class AdminSetting < ActiveRecord::Base
2
+
3
+ validates :name, uniqueness: { scope: :group }
4
+
5
+ scope :managed_groups, where("admin_settings.group != 'Mail'").select("distinct admin_settings.group")
6
+
7
+ after_create :clear_pages
8
+ after_update :clear_pages
9
+ after_destroy :clear_pages
10
+
11
+ def entity
12
+ type_class = eval self.entity_type
13
+ type_class.find self.entity_id
14
+ end
15
+
16
+ def self.create_from_entity(name, entity, group='General', display_name=name.titleize)
17
+ self.create(name: name, display_name: display_name,
18
+ entity_type: entity.class.name,
19
+ entity_id: entity.id,
20
+ group: group)
21
+ end
22
+
23
+ # finds a setting by name and returns the value of the setting's entity. The entity should implement a entity_value method
24
+ # if no setting exists for the name then returns nil
25
+ def self.value_of(setting_name)
26
+ setting = AdminSetting.find_by_name(setting_name)
27
+ if setting && setting.entity
28
+ setting.entity.entity_value
29
+ end
30
+ end
31
+
32
+ # convenience method for initializing a settings group with empty values
33
+ # fields should be a hash { <field_type(string))> : <field_names(string_array)> }
34
+ # Only fields (model classes) having a name/value properties are supported (Text, ShortText etc.)
35
+ # returns a hash of type { <field_name> : nil }
36
+ def self.initialize_group(group, fields)
37
+ group_settings = Hash.new
38
+ fields.each do |field_type, field_names|
39
+ field_names.each do |field_name|
40
+ field_class = eval field_type
41
+ field = field_class.create(name: field_name, value: nil)
42
+ group_settings[field_name] = nil
43
+ AdminSetting.create_from_entity(field_name, field, group, field_name.humanize)
44
+ end
45
+ end
46
+ group_settings
47
+ end
48
+
49
+ def self.group_settings(group)
50
+ group_settings = AdminSetting.where(group: group)
51
+ settings_hash = Hash.new
52
+ group_settings.each do |setting|
53
+ entity_value = setting.entity.entity_value
54
+ settings_hash[setting.name.to_sym] = entity_value
55
+ end
56
+ settings_hash
57
+ end
58
+
59
+ def self.update_group_settings(group, settings_hash)
60
+ settings_hash.each do |setting_name, setting_value|
61
+ setting = AdminSetting.find_by_group_and_name(group, setting_name)
62
+ setting.entity.entity_value = setting_value
63
+ end
64
+ end
65
+
66
+ private
67
+
68
+ def clear_pages
69
+ if self.group == 'Google Analytics'
70
+ # clears all the cached pages
71
+ FileUtils.rm_rf Rails.root.join("public/pages")
72
+ end
73
+ end
74
+ end