PageRenderTime 58ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/models/cmspage.php

https://github.com/markwu/PongoCMS-Laravel-cms-bundle
PHP | 369 lines | 239 code | 110 blank | 20 comment | 8 complexity | 17cccba73011fc871bc4841bd5e4b3e9 MD5 | raw file
  1. <?php
  2. use \Eloquent;
  3. class CmsPage extends Eloquent {
  4. public static $table = 'pages';
  5. public static $timestamps = true;
  6. public function role()
  7. {
  8. return $this->belongs_to('CmsRole', 'role_id');
  9. }
  10. public function user()
  11. {
  12. return $this->belongs_to('CmsUser', 'author_id');
  13. }
  14. public function elements()
  15. {
  16. return $this->has_many_and_belongs_to('CmsElement', 'elements_pages')
  17. ->order_by('elements_pages.order_id', 'asc')
  18. ->order_by('zone', 'asc');
  19. }
  20. public function files()
  21. {
  22. return $this->has_many_and_belongs_to('CmsFile', 'files_pages');
  23. }
  24. public function menus()
  25. {
  26. return $this->has_many_and_belongs_to('CmsMenu', 'menus_pages')
  27. ->order_by('menus_pages.order_id', 'asc');
  28. }
  29. public function pagerels()
  30. {
  31. return $this->has_many_and_belongs_to('CmsPage', 'pages_pages', 'cmspagerel_id', 'cmspage_id')
  32. ->order_by('name', 'asc');
  33. }
  34. public function blogs()
  35. {
  36. return $this->has_many_and_belongs_to('CmsBlog', 'blogs_pages')
  37. ->order_by('blogs.created_at', 'asc');
  38. }
  39. //PREVIEW MARKER
  40. public function blogs_preview()
  41. {
  42. return $this->has_many_and_belongs_to('CmsBlog', 'blogs_pages')
  43. ->order_by('blogs.datetime_on', 'desc');
  44. }
  45. public function blogs_preview_past()
  46. {
  47. return $this->has_many_and_belongs_to('CmsBlog', 'blogs_pages')
  48. ->where('blogs.datetime_on', '<', dateTime2Db(date('Y-m-d H:i:s')))
  49. ->order_by('blogs.datetime_on', 'desc');
  50. }
  51. public function blogs_preview_future()
  52. {
  53. return $this->has_many_and_belongs_to('CmsBlog', 'blogs_pages')
  54. ->where('blogs.datetime_on', '>=', dateTime2Db(date('Y-m-d H:i:s')))
  55. ->order_by('blogs.datetime_on', 'asc');
  56. }
  57. //GETTERS
  58. public function get_updated_date()
  59. {
  60. return strftime('%d %b %Y - %H:%M', strtotime($this->get_attribute('updated_at')));
  61. }
  62. public function get_created_date()
  63. {
  64. return strftime('%d %b %Y - %H:%M', strtotime($this->get_attribute('created_at')));
  65. }
  66. public function get_sitemap_update()
  67. {
  68. return strftime('%Y-%m-%d', strtotime($this->get_attribute('updated_at')));
  69. }
  70. //PAGE SETTINGS POSITION DROPDOWN RECURSIVE
  71. private static function sub_slug($path_top_name, $path_top_id, $self_id = 0) {
  72. $slugs = array();
  73. $rs = self::where_parent_id($path_top_id)
  74. ->where('id', '<>', $self_id)
  75. ->order_by('order_id','asc')
  76. ->order_by('name','asc')
  77. ->get(array('id','parent_id','name'));
  78. foreach ($rs as $path) {
  79. $slugs[$path->id] = $path_top_name .' > '. $path->name;
  80. $second = call_user_func_array('self::sub_slug', array($path_top_name .' > '. $path->name, $path->id, $self_id));
  81. $slugs = ($slugs + $second);
  82. }
  83. return $slugs;
  84. }
  85. //PAGE SETTINGS POSITION DROPDOWN
  86. public static function select_top_slug($lang, $self = 0, $first = true)
  87. {
  88. if($first) {
  89. $slugs = array(0 => LL('cms::form.page_topcat', CMSLANG));
  90. } else {
  91. $slugs = array();
  92. }
  93. $rs = self::where_parent_id(0)
  94. ->where_lang($lang)
  95. ->where_is_home(0)
  96. ->where_is_valid(1)
  97. ->order_by('is_home', 'desc')
  98. ->order_by('order_id', 'asc')
  99. ->order_by('name', 'asc')
  100. ->get();
  101. foreach ($rs as $path) {
  102. $slugs[$path->id] = $path->name;
  103. $second = call_user_func_array('self::sub_slug', array($path->name, $path->id, $self));
  104. $slugs = ($slugs + $second);
  105. }
  106. if($self>0) {
  107. unset($slugs[$self]);
  108. }
  109. return $slugs;
  110. }
  111. //PAGE GENERAL POSITION DROPDOWN
  112. public static function select_page_slug($lang, $extra = 1, $self = 0, $first = true)
  113. {
  114. if($first) {
  115. $slugs = array(0 => LL('cms::form.page_select', CMSLANG));
  116. } else {
  117. $slugs = array();
  118. }
  119. $rs = self::where_parent_id(0)
  120. ->where('id', '<>', $self)
  121. ->where_lang($lang)
  122. ->where_is_home(0)
  123. ->where_extra_id($extra)
  124. ->where_is_valid(1)
  125. ->order_by('is_home', 'desc')
  126. ->order_by('order_id', 'asc')
  127. ->order_by('name', 'asc')
  128. ->get();
  129. foreach ($rs as $path) {
  130. $slugs[$path->id] = $path->name;
  131. $second = call_user_func_array('self::sub_slug', array($path->name, $path->id));
  132. $slugs = ($slugs + $second);
  133. }
  134. return $slugs;
  135. }
  136. //SELECT EXTRA_ID DROPDOWN
  137. public static function select_extra_id()
  138. {
  139. $extras = Config::get('cms::settings.extra_id');
  140. $ext = array();
  141. foreach ($extras as $key => $value) {
  142. $ext[$key] = ucfirst(LABEL('cms::label.', $value));
  143. }
  144. return $ext;
  145. }
  146. //SELECT LANG TRANSLATION
  147. public static function select_lang_translation()
  148. {
  149. $langs = Config::get('cms::settings.langs');
  150. $select = array('', LL('cms::form.page_select', CMSLANG));
  151. foreach ($langs as $key => $value) {
  152. if($key != Config::get('cms::settings.language')) $select[$key] = $value;
  153. }
  154. return $select;
  155. }
  156. //GET PAGE SLUG
  157. public static function get_page_slug($pid)
  158. {
  159. $page = self::find($pid);
  160. return $page->slug;
  161. }
  162. public static function update_child_slugs($page_id, $parent = '', $slug = '/')
  163. {
  164. if(!empty($page_id)) {
  165. //GET PAGE DATA
  166. $pages = self::where_parent_id($page_id)->get();
  167. foreach ($pages as $page) {
  168. $pag = self::find($page->id);
  169. $slg = $parent . '/' . $slug . '/' . Str::slug($page->name);
  170. $slg = str_replace('//', '/', $slg);
  171. $slg = str_replace('//', '/', $slg);
  172. $pag->slug = $slg;
  173. $pag->save();
  174. call_user_func_array('self::update_child_slugs', array($page->id, $slg));
  175. }
  176. }
  177. }
  178. public static function update_role_level($role_id, $role_level)
  179. {
  180. //GET PAGE
  181. self::where_role_id($role_id)->update(array('role_level' => $role_level));
  182. }
  183. //RECURSIVE SITEMAP
  184. public static function recursive_sitemap($parent_id)
  185. {
  186. //GET PAGE DATA
  187. $data = self::with(array('user','elements'))
  188. ->where_parent_id($parent_id)
  189. ->get();
  190. $new_data = array();
  191. foreach ($data as $obj) {
  192. $new_data[$obj->id] = $obj;
  193. $recursive = call_user_func_array('self::recursive_sitemap', array($obj->id));
  194. $new_data = ($new_data + $recursive);
  195. }
  196. return $new_data;
  197. }
  198. //RECURSIVE SITE SITEMAP
  199. public static function recursive_site_sitemap($parent_id)
  200. {
  201. //GET PAGE DATA
  202. $data = self::with(array('files' => function($query) {
  203. $query->where_is_image(1)->where_is_valid(1);
  204. }))
  205. ->where_parent_id($parent_id)
  206. ->get();
  207. $new_data = array();
  208. foreach ($data as $obj) {
  209. $new_data[$obj->id] = $obj;
  210. $recursive = call_user_func_array('self::recursive_site_sitemap', array($obj->id));
  211. $new_data = ($new_data + $recursive);
  212. }
  213. return $new_data;
  214. }
  215. //RECURSIVE FILE PAGES
  216. public static function recursive_filespages($parent_id)
  217. {
  218. //GET PAGE DATA
  219. $data = self::with(array('files'))
  220. ->where_parent_id($parent_id)
  221. ->get();
  222. $new_data = array();
  223. foreach ($data as $obj) {
  224. $new_data[$obj->id] = $obj;
  225. $recursive = call_user_func_array('self::recursive_filespages', array($obj->id));
  226. $new_data = ($new_data + $recursive);
  227. }
  228. return $new_data;
  229. }
  230. //RECURSIVE MENU PAGES
  231. public static function recursive_menuspages($parent_id)
  232. {
  233. //GET PAGE DATA
  234. $data = self::with(array('menus'))
  235. ->where_parent_id($parent_id)
  236. ->get();
  237. $new_data = array();
  238. foreach ($data as $obj) {
  239. $new_data[$obj->id] = $obj;
  240. $recursive = call_user_func_array('self::recursive_menuspages', array($obj->id));
  241. $new_data = ($new_data + $recursive);
  242. }
  243. return $new_data;
  244. }
  245. //RECURSIVE PAGES
  246. public static function recursive_pages($parent_id)
  247. {
  248. //GET PAGE DATA
  249. $data = self::where_parent_id($parent_id)
  250. ->get();
  251. $new_data = array();
  252. foreach ($data as $obj) {
  253. $new_data[$obj->id] = $obj;
  254. $recursive = call_user_func_array('self::recursive_pages', array($obj->id));
  255. $new_data = ($new_data + $recursive);
  256. }
  257. return $new_data;
  258. }
  259. }