PageRenderTime 26ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/system/expressionengine/modules/pages/tab.pages.php

https://gitlab.com/sops21/mt-rubidoux
PHP | 286 lines | 192 code | 47 blank | 47 comment | 30 complexity | 438458011210d2a5f1f2e645cab70477 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0, LGPL-2.1, MPL-2.0-no-copyleft-exception
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. /**
  3. * ExpressionEngine - by EllisLab
  4. *
  5. * @package ExpressionEngine
  6. * @author EllisLab Dev Team
  7. * @copyright Copyright (c) 2003 - 2015, EllisLab, Inc.
  8. * @license http://ellislab.com/expressionengine/user-guide/license.html
  9. * @link http://ellislab.com
  10. * @since Version 2.0
  11. * @filesource
  12. */
  13. // --------------------------------------------------------------------
  14. /**
  15. * ExpressionEngine Discussion Pages Module
  16. *
  17. * @package ExpressionEngine
  18. * @subpackage Modules
  19. * @category Modules
  20. * @author EllisLab Dev Team
  21. * @link http://ellislab.com
  22. */
  23. class Pages_tab {
  24. public function __construct()
  25. {
  26. $this->EE =& get_instance();
  27. }
  28. // --------------------------------------------------------------------
  29. public function publish_tabs($channel_id, $entry_id = '')
  30. {
  31. ee()->lang->loadfile('pages');
  32. $site_id = ee()->config->item('site_id');
  33. $settings = array();
  34. $no_templates = NULL;
  35. $pages = ee()->config->item('site_pages');
  36. $pages_template_id = 0;
  37. $pages_dropdown = array();
  38. $pages_uri = '';
  39. if ($entry_id !== 0)
  40. {
  41. if (isset($pages[$site_id]['uris'][$entry_id]))
  42. {
  43. $pages_uri = $pages[$site_id]['uris'][$entry_id];
  44. }
  45. if (isset($pages[$site_id]['templates'][$entry_id]))
  46. {
  47. $pages_template_id = $pages[$site_id]['templates'][$entry_id];
  48. }
  49. }
  50. else
  51. {
  52. $qry = ee()->db->select('configuration_value')
  53. ->where('configuration_name', 'template_channel_'.$channel_id)
  54. ->where('site_id', (int) $site_id)
  55. ->get('pages_configuration');
  56. if ($qry->num_rows() > 0)
  57. {
  58. $pages_template_id = (int) $qry->row('configuration_value');
  59. }
  60. }
  61. if ($pages_uri == '')
  62. {
  63. ee()->javascript->set_global('publish.pages.pagesUri', lang('example_uri'));
  64. $qry = ee()->db->select('configuration_value')
  65. ->where('configuration_name', 'template_channel_'.$channel_id)
  66. ->where('site_id', (int) $site_id)
  67. ->get('pages_configuration');
  68. if ($qry->num_rows() > 0)
  69. {
  70. $pages_template_id = (int) $qry->row('configuration_value');
  71. }
  72. }
  73. else
  74. {
  75. ee()->javascript->set_global('publish.pages.pageUri', $pages_uri);
  76. }
  77. ee()->load->model('template_model');
  78. $templates = ee()->template_model->get_templates($site_id);
  79. foreach ($templates->result() as $template)
  80. {
  81. $pages_dropdown[$template->group_name][$template->template_id] = $template->template_name;
  82. }
  83. if ($templates->num_rows() === 0)
  84. {
  85. $no_templates = lang('no_templates');
  86. }
  87. $settings = array(
  88. 'pages_uri' => array(
  89. 'field_id' => 'pages_uri',
  90. 'field_label' => lang('pages_uri'),
  91. 'field_type' => 'text',
  92. 'field_required' => 'n',
  93. 'field_data' => $pages_uri,
  94. 'field_text_direction' => 'ltr',
  95. 'field_maxl' => 100,
  96. 'field_instructions' => '',
  97. ),
  98. 'pages_template_id' => array(
  99. 'field_id' => 'pages_template_id',
  100. 'field_label' => lang('template'),
  101. 'field_type' => 'select',
  102. 'field_required' => 'n',
  103. 'field_pre_populate' => 'n',
  104. 'field_list_items' => $pages_dropdown,
  105. 'field_data' => $pages_template_id,
  106. 'options' => $pages_dropdown,
  107. 'selected' => $pages_template_id,
  108. 'field_text_direction' => 'ltr',
  109. 'field_maxl' => 100,
  110. 'field_instructions' => '',
  111. 'string_override' => $no_templates,
  112. ),
  113. );
  114. foreach ($settings as $k => $v)
  115. {
  116. ee()->api_channel_fields->set_settings($k, $v);
  117. }
  118. return $settings;
  119. }
  120. // --------------------------------------------------------------------
  121. /**
  122. * Validate Publish
  123. *
  124. * @param array
  125. * @return mixed
  126. */
  127. public function validate_publish($params)
  128. {
  129. $errors = FALSE;
  130. $pages_enabled = FALSE;
  131. $params = $params[0];
  132. $pages_uri = (isset($params['pages_uri'])) ? $params['pages_uri'] : '';
  133. $pages = ee()->config->item('site_pages');
  134. if ($pages !== FALSE && $pages_uri != '' && $pages_uri !== lang('example_uri'))
  135. {
  136. $pages = TRUE;
  137. if ( ! isset($params['pages_template_id']) OR
  138. ! is_numeric($params['pages_template_id']))
  139. {
  140. $errors = array(lang('invalid_template') => 'pages_template_id');
  141. }
  142. }
  143. $c_page_uri = preg_replace("#[^a-zA-Z0-9_\-/\.]+$#i", '',
  144. str_replace(ee()->config->item('site_url'), '', $pages_uri));
  145. if ($c_page_uri !== $pages_uri)
  146. {
  147. $errors = array(lang('invalid_page_uri') => 'pages_uri');
  148. }
  149. // How many segments are we trying out?
  150. $pages_uri_segs = substr_count(trim($pages_uri, '/'), '/');
  151. // More than 9 pages URI segs? goodbye
  152. if ($pages_uri_segs > 8)
  153. {
  154. $errors = array(lang('invalid_page_num_segs') => 'pages_uri');
  155. }
  156. // Check if duplicate uri
  157. $static_pages = ee()->config->item('site_pages');
  158. $uris = $static_pages[ee()->config->item('site_id')]['uris'];
  159. if ( ! isset($params['entry_id']))
  160. {
  161. $params['entry_id'] == 0;
  162. }
  163. elseif ($params['entry_id'] !== 0)
  164. {
  165. if ( ! isset($uris[$params['entry_id']]) && in_array($pages_uri, $uris))
  166. {
  167. $errors = array(lang('duplicate_page_uri') => 'pages_uri');
  168. }
  169. }
  170. elseif (in_array($pages_uri, $uris))
  171. {
  172. $errors = array(lang('duplicate_page_uri') => 'pages_uri');
  173. }
  174. return $errors;
  175. }
  176. // --------------------------------------------------------------------
  177. /**
  178. * Publish Data.
  179. *
  180. * @param array
  181. * @return void
  182. */
  183. public function publish_data_db($params)
  184. {
  185. $site_id = ee()->config->item('site_id');
  186. $mod_data = (isset($params['mod_data'])) ? $params['mod_data'] : NULL;
  187. $site_pages = ee()->config->item('site_pages');
  188. if ($site_pages !== FALSE
  189. && isset($mod_data['pages_uri'])
  190. && $mod_data['pages_uri'] != lang('example_uri')
  191. && $mod_data['pages_uri'] != '')
  192. {
  193. if (isset($mod_data['pages_template_id'])
  194. && is_numeric($mod_data['pages_template_id']))
  195. {
  196. $page = preg_replace("#[^a-zA-Z0-9_\-/\.]+$#i", '',
  197. str_replace(ee()->config->item('site_url'), '',
  198. $mod_data['pages_uri']));
  199. $page = '/' . trim($page, '/');
  200. $site_pages[$site_id]['uris'][$params['entry_id']] = $page;
  201. $site_pages[$site_id]['templates'][$params['entry_id']] = preg_replace("#[^0-9]+$#i", '',
  202. $mod_data['pages_template_id']);
  203. if ($site_pages[$site_id]['uris'][$params['entry_id']] == '//')
  204. {
  205. $site_pages[$site_id]['uris'][$params['entry_id']] = '/';
  206. }
  207. ee()->config->set_item('site_pages', $site_pages);
  208. ee()->db->where('site_id', (int) $site_id)
  209. ->update('sites', array(
  210. 'site_pages' => base64_encode(serialize($site_pages))
  211. )
  212. );
  213. }
  214. }
  215. }
  216. // --------------------------------------------------------------------
  217. /**
  218. * Delete Actions
  219. *
  220. * @param array
  221. * @return void
  222. */
  223. public function publish_data_delete_db($params)
  224. {
  225. $site_pages = ee()->config->item('site_pages');
  226. $site_id = ee()->config->item('site_id');
  227. foreach ($params['entry_ids'] as $entry_id)
  228. {
  229. unset($site_pages[$site_id]['uris'][$entry_id]);
  230. unset($site_pages[$site_id]['templates'][$entry_id]);
  231. }
  232. ee()->db->where('site_id', (int) $site_id)
  233. ->update('sites', array(
  234. 'site_pages' =>
  235. base64_encode(serialize($site_pages))
  236. ));
  237. }
  238. // --------------------------------------------------------------------
  239. }