sunrise-core 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) hide show
  1. data/README.rdoc +46 -0
  2. data/Rakefile +44 -0
  3. data/app/controllers/manage/assets_controller.rb +70 -0
  4. data/app/controllers/manage/base_controller.rb +24 -0
  5. data/app/controllers/manage/pages_controller.rb +37 -0
  6. data/app/controllers/manage/settings_controller.rb +24 -0
  7. data/app/controllers/manage/structures_controller.rb +45 -0
  8. data/app/controllers/manage/users_controller.rb +78 -0
  9. data/app/controllers/pages_controller.rb +22 -0
  10. data/app/views/layouts/manage.html.erb +40 -0
  11. data/app/views/manage/assets/_collection.html.erb +32 -0
  12. data/app/views/manage/assets/_picture.html.erb +10 -0
  13. data/app/views/manage/assets/_swfscript.html.erb +51 -0
  14. data/app/views/manage/headers/_form.html.erb +14 -0
  15. data/app/views/manage/pages/_form.html.erb +11 -0
  16. data/app/views/manage/pages/edit.html.erb +6 -0
  17. data/app/views/manage/pages/new.html.erb +6 -0
  18. data/app/views/manage/settings/_form.html.erb +22 -0
  19. data/app/views/manage/settings/index.html.erb +14 -0
  20. data/app/views/manage/shared/_head.html.erb +41 -0
  21. data/app/views/manage/shared/_locale.html.erb +8 -0
  22. data/app/views/manage/shared/_notice.html.erb +7 -0
  23. data/app/views/manage/shared/_panel.html.erb +34 -0
  24. data/app/views/manage/structures/_form.html.erb +28 -0
  25. data/app/views/manage/structures/_structure.html.erb +34 -0
  26. data/app/views/manage/structures/edit.html.erb +6 -0
  27. data/app/views/manage/structures/index.html.erb +51 -0
  28. data/app/views/manage/structures/new.html.erb +6 -0
  29. data/app/views/manage/users/_form.html.erb +15 -0
  30. data/app/views/manage/users/_model_filter.html.erb +33 -0
  31. data/app/views/manage/users/_user.html.erb +55 -0
  32. data/app/views/manage/users/edit.html.erb +6 -0
  33. data/app/views/manage/users/index.html.erb +36 -0
  34. data/app/views/manage/users/new.html.erb +6 -0
  35. data/app/views/manage/users/show.html.erb +19 -0
  36. data/config/locales/defaults/en.yml +149 -0
  37. data/config/locales/defaults/pluralize.rb +6 -0
  38. data/config/locales/defaults/ru.yml +170 -0
  39. data/config/locales/defaults/uk.yml +238 -0
  40. data/config/locales/devise.en.yml +39 -0
  41. data/config/locales/devise.ru.yml +41 -0
  42. data/config/locales/devise.uk.yml +41 -0
  43. data/config/locales/manage/en.yml +248 -0
  44. data/config/locales/manage/ru.yml +248 -0
  45. data/config/locales/manage/uk.yml +248 -0
  46. data/config/routes.rb +24 -0
  47. data/lib/generators/sunrise/USAGE +7 -0
  48. data/lib/generators/sunrise/install_generator.rb +120 -0
  49. data/lib/generators/sunrise/templates/config/application.yml +4 -0
  50. data/lib/generators/sunrise/templates/config/database.yml +34 -0
  51. data/lib/generators/sunrise/templates/config/logrotate-config +9 -0
  52. data/lib/generators/sunrise/templates/config/nginx-config-passenger +51 -0
  53. data/lib/generators/sunrise/templates/config/seeds.rb +25 -0
  54. data/lib/generators/sunrise/templates/config/sunrise.rb +7 -0
  55. data/lib/generators/sunrise/templates/helpers/manage/assets_helper.rb +16 -0
  56. data/lib/generators/sunrise/templates/helpers/manage/base_helper.rb +81 -0
  57. data/lib/generators/sunrise/templates/helpers/manage/pages_helper.rb +2 -0
  58. data/lib/generators/sunrise/templates/helpers/manage/settings_helper.rb +2 -0
  59. data/lib/generators/sunrise/templates/helpers/manage/structures_helper.rb +12 -0
  60. data/lib/generators/sunrise/templates/helpers/manage/users_helper.rb +6 -0
  61. data/lib/generators/sunrise/templates/images/manage/add_post_bot.gif +0 -0
  62. data/lib/generators/sunrise/templates/images/manage/add_post_top.gif +0 -0
  63. data/lib/generators/sunrise/templates/images/manage/add_white_bot.gif +0 -0
  64. data/lib/generators/sunrise/templates/images/manage/add_white_top.gif +0 -0
  65. data/lib/generators/sunrise/templates/images/manage/arrow.png +0 -0
  66. data/lib/generators/sunrise/templates/images/manage/back_but_lc.gif +0 -0
  67. data/lib/generators/sunrise/templates/images/manage/back_but_rc.gif +0 -0
  68. data/lib/generators/sunrise/templates/images/manage/bot_corn.gif +0 -0
  69. data/lib/generators/sunrise/templates/images/manage/bot_duo_corn.gif +0 -0
  70. data/lib/generators/sunrise/templates/images/manage/but_bg.png +0 -0
  71. data/lib/generators/sunrise/templates/images/manage/but_block_lc.gif +0 -0
  72. data/lib/generators/sunrise/templates/images/manage/but_block_rc.gif +0 -0
  73. data/lib/generators/sunrise/templates/images/manage/but_freze_lc.gif +0 -0
  74. data/lib/generators/sunrise/templates/images/manage/but_freze_rc.gif +0 -0
  75. data/lib/generators/sunrise/templates/images/manage/but_gr.gif +0 -0
  76. data/lib/generators/sunrise/templates/images/manage/but_gr_l.gif +0 -0
  77. data/lib/generators/sunrise/templates/images/manage/but_gr_r.gif +0 -0
  78. data/lib/generators/sunrise/templates/images/manage/but_search.gif +0 -0
  79. data/lib/generators/sunrise/templates/images/manage/but_unfreze_lc.gif +0 -0
  80. data/lib/generators/sunrise/templates/images/manage/but_unfreze_rc.gif +0 -0
  81. data/lib/generators/sunrise/templates/images/manage/button_add_foto.gif +0 -0
  82. data/lib/generators/sunrise/templates/images/manage/button_add_foto_ru.gif +0 -0
  83. data/lib/generators/sunrise/templates/images/manage/button_add_foto_ua.gif +0 -0
  84. data/lib/generators/sunrise/templates/images/manage/button_add_foto_uk.gif +0 -0
  85. data/lib/generators/sunrise/templates/images/manage/cancelbutton.gif +0 -0
  86. data/lib/generators/sunrise/templates/images/manage/dark_arr.gif +0 -0
  87. data/lib/generators/sunrise/templates/images/manage/dark_arr_left.gif +0 -0
  88. data/lib/generators/sunrise/templates/images/manage/dark_cross_ico.gif +0 -0
  89. data/lib/generators/sunrise/templates/images/manage/dot.gif +0 -0
  90. data/lib/generators/sunrise/templates/images/manage/duo_bg.gif +0 -0
  91. data/lib/generators/sunrise/templates/images/manage/duo_bg_small.gif +0 -0
  92. data/lib/generators/sunrise/templates/images/manage/duo_bg_small_blocked.gif +0 -0
  93. data/lib/generators/sunrise/templates/images/manage/duo_bg_small_frozed.gif +0 -0
  94. data/lib/generators/sunrise/templates/images/manage/duo_bg_small_notact.gif +0 -0
  95. data/lib/generators/sunrise/templates/images/manage/duo_bot_small.gif +0 -0
  96. data/lib/generators/sunrise/templates/images/manage/duo_bot_small_blocked.gif +0 -0
  97. data/lib/generators/sunrise/templates/images/manage/duo_bot_small_frozed.gif +0 -0
  98. data/lib/generators/sunrise/templates/images/manage/duo_bot_small_notact.gif +0 -0
  99. data/lib/generators/sunrise/templates/images/manage/duo_top_small.gif +0 -0
  100. data/lib/generators/sunrise/templates/images/manage/duo_top_small_blocked.gif +0 -0
  101. data/lib/generators/sunrise/templates/images/manage/duo_top_small_frozed.gif +0 -0
  102. data/lib/generators/sunrise/templates/images/manage/duo_top_small_notact.gif +0 -0
  103. data/lib/generators/sunrise/templates/images/manage/edit_white_top.gif +0 -0
  104. data/lib/generators/sunrise/templates/images/manage/empty.gif +0 -0
  105. data/lib/generators/sunrise/templates/images/manage/filter_bot_bg.gif +0 -0
  106. data/lib/generators/sunrise/templates/images/manage/filter_top_bg.gif +0 -0
  107. data/lib/generators/sunrise/templates/images/manage/flag_en.gif +0 -0
  108. data/lib/generators/sunrise/templates/images/manage/flag_en_nonact.gif +0 -0
  109. data/lib/generators/sunrise/templates/images/manage/flag_ru.gif +0 -0
  110. data/lib/generators/sunrise/templates/images/manage/flag_ru_nonact.gif +0 -0
  111. data/lib/generators/sunrise/templates/images/manage/flag_ua.gif +0 -0
  112. data/lib/generators/sunrise/templates/images/manage/flag_ua_nonact.gif +0 -0
  113. data/lib/generators/sunrise/templates/images/manage/foto.jpg +0 -0
  114. data/lib/generators/sunrise/templates/images/manage/ico_add.gif +0 -0
  115. data/lib/generators/sunrise/templates/images/manage/ico_del.gif +0 -0
  116. data/lib/generators/sunrise/templates/images/manage/ico_down.gif +0 -0
  117. data/lib/generators/sunrise/templates/images/manage/ico_edit.gif +0 -0
  118. data/lib/generators/sunrise/templates/images/manage/ico_settings.gif +0 -0
  119. data/lib/generators/sunrise/templates/images/manage/ico_up.gif +0 -0
  120. data/lib/generators/sunrise/templates/images/manage/input_bg.gif +0 -0
  121. data/lib/generators/sunrise/templates/images/manage/l_but_corn.gif +0 -0
  122. data/lib/generators/sunrise/templates/images/manage/minimise_but.gif +0 -0
  123. data/lib/generators/sunrise/templates/images/manage/mp3.png +0 -0
  124. data/lib/generators/sunrise/templates/images/manage/page_arr_hover.png +0 -0
  125. data/lib/generators/sunrise/templates/images/manage/page_next_arr.gif +0 -0
  126. data/lib/generators/sunrise/templates/images/manage/page_num_hover.gif +0 -0
  127. data/lib/generators/sunrise/templates/images/manage/page_prev_arr.gif +0 -0
  128. data/lib/generators/sunrise/templates/images/manage/panel/l_but_corn.gif +0 -0
  129. data/lib/generators/sunrise/templates/images/manage/panel/maximise_but.gif +0 -0
  130. data/lib/generators/sunrise/templates/images/manage/panel/r_but_corn.gif +0 -0
  131. data/lib/generators/sunrise/templates/images/manage/panel/top_menu_arr.gif +0 -0
  132. data/lib/generators/sunrise/templates/images/manage/panel/user_pic.gif +0 -0
  133. data/lib/generators/sunrise/templates/images/manage/preloader.gif +0 -0
  134. data/lib/generators/sunrise/templates/images/manage/r_but_corn.gif +0 -0
  135. data/lib/generators/sunrise/templates/images/manage/select_bg.gif +0 -0
  136. data/lib/generators/sunrise/templates/images/manage/select_corn.gif +0 -0
  137. data/lib/generators/sunrise/templates/images/manage/struct_corn_lg.gif +0 -0
  138. data/lib/generators/sunrise/templates/images/manage/struct_corn_llg.gif +0 -0
  139. data/lib/generators/sunrise/templates/images/manage/struct_corn_lw.gif +0 -0
  140. data/lib/generators/sunrise/templates/images/manage/struct_corn_rg.gif +0 -0
  141. data/lib/generators/sunrise/templates/images/manage/struct_corn_rlg.gif +0 -0
  142. data/lib/generators/sunrise/templates/images/manage/struct_corn_rw.gif +0 -0
  143. data/lib/generators/sunrise/templates/images/manage/tab_gl.gif +0 -0
  144. data/lib/generators/sunrise/templates/images/manage/tab_gr.gif +0 -0
  145. data/lib/generators/sunrise/templates/images/manage/tab_wl.gif +0 -0
  146. data/lib/generators/sunrise/templates/images/manage/tab_wr.gif +0 -0
  147. data/lib/generators/sunrise/templates/images/manage/top_corn.gif +0 -0
  148. data/lib/generators/sunrise/templates/images/manage/top_duo_corn.gif +0 -0
  149. data/lib/generators/sunrise/templates/images/manage/top_menu_arr.gif +0 -0
  150. data/lib/generators/sunrise/templates/images/manage/transp_cross.png +0 -0
  151. data/lib/generators/sunrise/templates/images/manage/upload_progress.gif +0 -0
  152. data/lib/generators/sunrise/templates/images/manage/user_act_lc.gif +0 -0
  153. data/lib/generators/sunrise/templates/images/manage/user_act_rc.gif +0 -0
  154. data/lib/generators/sunrise/templates/images/manage/user_ico.gif +0 -0
  155. data/lib/generators/sunrise/templates/images/manage/user_pic.gif +0 -0
  156. data/lib/generators/sunrise/templates/images/manage/user_pic_small.gif +0 -0
  157. data/lib/generators/sunrise/templates/images/manage/user_pic_thumb.gif +0 -0
  158. data/lib/generators/sunrise/templates/javascripts/datepicker/jquery-ui-i18n.js +1176 -0
  159. data/lib/generators/sunrise/templates/javascripts/datepicker/jquery.ui.datepicker-ru.js +37 -0
  160. data/lib/generators/sunrise/templates/javascripts/datepicker/jquery.ui.datepicker-uk.js +37 -0
  161. data/lib/generators/sunrise/templates/javascripts/jquery-ui-timepicker-addon.js +911 -0
  162. data/lib/generators/sunrise/templates/javascripts/jquery.cookie.js +97 -0
  163. data/lib/generators/sunrise/templates/javascripts/jquery.fancybox-1.3.4.pack.js +46 -0
  164. data/lib/generators/sunrise/templates/javascripts/jquery.tmpl.min.js +10 -0
  165. data/lib/generators/sunrise/templates/javascripts/manage.js +290 -0
  166. data/lib/generators/sunrise/templates/javascripts/preloader.js +47 -0
  167. data/lib/generators/sunrise/templates/javascripts/swfupload/fileprogress.js +114 -0
  168. data/lib/generators/sunrise/templates/javascripts/swfupload/handlers.js +164 -0
  169. data/lib/generators/sunrise/templates/javascripts/swfupload/swfupload.js +1134 -0
  170. data/lib/generators/sunrise/templates/javascripts/swfupload/swfupload.queue.js +98 -0
  171. data/lib/generators/sunrise/templates/javascripts/swfupload/swfupload.swf +0 -0
  172. data/lib/generators/sunrise/templates/migrate/create_assets.rb +28 -0
  173. data/lib/generators/sunrise/templates/migrate/create_headers.rb +20 -0
  174. data/lib/generators/sunrise/templates/migrate/create_pages.rb +17 -0
  175. data/lib/generators/sunrise/templates/migrate/create_roles.rb +16 -0
  176. data/lib/generators/sunrise/templates/migrate/create_structures.rb +27 -0
  177. data/lib/generators/sunrise/templates/migrate/create_users.rb +29 -0
  178. data/lib/generators/sunrise/templates/models/defaults/ability.rb +38 -0
  179. data/lib/generators/sunrise/templates/models/defaults/asset.rb +7 -0
  180. data/lib/generators/sunrise/templates/models/defaults/attachment_file.rb +33 -0
  181. data/lib/generators/sunrise/templates/models/defaults/avatar.rb +36 -0
  182. data/lib/generators/sunrise/templates/models/defaults/header.rb +5 -0
  183. data/lib/generators/sunrise/templates/models/defaults/page.rb +5 -0
  184. data/lib/generators/sunrise/templates/models/defaults/picture.rb +34 -0
  185. data/lib/generators/sunrise/templates/models/defaults/position_type.rb +7 -0
  186. data/lib/generators/sunrise/templates/models/defaults/role.rb +20 -0
  187. data/lib/generators/sunrise/templates/models/defaults/role_type.rb +8 -0
  188. data/lib/generators/sunrise/templates/models/defaults/structure.rb +11 -0
  189. data/lib/generators/sunrise/templates/models/defaults/structure_type.rb +9 -0
  190. data/lib/generators/sunrise/templates/models/defaults/user.rb +51 -0
  191. data/lib/generators/sunrise/templates/stylesheets/application.css +1 -0
  192. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/blank.gif +0 -0
  193. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_close.png +0 -0
  194. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_loading.png +0 -0
  195. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_nav_left.png +0 -0
  196. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_nav_right.png +0 -0
  197. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_e.png +0 -0
  198. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_n.png +0 -0
  199. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_ne.png +0 -0
  200. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_nw.png +0 -0
  201. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_s.png +0 -0
  202. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_se.png +0 -0
  203. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_sw.png +0 -0
  204. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_w.png +0 -0
  205. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_left.png +0 -0
  206. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_main.png +0 -0
  207. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_over.png +0 -0
  208. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_right.png +0 -0
  209. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancybox-x.png +0 -0
  210. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancybox-y.png +0 -0
  211. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancybox.png +0 -0
  212. data/lib/generators/sunrise/templates/stylesheets/fancybox/jquery.fancybox-1.3.4.css +359 -0
  213. data/lib/generators/sunrise/templates/stylesheets/manage/ie.css +16 -0
  214. data/lib/generators/sunrise/templates/stylesheets/manage/main.css +1074 -0
  215. data/lib/generators/sunrise/templates/stylesheets/manage/panel.css +126 -0
  216. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  217. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  218. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  219. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  220. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  221. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  222. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  223. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  224. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
  225. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  226. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
  227. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
  228. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  229. data/lib/generators/sunrise/templates/stylesheets/smoothness/jquery-ui-1.8.6.custom.css +572 -0
  230. data/lib/generators/sunrise/templates/sweepers/page_sweeper.rb +22 -0
  231. data/lib/generators/sunrise/templates/sweepers/structure_sweeper.rb +29 -0
  232. data/lib/generators/sunrise/templates/sweepers/user_sweeper.rb +17 -0
  233. data/lib/generators/sunrise/templates/views/layouts/application.html.erb +37 -0
  234. data/lib/generators/sunrise/templates/views/pages/show.html.erb +2 -0
  235. data/lib/generators/sunrise/templates/views/shared/_notice.html.erb +17 -0
  236. data/lib/sunrise/controllers/head_options.rb +40 -0
  237. data/lib/sunrise/core.rb +80 -0
  238. data/lib/sunrise/core_ext/array.rb +22 -0
  239. data/lib/sunrise/core_ext/i18n.rb +21 -0
  240. data/lib/sunrise/core_ext/string.rb +28 -0
  241. data/lib/sunrise/core_ext.rb +3 -0
  242. data/lib/sunrise/core_plugins.rb +32 -0
  243. data/lib/sunrise/engine.rb +45 -0
  244. data/lib/sunrise/model_filter.rb +158 -0
  245. data/lib/sunrise/models/asset.rb +102 -0
  246. data/lib/sunrise/models/header.rb +34 -0
  247. data/lib/sunrise/models/page.rb +27 -0
  248. data/lib/sunrise/models/position_type.rb +15 -0
  249. data/lib/sunrise/models/role.rb +28 -0
  250. data/lib/sunrise/models/role_type.rb +15 -0
  251. data/lib/sunrise/models/structure.rb +43 -0
  252. data/lib/sunrise/models/structure_type.rb +15 -0
  253. data/lib/sunrise/models/user.rb +124 -0
  254. data/lib/sunrise/plugin.rb +46 -0
  255. data/lib/sunrise/plugins.rb +56 -0
  256. data/lib/sunrise/system_settings.rb +65 -0
  257. data/lib/sunrise/utils/accessible_attributes.rb +32 -0
  258. data/lib/sunrise/utils/header.rb +29 -0
  259. data/lib/sunrise/utils/i18n_backend.rb +87 -0
  260. data/lib/sunrise/utils/mysql.rb +105 -0
  261. data/lib/sunrise/utils/settingslogic.rb +164 -0
  262. data/lib/sunrise/utils/transliteration.rb +72 -0
  263. data/lib/sunrise/version.rb +3 -0
  264. data/lib/sunrise/views/form_builder.rb +44 -0
  265. data/lib/sunrise/views/helpers.rb +190 -0
  266. data/lib/sunrise/views/inputs/date_time_input.rb +46 -0
  267. data/lib/sunrise-core.rb +2 -0
  268. metadata +492 -0
