PageRenderTime 51ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/application/modules/page/models/dao/mysql/Page.php

https://github.com/bblc/tomatocms208v1
PHP | 297 lines | 236 code | 27 blank | 34 comment | 15 complexity | 94a27305f36e90bc0bfeecb19c50653d MD5 | raw file
  1. <?php
  2. /**
  3. * TomatoCMS
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the GNU GENERAL PUBLIC LICENSE Version 2
  8. * that is bundled with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://www.gnu.org/licenses/gpl-2.0.txt
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@tomatocms.com so we can send you a copy immediately.
  14. *
  15. * @copyright Copyright (c) 2009-2010 TIG Corporation (http://www.tig.vn)
  16. * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU GENERAL PUBLIC LICENSE Version 2
  17. * @version $Id: Page.php 4891 2010-08-24 20:06:55Z huuphuoc $
  18. * @since 2.0.5
  19. */
  20. class Page_Models_Dao_Mysql_Page extends Tomato_Model_Dao
  21. implements Page_Models_Interface_Page
  22. {
  23. public function convert($entity)
  24. {
  25. return new Page_Models_Page($entity);
  26. }
  27. public function getById($id)
  28. {
  29. $sql = sprintf("SELECT * FROM " . $this->_prefix . "page
  30. WHERE page_id = '%s'
  31. LIMIT 1",
  32. mysql_real_escape_string($id));
  33. $rs = mysql_query($sql);
  34. $return = (0 == mysql_num_rows($rs)) ? null : new Page_Models_Page(mysql_fetch_object($rs));
  35. mysql_free_result($rs);
  36. return $return;
  37. }
  38. public function add($page)
  39. {
  40. /**
  41. * Calculate the right Id
  42. */
  43. $parentId = $page->parent_id;
  44. if ($parentId) {
  45. $sql = 'SELECT right_id FROM ' . $this->_prefix . 'page WHERE page_id = ' . mysql_real_escape_string($parentId);
  46. } else {
  47. $sql = 'SELECT MAX(right_id) AS right_id FROM ' . $this->_prefix . 'page';
  48. }
  49. $rs = mysql_query($sql);
  50. $right = (0 == mysql_num_rows($rs)) ? null : new Page_Models_Page(mysql_fetch_object($rs));
  51. $rightId = ($parentId) ? $right->right_id : $right->right_id + 1;
  52. if ($rightId != null) {
  53. $sql = 'UPDATE ' . $this->_prefix . 'page
  54. SET left_id = IF(left_id > ' . mysql_real_escape_string($rightId) . ', left_id + 2, left_id),
  55. right_id = IF(right_id >= ' . mysql_real_escape_string($rightId) . ', right_id + 2, right_id)';
  56. mysql_query($sql);
  57. if (isset($page->page_id) && $page->page_id != null) {
  58. $sql = sprintf("INSERT INTO " . $this->_prefix . "page (page_id, name, slug, description, content, created_date,
  59. num_views, user_id, left_id, right_id, parent_id, language)
  60. VALUES ('%s', '%s', '%s', '%s', '%s', '%s',
  61. '%s', '%s', '%s', '%s', '%s', '%s')",
  62. mysql_real_escape_string($page->page_id),
  63. mysql_real_escape_string($page->name),
  64. mysql_real_escape_string($page->slug),
  65. mysql_real_escape_string($page->description),
  66. mysql_real_escape_string($page->content),
  67. mysql_real_escape_string($page->created_date),
  68. mysql_real_escape_string($page->num_views),
  69. mysql_real_escape_string($page->user_id),
  70. $rightId,
  71. $rightId + 1,
  72. mysql_real_escape_string($page->parent_id),
  73. /**
  74. * @since 2.0.8
  75. */
  76. mysql_real_escape_string($page->language));
  77. mysql_query($sql);
  78. return $page->page_id;
  79. } else {
  80. $sql = sprintf("INSERT INTO " . $this->_prefix . "page (name, slug, description, content, created_date,
  81. num_views, user_id, left_id, right_id, parent_id, language)
  82. VALUES ('%s', '%s', '%s', '%s', '%s',
  83. '%s', '%s', '%s', '%s', '%s', '%s')",
  84. mysql_real_escape_string($page->name),
  85. mysql_real_escape_string($page->slug),
  86. mysql_real_escape_string($page->description),
  87. mysql_real_escape_string($page->content),
  88. mysql_real_escape_string($page->created_date),
  89. mysql_real_escape_string($page->num_views),
  90. mysql_real_escape_string($page->user_id),
  91. $rightId,
  92. $rightId + 1,
  93. mysql_real_escape_string($page->parent_id),
  94. /**
  95. * @since 2.0.8
  96. */
  97. mysql_real_escape_string($page->language));
  98. mysql_query($sql);
  99. return mysql_insert_id();
  100. }
  101. }
  102. }
  103. public function update($page)
  104. {
  105. $sql = sprintf("UPDATE " . $this->_prefix . "page
  106. SET name = '%s', slug = '%s', description = '%s', content = '%s', modified_date = '%s', language = '%s'
  107. WHERE page_id = '%s'",
  108. mysql_real_escape_string($page->name),
  109. mysql_real_escape_string($page->slug),
  110. mysql_real_escape_string($page->description),
  111. mysql_real_escape_string($page->content),
  112. mysql_real_escape_string($page->modified_date),
  113. /**
  114. * @since 2.0.8
  115. */
  116. mysql_real_escape_string($page->language),
  117. mysql_real_escape_string($page->page_id));
  118. mysql_query($sql);
  119. }
  120. public function updateOrder($page)
  121. {
  122. $sql = sprintf("UPDATE " . $this->_prefix . "page
  123. SET parent_id = '%s', left_id = '%s', right_id = '%s'
  124. WHERE page_id = '%s'",
  125. mysql_real_escape_string($page->parent_id),
  126. mysql_real_escape_string($page->left_id),
  127. mysql_real_escape_string($page->right_id),
  128. mysql_real_escape_string($page->page_id));
  129. mysql_query($sql);
  130. }
  131. public function delete($page)
  132. {
  133. $sql = sprintf("DELETE FROM " . $this->_prefix . "page
  134. WHERE page_id = '%s'",
  135. mysql_real_escape_string($page->page_id));
  136. mysql_query($sql);
  137. $sql = sprintf("UPDATE " . $this->_prefix . "page
  138. SET left_id = left_id - 1, right_id = right_id - 1
  139. WHERE left_id BETWEEN '%s' AND '%s'",
  140. mysql_real_escape_string($page->left_id),
  141. mysql_real_escape_string($page->right_id));
  142. mysql_query($sql);
  143. $sql = sprintf("UPDATE " . $this->_prefix . "page
  144. SET right_id = right_id - 2
  145. WHERE right_id > '%s'",
  146. mysql_real_escape_string($page->right_id));
  147. mysql_query($sql);
  148. $sql = sprintf("UPDATE " . $this->_prefix . "page
  149. SET left_id = left_id - 2
  150. WHERE left_id > '%s'",
  151. mysql_real_escape_string($page->right_id));
  152. mysql_query($sql);
  153. }
  154. public function getTree()
  155. {
  156. $sql = sprintf("SELECT node.page_id, node.name, node.slug, (COUNT(parent.name) - 1) AS depth,
  157. node.left_id, node.right_id, node.parent_id
  158. FROM " . $this->_prefix . "page AS node,
  159. " . $this->_prefix . "page AS parent
  160. WHERE node.left_id BETWEEN parent.left_id AND parent.right_id
  161. AND node.language = '%s'
  162. AND parent.language = '%s'
  163. GROUP BY node.page_id
  164. ORDER BY node.left_id",
  165. /**
  166. * @since 2.0.8
  167. */
  168. mysql_real_escape_string($this->_lang),
  169. mysql_real_escape_string($this->_lang));
  170. $rs = mysql_query($sql);
  171. $rows = array();
  172. while ($row = mysql_fetch_object($rs)) {
  173. $rows[] = $row;
  174. }
  175. mysql_free_result($rs);
  176. return new Tomato_Model_RecordSet($rows, $this);
  177. }
  178. public function getParents($pageId)
  179. {
  180. $sql = sprintf("SELECT parent.*
  181. FROM " . $this->_prefix . "page AS node, " . $this->_prefix . "page AS parent
  182. WHERE node.left_id BETWEEN parent.left_id AND parent.right_id
  183. AND node.page_id = '%s'
  184. ORDER BY parent.left_id",
  185. mysql_real_escape_string($pageId));
  186. $rs = mysql_query($sql);
  187. $rows = array();
  188. while ($row = mysql_fetch_object($rs)) {
  189. $rows[] = $row;
  190. }
  191. mysql_free_result($rs);
  192. return new Tomato_Model_RecordSet($rows, $this);
  193. }
  194. /* ========== For translation =========================================== */
  195. public function getTranslations($item)
  196. {
  197. $sql = sprintf('SELECT p.* FROM ' . $this->_prefix . 'page AS p
  198. INNER JOIN
  199. (
  200. SELECT tr1.* FROM ' . $this->_prefix . 'core_translation AS tr1
  201. INNER JOIN ' . $this->_prefix . 'core_translation AS tr2
  202. ON (tr1.item_id = "%s" AND tr1.source_item_id = tr2.item_id)
  203. OR (tr2.item_id = "%s" AND tr1.item_id = tr2.source_item_id)
  204. OR (tr1.source_item_id = "%s" AND tr1.source_item_id = tr2.source_item_id)
  205. WHERE tr1.item_class = "%s" AND tr2.item_class = "%s"
  206. GROUP by tr1.translation_id
  207. ) AS tr
  208. ON tr.item_id = p.page_id',
  209. mysql_real_escape_string($item->page_id),
  210. mysql_real_escape_string($item->page_id),
  211. mysql_real_escape_string($item->page_id),
  212. 'Page_Models_Page',
  213. 'Page_Models_Page');
  214. $rs = mysql_query($sql);
  215. $rows = array();
  216. while ($row = mysql_fetch_object($rs)) {
  217. $rows[] = $row;
  218. }
  219. mysql_free_result($rs);
  220. return new Tomato_Model_RecordSet($rows, $this);
  221. }
  222. public function getTranslatable($lang)
  223. {
  224. $sql = sprintf('SELECT p.*, (tr.item_id IS NULL) AS translatable
  225. FROM
  226. (
  227. SELECT node.page_id, node.name, node.slug, (COUNT(parent.name) - 1) AS depth,
  228. node.left_id, node.right_id, node.parent_id
  229. FROM ' . $this->_prefix . 'page AS node,
  230. ' . $this->_prefix . 'page AS parent
  231. WHERE node.left_id BETWEEN parent.left_id AND parent.right_id
  232. AND node.language = "%s"
  233. AND parent.language = "%s"
  234. GROUP BY node.page_id
  235. ORDER BY node.left_id
  236. ) AS p
  237. LEFT JOIN ' . $this->_prefix . 'core_translation AS tr
  238. ON tr.source_item_id = p.page_id
  239. AND tr.item_class = "%s"
  240. AND tr.source_language = "%s"
  241. AND tr.language = "%s"',
  242. mysql_real_escape_string($this->_lang),
  243. mysql_real_escape_string($this->_lang),
  244. 'Page_Models_Page',
  245. mysql_real_escape_string($this->_lang),
  246. mysql_real_escape_string($lang));
  247. $rs = mysql_query($sql);
  248. $rows = array();
  249. while ($row = mysql_fetch_object($rs)) {
  250. $rows[] = $row;
  251. }
  252. mysql_free_result($rs);
  253. return new Tomato_Model_RecordSet($rows, $this);
  254. }
  255. public function getSource($page)
  256. {
  257. $sql = sprintf("SELECT p.*
  258. FROM " . $this->_prefix . "page AS p
  259. INNER JOIN " . $this->_prefix . "core_translation AS tr
  260. ON p.page_id = tr.source_item_id
  261. WHERE tr.item_id = '%s' AND tr.item_class = '%s'
  262. LIMIT 1",
  263. mysql_real_escape_string($page->page_id),
  264. 'Page_Models_Page');
  265. $rs = mysql_query($sql);
  266. $return = (0 == mysql_num_rows($rs)) ? null : new Page_Models_Page(mysql_fetch_object($rs));
  267. mysql_free_result($rs);
  268. return $return;
  269. }
  270. }