| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?php
- namespace MGModule\DNSManager2\mgLibs\models;
- use MGModule\DNSManager2 as main;
- /**
- * Description of abstractModel
- *
- * @author Michal Czech <michael@modulesgarden.com>
- */
- abstract class repository {
- protected $_filters = array();
- protected $_limit = null;
- protected $_offest = 0;
- protected $_order = array();
- protected $_search = array();
-
- abstract function getModelClass();
-
- /** @return repository */
- static function factory() {
- $class = get_called_class();
- return new $class();
- }
-
- public function fieldDeclaration(){
- return forward_static_call(array($this->getModelClass(),'fieldDeclaration'));
- }
-
- public function tableName(){
- return forward_static_call(array($this->getModelClass(),'tableName'));
- }
-
- public function limit($limit)
- {
- $this->_limit = $limit;
- }
-
- public function offset($offset)
- {
- $this->_offest = $offset;
- }
-
- public function search($value, $columns = false) {
- if($columns === false) $columns = $this->fieldDeclaration();
- foreach($columns as $column) {
- $this->addSearch($column, $value);
- }
- }
-
- public function addSearch($column, $value) {
- $uid = $column.uniqid();
- $this->_search[] = array(
- 'or' => true,
- 'customQuery' => "`$column` LIKE :$uid ",
- 'params' => array(
- $uid => "%$value%",
- ),
- );
- }
-
- public function addAndSearch(array $columns,array $values)
- {
- foreach($columns as $key => $col)
- {
- $uid = $col.uniqid();
- $this->_search[] = array(
- 'or' => false,
- 'customQuery' => "`$col` LIKE :$uid ",
- 'params' => array(
- $uid => "%$values[$key]%",
- ),
- );
- }
- }
-
- public function setFiltersBeforeQuery()
- {
- if(empty($this->_search))
- {
- return;
- }
-
- $search = main\mgLibs\MySQL\query::parseConditions($this->_search, $values);
- $this->_filters[] = array(
- 'customQuery' => '( ' . $search . ' ) ',
- 'params' => $values,
- );
- }
-
- public function setFilter($filter, $value) {
- $this->_filters[$filter] = $value;
- return $this;
- }
-
- public function removeFilter($filter) {
- unset($this->_filters[$filter]);
- }
-
- public function removeFilters() {
- $this->_filters = array();
- }
-
- public function sortBy($field,$vect){
- $column = forward_static_call(array($this->getModelClass(),'getProperyColumn'),$field);
- $this->_order[$column] = $vect;
- }
-
- /**
- *
- * @return orm
- */
- function get(){
- $this->setFiltersBeforeQuery();
- $result = main\mgLibs\MySQL\query::select(
- self::fieldDeclaration()
- , self::tableName()
- , $this->_filters
- , $this->_order
- , $this->_limit
- , $this->_offest
- );
- $output = array();
-
- $class = $this->getModelClass();
- while($row = $result->fetch())
- {
- $output[] = new $class($row['id'],$row);
- }
-
- return $output;
- }
- function getGrouped(){
- $this->setFiltersBeforeQuery();
- $result = main\mgLibs\MySQL\query::select(
- self::fieldDeclaration()
- , self::tableName()
- , $this->_filters
- , $this->_order
- , $this->_limit
- , $this->_offest
- );
- return $result->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_UNIQUE|\PDO::FETCH_ASSOC);
- }
- function count(){
- $this->setFiltersBeforeQuery();
- $fields = $this->fieldDeclaration();
- $first = key($fields);
-
- if(is_numeric($first))
- {
- $first = $fields[$first];
- }
-
- return main\mgLibs\MySQL\query::count(
- $first
- , self::tableName()
- , $this->_filters
- , array()
- , $this->_limit
- , $this->_offest
- );
- }
-
- function delete(){
- $this->setFiltersBeforeQuery();
- return main\mgLibs\MySQL\query::delete(
- self::tableName()
- , $this->_filters
- );
- }
-
- function one() {
- $this->limit(1);
- $arr = $this->get();
- return empty($arr)?false:array_pop($arr);
- }
- }
|