@@ -0,0 +1,37 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <%= tag(:meta, :content => render_keywords, :name=>"keywords") %>
6
+ <%= tag(:meta, :content => render_description, :name=>"description") %>
7
+ <%= csrf_meta_tag %>
8
+ <title><%= render_title %></title>
9
+ <%= stylesheet_link_tag "application" %>
10
+ <%= stylesheet_link_tag 'manage/panel.css', :media=> 'screen' if content_manager? %>
11
+ <!--[if lte IE 6]><link href="/stylesheets/ie.css" rel="stylesheet" type="text/css" /><![endif]-->
12
+ <!--[if lte IE 7]><link href="/stylesheets/ie7.css" rel="stylesheet" type="text/css" /><![endif]-->
13
+
14
+ <script src="https://www.google.com/jsapi?key=" type="text/javascript"></script>
15
+ <script language="Javascript" type="text/javascript">
16
+ //<![CDATA[
17
+ google.load("jquery", "1.5.1");
18
+ google.load("swfobject", "2.2");
19
+ //]]>
20
+ </script>
21
+
22
+ <%= javascript_include_tag "preloader", "rails" %>
23
+ <%= yield(:head) %>
24
+ </head>
25
+ <body>
26
+ <%= render :partial => "manage/shared/panel" if content_manager? %>
27
+ <%= render :partial => 'shared/notice' if flash %>
28
+
29
+ <div class='content'>
30
+ <%= yield %>
31
+ </div>
32
+
33
+ <%= yield(:footer) %>
34
+
35
+ <div id="preloader" style="display:none;z-index:5000;" class="load-wait"><div><strong>Загрузка</strong></div></div>
36
+ </body>
37
+ </html>
@@ -0,0 +1,2 @@
1
+ <h1><%= @structure.title %></h1>
2
+ <%=raw Nokogiri::HTML.fragment(@page.content).to_html %>
@@ -0,0 +1,17 @@
1
+ <% unless flash.keys.empty? %>
2
+ <div class="message" style="display:none;z-index:5000;">
3
+ <div class="alert-container">
4
+ <div class="alert">
5
+ <% flash.each do |key, text| %>
6
+ <%= content_tag(:div, text, :class => "flash_#{key}") %>
7
+ <% end %>
8
+ <%= link_to_function(image_tag("cross_ico.png", :title=>t('label.close')), "$(this).parents('div.message').slideUp()", :class=>"close") %>
9
+ </div>
10
+ </div>
11
+ <script type='text/javascript' charset='UTF-8'>
12
+ $(document).ready(function(){
13
+ $('div.message').slideDown('slow');
14
+ })
15
+ </script>
16
+ </div>
17
+ <% end %>
@@ -0,0 +1,40 @@
1
+ module Sunrise
2
+ module Controllers
3
+ module HeadOptions
4
+ # Inclusion hook to make #current_user and #logged_in?
5
+ # available as ActionView helper methods.
6
+ def self.included(base)
7
+ base.send :helper_method, :head_options if base.respond_to? :helper_method
8
+ end
9
+
10
+ def head_options(record, options = {})
11
+ return if record.nil?
12
+
13
+ options = { :spliter => Sunrise.title_spliter, :append_title => true }.merge(options)
14
+
15
+ header = options[:header] || (record.respond_to?(:header) ? record.header : nil)
16
+
17
+ if header && header.has_info?
18
+ @page_keywords ||= header.read(:keywords)
19
+ @page_description ||= header.read(:description)
20
+ @page_title ||= header.read(:title)
21
+ end
22
+
23
+ @page_title ||= begin
24
+ view_title = if record.respond_to?(:title)
25
+ record.title
26
+ elsif record.respond_to(:name)
27
+ record.name
28
+ end
29
+
30
+ page_title = []
31
+ page_title << options[:title] if options.key?(:title)
32
+ page_title << view_title
33
+ page_title << I18n.t("page.title") if options[:append_title]
34
+
35
+ page_title.flatten.compact.uniq.join(options[:spliter])
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+ require 'sunrise/core_ext'
3
+
4
+ module Sunrise
5
+ autoload :SystemSettings, 'sunrise/system_settings'
6
+ autoload :ModelFilter, 'sunrise/model_filter'
7
+ autoload :Plugins, 'sunrise/plugins'
8
+ autoload :Plugin, 'sunrise/plugin'
9
+
10
+ module Models
11
+ autoload :RoleType, 'sunrise/models/role_type'
12
+ autoload :StructureType, 'sunrise/models/structure_type'
13
+ autoload :PositionType, 'sunrise/models/position_type'
14
+ autoload :Role, 'sunrise/models/role'
15
+ autoload :Header, 'sunrise/models/header'
16
+ end
17
+
18
+ module Controllers
19
+ autoload :HeadOptions, 'sunrise/controllers/head_options'
20
+ end
21
+
22
+ module Views
23
+ autoload :Helpers, 'sunrise/views/helpers'
24
+ autoload :FormBuilder, 'sunrise/views/form_builder'
25
+ end
26
+
27
+ module Utils
28
+ autoload :Header, 'sunrise/utils/header'
29
+ autoload :Mysql, 'sunrise/utils/mysql'
30
+ autoload :Settingslogic, 'sunrise/utils/settingslogic'
31
+ autoload :Transliteration, 'sunrise/utils/transliteration'
32
+ autoload :AccessibleAttributes, 'sunrise/utils/accessible_attributes'
33
+ autoload :I18nBackend, 'sunrise/utils/i18n_backend'
34
+
35
+ IMAGE_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/jpg', 'image/pjpeg', 'image/tiff', 'image/x-png']
36
+
37
+ def self.parameterize_filename(filename)
38
+ extension = File.extname(filename)
39
+ basename = filename.gsub(/#{extension}$/, "")
40
+
41
+ [basename.parameterize('_'), extension].join.downcase
42
+ end
43
+ end
44
+
45
+ # Custom flash_keys
46
+ mattr_accessor :flash_keys
47
+ @@flash_keys = [ :success, :failure ]
48
+
49
+ mattr_accessor :available_locales
50
+ @@available_locales = []
51
+
52
+ mattr_accessor :title_spliter
53
+ @@title_spliter = ' – '
54
+
55
+ mattr_accessor :field_error_proc
56
+ @@field_error_proc = Proc.new do |html_tag, instance|
57
+ if html_tag =~ /<(input|textarea|select)/
58
+ errors = instance.error_message.kind_of?(Array) ? instance.error_message : [instance.error_message]
59
+ errors.collect! { |error| "<li>#{error}</li>" }
60
+ message = "<ul class='error_box error_box_narrow'>#{errors.join}</ul>".html_safe
61
+ html_tag += message
62
+ end
63
+
64
+ if html_tag =~ /<label/
65
+ html_tag
66
+ else
67
+ "<div class=\"field_with_errors\">#{html_tag}</div>".html_safe
68
+ end
69
+ end
70
+
71
+ # Default way to setup Devise. Run rails generate devise_install to create
72
+ # a fresh initializer with all configuration values.
73
+ def self.setup
74
+ yield self
75
+ end
76
+ end
77
+
78
+ require 'sunrise/version'
79
+ require 'sunrise/core_plugins'
80
+ require 'sunrise/engine'
@@ -0,0 +1,22 @@
1
+ require 'enumerator'
2
+
3
+ class Array
4
+ def chunk(pieces)
5
+ q, r = length.divmod(pieces)
6
+ (0..pieces).map { |i| i * q + [r, i].min }.enum_cons(2) \
7
+ .map { |a, b| slice(a...b) }
8
+ end
9
+
10
+ def shuffle
11
+ sort_by { rand }
12
+ end
13
+
14
+ def shuffle!
15
+ self.replace shuffle
16
+ end
17
+
18
+ def random
19
+ idx = Kernel.rand(size)
20
+ at(idx)
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ require 'ostruct'
2
+
3
+ module I18n
4
+ def self.name_for_locale(locale)
5
+ begin
6
+ I18n.backend.translate(locale, :name, :scope => [:language])
7
+ rescue I18n::MissingTranslationData
8
+ locale.to_s
9
+ end
10
+ end
11
+
12
+ def self.all_available_locales
13
+ records = []
14
+
15
+ available_locales.each do |locale|
16
+ records << OpenStruct.new(:code => locale.to_s.downcase, :title => name_for_locale(locale))
17
+ end
18
+
19
+ records.sort_by(&:title)
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ class String
2
+ def is_int?
3
+ self =~ /^[-+]?[0-9]*$/
4
+ end
5
+
6
+ def no_html
7
+ str = self.dup
8
+ str.gsub!(/<\/?[^>]*>/, '')
9
+ str.strip!
10
+ str.gsub!('&nbsp;', '')
11
+ str
12
+ end
13
+
14
+ def words_count
15
+ frequencies = Hash.new(0)
16
+ downcase.scan(/(\w+([-'.]\w+)*)/) { |word, ignore| frequencies[word] += 1 }
17
+ return frequencies
18
+ end
19
+
20
+ def parameterize(sep = '-')
21
+ value = Sunrise::Utils::Transliteration.transliterate(self)
22
+ ActiveSupport::Inflector.parameterize(value, sep)
23
+ end
24
+
25
+ def self.randomize(length = 8)
26
+ Array.new(length) { (rand(122-97) + 97).chr }.join
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/core_ext/*.rb"].sort.each do |path|
2
+ require "sunrise/core_ext/#{File.basename(path, '.rb')}"
3
+ end
@@ -0,0 +1,32 @@
1
+ # Structure tree
2
+ Sunrise::Plugin.register :structures do |plugin|
3
+ plugin.model = 'sunrise/models/structure'
4
+ plugin.menu = 'main'
5
+ end
6
+
7
+ # Users
8
+ Sunrise::Plugin.register :users do |plugin|
9
+ plugin.model = 'sunrise/models/user'
10
+ plugin.menu = 'main'
11
+ end
12
+
13
+ # System settings
14
+ Sunrise::Plugin.register :settings do |plugin|
15
+ plugin.model = false
16
+ plugin.menu = 'main'
17
+ plugin.klass_name = 'Sunrise::SystemSettings'
18
+ end
19
+
20
+ # Static pages
21
+ Sunrise::Plugin.register :pages do |plugin|
22
+ plugin.model = 'sunrise/models/page'
23
+ plugin.menu = false
24
+ end
25
+
26
+ # Assets
27
+ Sunrise::Plugin.register :assets do |plugin|
28
+ plugin.model = 'sunrise/models/asset'
29
+ plugin.menu = false
30
+ end
31
+
32
+ [:structures, :users, :settings, :pages, :assets].each { |plugin_name| Sunrise::Plugins.activate(plugin_name) }
@@ -0,0 +1,45 @@
1
+ require 'rails'
2
+ require 'sunrise-core'
3
+
4
+ module Sunrise
5
+ class Engine < ::Rails::Engine
6
+ config.before_initialize do
7
+ ActiveSupport::XmlMini.backend = 'Nokogiri'
8
+ InheritedResources.flash_keys = Sunrise.flash_keys
9
+
10
+ config.i18n.load_path += Dir[File.join(File.dirname(__FILE__), "../../config", 'locales', '**', '*.{rb,yml}').to_s]
11
+
12
+ I18n.backend = Sunrise::Utils::I18nBackend.new
13
+
14
+ ActiveSupport.on_load :active_record do
15
+ ActiveRecord::Base.send :include, Sunrise::Utils::Mysql
16
+ ActiveRecord::Base.send :include, Sunrise::Utils::AccessibleAttributes
17
+ end
18
+
19
+ ActiveSupport.on_load :action_controller do
20
+ ActionController::Base.send :include, Sunrise::Controllers::HeadOptions
21
+ end
22
+
23
+ ActiveSupport.on_load :action_view do
24
+ ActionView::Base.send :include, Sunrise::Views::Helpers
25
+ end
26
+ end
27
+
28
+ # Wrap errors in ul->li list and skip labels.
29
+ config.to_prepare do
30
+ ActionView::Base.field_error_proc = Sunrise.field_error_proc
31
+ end
32
+
33
+ config.after_initialize do
34
+ Paperclip.interpolates('basename') do |attachment, style|
35
+ filename = attachment.original_filename.gsub(/#{File.extname(attachment.original_filename)}$/, "")
36
+ Sunrise::Utils.parameterize_filename( filename )
37
+ end
38
+ end
39
+
40
+ # For railties migrations rake
41
+ def railtie_name
42
+ 'sunrise'
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,158 @@
1
+ # encoding: utf-8
2
+ module Sunrise
3
+ class ModelFilter
4
+ attr_accessor :klass
5
+
6
+ attr_accessor :attributes, :columns
7
+
8
+ attr_accessor :order_by, :order_column, :order_type
9
+
10
+ attr_accessor :conditions
11
+
12
+ def initialize(klass, options={})
13
+ options.symbolize_keys!
14
+
15
+ @klass = klass
16
+
17
+ @columns = options[:columns]
18
+ @columns ||= klass.respond_to?(:column_names) ? @klass.column_names : []
19
+
20
+ @attributes = options[:attributes] || {}
21
+ @raw_values = {}
22
+ end
23
+
24
+ def filter(options = {})
25
+ order = options.delete(:order)
26
+ where = options.delete(:conditions)
27
+
28
+ {
29
+ :order => (self.order_by || order || "id DESC"),
30
+ :conditions => (self.conditions || where)
31
+ }.merge(options)
32
+ end
33
+
34
+ def scoped
35
+ query = @klass.scoped
36
+ query = query.order(order_by) unless order_by.blank?
37
+ query = query.where(conditions) if conditions && !conditions.empty?
38
+ query
39
+ end
40
+
41
+ def next_order_type
42
+ return if @order_type.blank?
43
+
44
+ @order_type == 'desc' ? 'asc' : 'desc'
45
+ end
46
+
47
+ def update_attributes(params = {})
48
+ return if params.nil? || params.keys.empty?
49
+
50
+ options = params.symbolize_keys
51
+
52
+ @raw_values = extract_values(options)
53
+ @conditions = extract_conditions(options)
54
+ @order_by = extract_order(options)
55
+ end
56
+
57
+ def method_missing(method, *args, &block)
58
+ match_data = method.to_s.match(/^(.+)_before_type_cast$/)
59
+ method_name = (match_data ? match_data[1] : method).to_sym
60
+
61
+ if @attributes.include?(method_name)
62
+ @raw_values[method_name]
63
+ else
64
+ super
65
+ end
66
+ end
67
+
68
+ def respond_to?(method_name)
69
+ return true if @attributes.include?(method_name.to_sym)
70
+ super
71
+ end
72
+
73
+ private
74
+
75
+ def normalize_value(attribute, value)
76
+ column = @klass.columns_hash[attribute.to_s]
77
+
78
+ case column.type
79
+ when :string then value.to_s
80
+ when :integer then value.to_s.blank? ? nil : value.to_i
81
+ when :float then value.to_s.blank? ? nil : value.to_f
82
+ else value
83
+ end
84
+ end
85
+
86
+ def extract_order(options={})
87
+ options.symbolize_keys!
88
+
89
+ ocolumn = options.delete(:order_column)
90
+ otype = options.delete(:order_type)
91
+
92
+ unless ocolumn.blank?
93
+ @order_column = ocolumn.to_s.strip.downcase.to_s
94
+ @order_column = nil unless @columns.include?(@order_column)
95
+ end
96
+
97
+ unless @order_column.blank?
98
+ @order_type = otype.to_s.strip.downcase unless otype.blank?
99
+ @order_type = nil unless ['desc', 'asc'].include?(@order_type)
100
+ @order_type ||= 'desc'
101
+
102
+ real_column = @order_column.to_s
103
+
104
+ if @klass.respond_to?(:translated_columns) && @klass.translated_columns.include?(real_column)
105
+ locale = (I18n.locale.to_s == 'uk' ? 'ua' : 'ru')
106
+ real_column = "#{@order_column}_#{locale}"
107
+ end
108
+
109
+ "#{@klass.quoted_table_name}.#{real_column} #{@order_type}"
110
+ end
111
+ end
112
+
113
+ def extract_values(options={})
114
+ values = {}
115
+
116
+ options.each do |k, v|
117
+ key = k.to_sym
118
+ values[key] = normalize_value(k, v) if @attributes.include?(key)
119
+ end
120
+
121
+ values
122
+ end
123
+
124
+ def extract_conditions(options={})
125
+ c_names = []
126
+ c_values = []
127
+
128
+ @raw_values.each do |k, v|
129
+ next if v.blank?
130
+
131
+ arr = extract_method(k, v)
132
+
133
+ c_names << arr.first
134
+ c_values << arr.last
135
+ end
136
+
137
+ [c_names.join(' AND ')] + c_values
138
+ end
139
+
140
+ def extract_method(attribute, value)
141
+ column = @klass.columns_hash[attribute.to_s]
142
+
143
+ case column.type
144
+ when :string, :text then
145
+ x = "#{@klass.quoted_table_name}.#{attribute} LIKE ?"
146
+ y = value.nil? ? nil : "#{value}%"
147
+ when :boolean then
148
+ x = "#{@klass.quoted_table_name}.#{attribute} = ?"
149
+ y = (value && value.to_i == 1) ? 1 : 0
150
+ when :integer, :float then
151
+ x = "#{@klass.quoted_table_name}.#{attribute} = ?"
152
+ y = value.nil? ? nil : value.to_i
153
+ end
154
+
155
+ [x, y]
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,102 @@
1
+ # encoding: utf-8
2
+ require 'mime/types'
3
+
4
+ module Sunrise
5
+ module Models
6
+ module Asset
7
+ def self.included(base)
8
+ base.send :include, InstanceMethods
9
+ base.send :extend, ClassMethods
10
+ end
11
+
12
+ module ClassMethods
13
+ def self.extended(base)
14
+ base.class_eval do
15
+ belongs_to :user
16
+ belongs_to :assetable, :polymorphic => true
17
+
18
+ before_validation :make_content_type
19
+ before_create :read_dimensions
20
+
21
+ delegate :url, :original_filename, :content_type, :size, :path, :styles, :to => :data
22
+ alias :filename :original_filename
23
+ end
24
+ end
25
+
26
+ def move_to(index, id)
27
+ update_all(["sort_order = ?", index], ["id = ?", id.to_i])
28
+ end
29
+ end
30
+
31
+ module InstanceMethods
32
+
33
+ def thumb_url
34
+ url(:thumb)
35
+ end
36
+
37
+ def format_created_at
38
+ I18n.l(created_at, :format => "%d.%m.%Y %H:%M")
39
+ end
40
+
41
+ def to_xml(options = {}, &block)
42
+ options = {:only => [:id], :root => 'asset'}.merge(options)
43
+
44
+ options[:procs] ||= Proc.new do |options, record|
45
+ options[:builder].tag!('filename', filename)
46
+ options[:builder].tag!('path', url)
47
+ options[:builder].tag!('size', size)
48
+
49
+ unless styles.empty?
50
+ options[:builder].tag!('styles') do |xml|
51
+ styles.each do |style|
52
+ xml.tag!(style.first, url(style.first))
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ super
59
+ end
60
+
61
+ def as_json(options = nil)
62
+ options = {
63
+ :only => [:id, :guid, :assetable_id, :assetable_type, :user_id],
64
+ :root => 'asset',
65
+ :methods => [:filename, :url, :size, :content_type, :thumb_url]
66
+ }.merge(options || {})
67
+
68
+ super
69
+ end
70
+
71
+ def has_dimensions?
72
+ respond_to?(:width) && respond_to?(:height)
73
+ end
74
+
75
+ def image?
76
+ Sunrise::Utils::IMAGE_TYPES.include?(content_type)
77
+ end
78
+
79
+ def geometry
80
+ @geometry ||= Paperclip::Geometry.from_file(data.to_file)
81
+ @geometry
82
+ end
83
+
84
+ protected
85
+
86
+ def read_dimensions
87
+ if image? && has_dimensions?
88
+ self.width = geometry.width
89
+ self.height = geometry.height
90
+ end
91
+ end
92
+
93
+ def make_content_type
94
+ if data_content_type.blank? || data_content_type == "application/octet-stream"
95
+ content_types = MIME::Types.type_for(filename)
96
+ self.data_content_type = content_types.first.to_s unless content_types.empty?
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ module Sunrise
3
+ module Models
4
+ module Header
5
+ def self.included(base)
6
+ base.send :include, InstanceMethods
7
+ base.send :extend, ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def self.extended(base)
12
+ base.class_eval do
13
+ belongs_to :headerable, :polymorphic => true
14
+ end
15
+ end
16
+ end
17
+
18
+ module InstanceMethods
19
+ def empty?
20
+ [keywords, description, title].map(&:blank?).all?
21
+ end
22
+
23
+ def has_info?
24
+ !empty?
25
+ end
26
+
27
+ def read(key)
28
+ value = read_attribute(key)
29
+ value.blank? ? nil : value
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ module Sunrise
3
+ module Models
4
+ module Page
5
+ def self.included(base)
6
+ base.send :include, InstanceMethods
7
+ base.send :extend, ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def self.extended(base)
12
+ base.class_eval do
13
+ belongs_to :structure
14
+ validates_presence_of :title, :content
15
+ end
16
+ end
17
+ end
18
+
19
+ module InstanceMethods
20
+ def content_without_html
21
+ return nil if self.content.blank?
22
+ self.content.no_html
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+ module Sunrise
3
+ module Models
4
+ class PositionType
5
+ def initialize(code)
6
+ @code = code.to_sym
7
+ end
8
+ attr_reader :code
9
+
10
+ def title
11
+ I18n.t(@code, :scope => [:manage, :structure, :position])
12
+ end
13
+ end
14
+ end
15
+ end