<?php
abstract class modelWcu extends baseObjectWcu {
protected $_data = array();
protected $_code = '';
protected $_orderBy = '';
protected $_sortOrder = '';
protected $_groupBy = '';
protected $_limit = '';
protected $_where = array();
protected $_stringWhere = '';
protected $_selectFields = '*';
protected $_tbl = '';
protected $_lastGetCount = 0;
protected $_idField = 'id';
/*public function init() {
}
public function get($d = array()) {
}
public function put($d = array()) {
}
public function post($d = array()) {
}
public function delete($d = array()) {
}
public function store($d = array()) {
}*/
public function setCode($code) {
$this->_code = $code;
}
public function getCode() {
return $this->_code;
}
public function getModule() {
return frameWcu::_()->getModule( $this->_code );
}
protected function _setTbl($tbl) {
$this->_tbl = $tbl;
}
public function setOrderBy($orderBy) {
$this->_orderBy = $orderBy;
return $this;
}
/**
* ASC, DESC
*/
public function setSortOrder($sortOrder) {
$this->_sortOrder = $sortOrder;
return $this;
}
public function setLimit($limit) {
$this->_limit = $limit;
return $this;
}
public function setWhere($where) {
$this->_where = $where;
return $this;
}
public function addWhere($where) {
if(empty($this->_where) && !is_string($where)) {
$this->setWhere( $where );
} elseif(is_array($this->_where) && is_array($where)) {
$this->_where = array_merge($this->_where, $where);
} elseif(is_string($where)) {
if(!isset($this->_where['additionalCondition']))
$this->_where['additionalCondition'] = '';
if(!empty($this->_where['additionalCondition']))
$this->_where['additionalCondition'] .= ' AND ';
$this->_where['additionalCondition'] .= $where;
//$this->_stringWhere .= $where; // Unused for now
}
return $this;
}
public function setSelectFields($selectFields) {
if(is_array($selectFields))
$selectFields = implode(',', $selectFields);
$this->_selectFields = $selectFields;
return $this;
}
public function groupBy($groupBy) {
$this->_groupBy = $groupBy;
return $this;
}
public function getLastGetCount() {
return $this->_lastGetCount;
}
public function getFromTbl($params = array()) {
$this->_lastGetCount = 0;
$tbl = isset($params['tbl']) ? $params['tbl'] : $this->_tbl;
$table = frameWcu::_()->getTable( $tbl );
$this->_buildQuery( $table );
$return = isset($params['return']) ? $params['return'] : 'all';
$data = $table->get($this->_selectFields, $this->_where, '', $return);
if(!empty($data)) {
switch($return) {
case 'one':
$this->_lastGetCount = 1;
break;
case 'row':
$data = $this->_afterGetFromTbl( $data );
$this->_lastGetCount = 1;
break;
default:
foreach($data as $i => $row) {
$data[ $i ] = $this->_afterGetFromTbl( $row );
}
$this->_lastGetCount = count( $data );
break;
}
}
$this->_clearQuery( $params );
return $data;
}
protected function _clearQuery($params = array()) {
$clear = isset($params['clear']) ? $params['clear'] : array();
if(!is_array($clear))
$clear = array($clear);
if(empty($clear) || in_array('limit', $clear))
$this->_limit = '';
if(empty($clear) || in_array('orderBy', $clear))
$this->_orderBy = '';
if(empty($clear) || in_array('sortOrder', $clear))
$this->_sortOrder = '';
if(empty($clear) || in_array('where', $clear))
$this->_where = array();
if(empty($clear) || in_array('selectFields', $clear))
$this->_selectFields = '*';
if(empty($clear) || in_array('groupBy', $clear))
$this->_groupBy = '';
}
public function getCount($params = array()) {
$tbl = isset($params['tbl']) ? $params['tbl'] : $this->_tbl;
$table = frameWcu::_()->getTable( $tbl );
$this->setSelectFields('COUNT(*) AS total');
$this->_buildQuery( $table );
$data = (int) $table->get($this->_selectFields, $this->_where, '', 'one');
$this->_clearQuery($params);
return $data;
}
protected function _afterGetFromTbl( $row ) { // You can re-define this method in your own model
return $row;
}
protected function _buildQuery($table = null) {
if(!$table)
$table = frameWcu::_()->getTable( $this->_tbl );
if(!empty($this->_orderBy)) {
$order = $this->_orderBy;
if(!empty($this->_sortOrder))
$order .= ' '. strtoupper($this->_sortOrder);
$table->orderBy( $order );
}
if(!empty($this->_groupBy)) {
$table->groupBy( $this->_groupBy );
}
if(!empty($this->_limit)) {
$table->setLimit( $this->_limit );
}
}
public function removeGroup($ids) {
if(!is_array($ids))
$ids = array($ids);
// Remove all empty values
$ids = array_filter(array_map('intval', $ids));
if(!empty($ids)) {
if(frameWcu::_()->getTable( $this->_tbl )->delete(array('additionalCondition' => 'id IN ('. implode(',', $ids). ')'))) {
return true;
} else
$this->pushError (__('Database error detected', WCU_LANG_CODE));
} else
$this->pushError(__('Invalid ID', WCU_LANG_CODE));
return false;
}
public function clear() {
return $this->delete(); // Just delete all
}
public function delete($params = array()) {
if(frameWcu::_()->getTable( $this->_tbl )->delete( $params )) {
return true;
} else
$this->pushError (__('Database error detected', WCU_LANG_CODE));
return false;
}
public function getById($id) {
$data = $this->setWhere(array($this->_idField => $id))->getFromTbl();
return empty($data) ? false : array_shift($data);
}
public function insert($data) {
$data = $this->_dataSave($data, false);
$id = frameWcu::_()->getTable( $this->_tbl )->insert( $data );
if($id) {
return $id;
}
$this->pushError(frameWcu::_()->getTable( $this->_tbl )->getErrors());
return false;
}
public function updateById($data, $id = 0) {
if(!$id) {
$id = isset($data[ $this->_idField ]) ? (int) $data[ $this->_idField ] : 0;
}
if($id) {
return $this->update($data, array($this->_idField => $id));
} else
$this->pushError(__('Empty or invalid ID', WCU_LANG_CODE));
return false;
}
public function update($data, $where) {
$data = $this->_dataSave($data, true);
if(frameWcu::_()->getTable( $this->_tbl )->update( $data, $where )) {
return true;
}
$this->pushError(frameWcu::_()->getTable( $this->_tbl )->getErrors());
return false;
}
protected function _dataSave($data, $update = false) {
return $data;
}
public function getTbl() {
return $this->_tbl;
}
/**
* We can re-define this method to not retrive all data - for simple tables
*/
public function setSimpleGetFields() {
return $this;
}
}