repository.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\models;
  3. use MGModule\DNSManager2 as main;
  4. /**
  5. * Description of abstractModel
  6. *
  7. * @author Michal Czech <michael@modulesgarden.com>
  8. */
  9. abstract class repository {
  10. protected $_filters = array();
  11. protected $_limit = null;
  12. protected $_offest = 0;
  13. protected $_order = array();
  14. protected $_search = array();
  15. abstract function getModelClass();
  16. /** @return repository */
  17. static function factory() {
  18. $class = get_called_class();
  19. return new $class();
  20. }
  21. public function fieldDeclaration(){
  22. return forward_static_call(array($this->getModelClass(),'fieldDeclaration'));
  23. }
  24. public function tableName(){
  25. return forward_static_call(array($this->getModelClass(),'tableName'));
  26. }
  27. public function limit($limit)
  28. {
  29. $this->_limit = $limit;
  30. }
  31. public function offset($offset)
  32. {
  33. $this->_offest = $offset;
  34. }
  35. public function search($value, $columns = false) {
  36. if($columns === false) $columns = $this->fieldDeclaration();
  37. foreach($columns as $column) {
  38. $this->addSearch($column, $value);
  39. }
  40. }
  41. public function addSearch($column, $value) {
  42. $uid = $column.uniqid();
  43. $this->_search[] = array(
  44. 'or' => true,
  45. 'customQuery' => "`$column` LIKE :$uid ",
  46. 'params' => array(
  47. $uid => "%$value%",
  48. ),
  49. );
  50. }
  51. public function addAndSearch(array $columns,array $values)
  52. {
  53. foreach($columns as $key => $col)
  54. {
  55. $uid = $col.uniqid();
  56. $this->_search[] = array(
  57. 'or' => false,
  58. 'customQuery' => "`$col` LIKE :$uid ",
  59. 'params' => array(
  60. $uid => "%$values[$key]%",
  61. ),
  62. );
  63. }
  64. }
  65. public function setFiltersBeforeQuery()
  66. {
  67. if(empty($this->_search))
  68. {
  69. return;
  70. }
  71. $search = main\mgLibs\MySQL\query::parseConditions($this->_search, $values);
  72. $this->_filters[] = array(
  73. 'customQuery' => '( ' . $search . ' ) ',
  74. 'params' => $values,
  75. );
  76. }
  77. public function setFilter($filter, $value) {
  78. $this->_filters[$filter] = $value;
  79. return $this;
  80. }
  81. public function removeFilter($filter) {
  82. unset($this->_filters[$filter]);
  83. }
  84. public function removeFilters() {
  85. $this->_filters = array();
  86. }
  87. public function sortBy($field,$vect){
  88. $column = forward_static_call(array($this->getModelClass(),'getProperyColumn'),$field);
  89. $this->_order[$column] = $vect;
  90. }
  91. /**
  92. *
  93. * @return orm
  94. */
  95. function get(){
  96. $this->setFiltersBeforeQuery();
  97. $result = main\mgLibs\MySQL\query::select(
  98. self::fieldDeclaration()
  99. , self::tableName()
  100. , $this->_filters
  101. , $this->_order
  102. , $this->_limit
  103. , $this->_offest
  104. );
  105. $output = array();
  106. $class = $this->getModelClass();
  107. while($row = $result->fetch())
  108. {
  109. $output[] = new $class($row['id'],$row);
  110. }
  111. return $output;
  112. }
  113. function getGrouped(){
  114. $this->setFiltersBeforeQuery();
  115. $result = main\mgLibs\MySQL\query::select(
  116. self::fieldDeclaration()
  117. , self::tableName()
  118. , $this->_filters
  119. , $this->_order
  120. , $this->_limit
  121. , $this->_offest
  122. );
  123. return $result->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_UNIQUE|\PDO::FETCH_ASSOC);
  124. }
  125. function count(){
  126. $this->setFiltersBeforeQuery();
  127. $fields = $this->fieldDeclaration();
  128. $first = key($fields);
  129. if(is_numeric($first))
  130. {
  131. $first = $fields[$first];
  132. }
  133. return main\mgLibs\MySQL\query::count(
  134. $first
  135. , self::tableName()
  136. , $this->_filters
  137. , array()
  138. , $this->_limit
  139. , $this->_offest
  140. );
  141. }
  142. function delete(){
  143. $this->setFiltersBeforeQuery();
  144. return main\mgLibs\MySQL\query::delete(
  145. self::tableName()
  146. , $this->_filters
  147. );
  148. }
  149. function one() {
  150. $this->limit(1);
  151. $arr = $this->get();
  152. return empty($arr)?false:array_pop($arr);
  153. }
  154. }