PageRenderTime 52ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/application/modules/power/models/DbTable/Abstract.php

https://github.com/b-b-a/bba-power
PHP | 228 lines | 124 code | 36 blank | 68 comment | 18 complexity | f6e04c1fbf614e8c5a4b023650f26989 MD5 | raw file
  1. <?php
  2. /**
  3. * Abstract.php
  4. *
  5. * Copyright (c) 2012 Shaun Freeman <shaun@shaunfreeman.co.uk>.
  6. *
  7. * This file is part of BBA Power.
  8. *
  9. * BBA Power is free software: you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License as published by
  11. * the Free Software Foundation, either version 3 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * BBA Power is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with BBA Power. If not, see <http://www.gnu.org/licenses/>.
  21. *
  22. * @category BBA
  23. * @package Power
  24. * @subpackage Model_DbTable
  25. * @copyright Copyright (c) 2011 Shaun Freeman. (http://www.shaunfreeman.co.uk)
  26. * @license http://www.gnu.org/licenses GNU General Public License
  27. * @author Shaun Freeman <shaun@shaunfreeman.co.uk>
  28. */
  29. /**
  30. * Abstract Model.
  31. *
  32. * @category BBA
  33. * @package Power
  34. * @subpackage Model_DbTable
  35. * @copyright Copyright (c) 2011 Shaun Freeman. (http://www.shaunfreeman.co.uk)
  36. * @license http://www.gnu.org/licenses GNU General Public License
  37. * @author Shaun Freeman <shaun@shaunfreeman.co.uk>
  38. */
  39. abstract class Power_Model_DbTable_Abstract extends Zend_Db_Table_Abstract
  40. {
  41. /**
  42. * @var string
  43. */
  44. protected $_rowPrefix = '';
  45. /**
  46. * @var array
  47. */
  48. protected $_nullAllowed = array();
  49. /**
  50. * @var Zend_Log
  51. */
  52. protected $_log;
  53. public function init()
  54. {
  55. $this->_log = Zend_Registry::get('dblog');
  56. $primary = (is_string($this->_primary)) ? $this->_primary : $this->_primary[0];
  57. $this->_rowPrefix = strstr($primary, '_', true);
  58. }
  59. public function getRowById($id)
  60. {
  61. $id = (int) $id;
  62. return $this->find($id)->current();
  63. }
  64. /**
  65. * Save a row to the database
  66. *
  67. * @param array $data The data to insert/update
  68. * @param Zend_DB_Table_Row $row Optional The row to use
  69. * @return mixed The primary key
  70. */
  71. public function saveRow($data, $row = null)
  72. {
  73. if (null === $row) {
  74. $row = $this->createRow();
  75. }
  76. $columns = $this->info('cols');
  77. foreach ($columns as $column) {
  78. if (array_key_exists($column, $data)) {
  79. $row->$column = $data[$column];
  80. }
  81. }
  82. return $row->save();
  83. }
  84. /**
  85. * Adds limit and offset to query.
  86. *
  87. * @param Zend_Db_Table_Select
  88. * @param int $count
  89. * @param int $offset
  90. * @return Zend_Db_Table_Select
  91. */
  92. public function getLimit(Zend_Db_Table_Select $select, $count, $offset)
  93. {
  94. if ($count === null) {
  95. return $select;
  96. }
  97. return $select->limit($count, $offset);
  98. }
  99. /**
  100. * Adds an order by to query.
  101. *
  102. * @param Zend_Db_Table_Select
  103. * @param string $sort
  104. * @return Zend_Db_Table_Select
  105. */
  106. public function getSortOrder(Zend_Db_Table_Select $select, $sort)
  107. {
  108. if ($sort === '' || null === $sort) {
  109. return $select;
  110. }
  111. if (strchr($sort,'-')) {
  112. $sort = substr($sort, 1, strlen($sort));
  113. $order = 'DESC';
  114. } else {
  115. $order = 'ASC';
  116. }
  117. return $select->order($sort . ' ' . $order);
  118. }
  119. protected function _getAccessClient($select, $table)
  120. {
  121. $auth = Zend_Auth::getInstance();
  122. $access = $auth->getIdentity()->getUser_accessClient(true);
  123. if ($access != '') {
  124. return $select->where($table . '_idClient IN (' . $access . ')');
  125. }
  126. return $select;
  127. }
  128. protected function _checkConstraints($data)
  129. {
  130. foreach ($data as $key => $value) {
  131. if (in_array($key, $this->_nullAllowed) && ('0' == $value || '' == $value)) {
  132. $data[$key] = null;
  133. }
  134. }
  135. return $data;
  136. }
  137. protected function _getTablesValue($name)
  138. {
  139. return new Zend_Db_Expr('(
  140. SELECT tables_value
  141. FROM tables
  142. WHERE tables_key = ' . $name . '
  143. AND tables_name = "' . $name . '"
  144. )');
  145. }
  146. public function paginate($resultSet, $page, $limit)
  147. {
  148. $adapter = new Zend_Paginator_Adapter_Iterator($resultSet);
  149. $paginator = new Zend_Paginator($adapter);
  150. $paginator->setItemCountPerPage($limit)
  151. ->setCurrentPageNumber($page);
  152. return $paginator;
  153. }
  154. public function insert(array $data)
  155. {
  156. $columns = $this->info('cols');
  157. if (in_array($this->_rowPrefix . '_dateCreate', $columns) && in_array($this->_rowPrefix . '_userCreate', $columns)) {
  158. $auth = Zend_Auth::getInstance()->getIdentity();
  159. $data[$this->_rowPrefix . '_dateCreate'] = new Zend_Db_Expr('CURDATE()');
  160. $data[$this->_rowPrefix . '_userCreate'] = $auth->getId();
  161. }
  162. $data = $this->_checkConstraints($data);
  163. $this->_log->info(Zend_Debug::dump($data, "\nINSERT: " . __CLASS__ . "\n", false));
  164. return parent::insert($data);
  165. }
  166. public function update(array $data, $where)
  167. {
  168. $columns = $this->info('cols');
  169. if (in_array($this->_rowPrefix . '_dateModify', $columns) && in_array($this->_rowPrefix . '_userModify', $columns)) {
  170. $auth = Zend_Auth::getInstance()->getIdentity();
  171. $data[$this->_rowPrefix . '_dateModify'] = new Zend_Db_Expr('CURDATE()');
  172. $data[$this->_rowPrefix . '_userModify'] = $auth->getId();
  173. }
  174. $data = $this->_checkConstraints($data);
  175. $this->_log->info(Zend_Debug::dump($data, "\nUPDATE: " . __CLASS__ . "\n", false));
  176. return parent::update($data, $where);
  177. }
  178. public function delete($where)
  179. {
  180. $this->_log->info(Zend_Debug::dump($where, "DELETE: " . __CLASS__, false));
  181. return parent::delete($where);
  182. }
  183. protected function _stripSpacesAndHyphens($subject)
  184. {
  185. $filter = new Zend_Filter_PregReplace(array(
  186. 'match' => '/\s+|-+/',
  187. 'replace' => ''
  188. )
  189. );
  190. return $filter->filter($subject);
  191. }
  192. }