Can someone help me refactor this to be more optimized? Performance seems to be very optimal, but I think more can be squeezed from it.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class o7th_Model extends CI_Model {
private $msg = '';
private $custom_msg = null;
private $last_id;
private $full_qry_count;
// construct our class, including the parent, database, form_validation, and pagination
public function __construct(){
parent::__construct();
$this->load->database();
$this->load->library('form_validation');
$this->load->library('pagination');
}
// Setup a list assoc array to return
/*
* USAGE - the only array parameter required is the 'table_name'
self::qlist(array('select'=>'FIELDS', --- should be a comma seperate string of field names
'where'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'or_where'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'where_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'or_where_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'where_not_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'or_where_not_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'like'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'or_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'not_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'or_not_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'group_by'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'distinct'=>'TRUE/FALSE/NULL', --- TRUE enables SELECT DISTINCT, FALSE/NULL doesnt bother adding it
'having'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'or_having'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'order_by'=>array(array('field'=>'FIELD_NAME', 'direction'=>'ASC/DESC'),), --- can have as many of these field/direction arrays as you need, direction is optional
'limit'=>array(array('limit'=>'NUMBER_TO_LIMIT_RESULTS', 'offset'=>'NUMBER_TO_LIMIT_RESULTS')),
'join'=>array(array('table'=>'TABLE_NAME_TO_JOIN', 'on'=>'EX: a.field1 = b.field2', 'direction'=>'left/right/outer/inner/left outer/right outer'),), --- can have as many of these table/on/direction arrays as you need
'validations'=>array(array('field'=>'FORM_FIELD', 'label'=>'FORM_FIELD_LABEL', 'validation'=>'VALIDATION - See CI Docs'),), --- can have as many of these field/value/validation arrays as you need
'pagination'=>array('page_num'=>'CURRENT_PAGE_WE_ARE_ON', 'per_page'=>'HOW_MANY_RECORD_PER_PAGE'), --- page_num = the page number we are currently on, per_page is how many should be displayed per page: to display the links echo the self::paginator($base_url, $per_page, $total_rows, $num_links, $uri_segment, $aclass = null); method
'custom_message'=>'TO OVERRIDE THE INTERNAL ERROR MESSAGE RETURN',
'table_name'=>'TABLE_NAME')); --- REQUIRED!!!
*/
public function qlist(){
try{
$tArgs = func_get_args();
$tbl = self::prepArgs(1, $tArgs);
if($tbl != null){
$qry = $this->db->get($tbl);
if($qry->num_rows() > 0){
$rs = $qry->result_array();
$this->full_qry_count = count($rs);
if(array_key_exists('pagination', $tArgs[0])){
$rs = array_slice($rs, $tArgs[0]['pagination']['page_num'], $tArgs[0]['pagination']['per_page']);
}
}else{
$rs = null;
$this->msg .= 'There were no records found, for the query performed<br />' . $this->db->_error_message();
}
}else{
$rs = null;
$this->msg .= 'There were no records found, for the query performed<br />' . $this->msg;
}
return $rs;
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return null;
}
}
// setup a return assoc array details record, only returns 1 record
/*
* USAGE - the only array parameter required is the 'table_name'
self::qdetails(array('select'=>'FIELDS', --- should be a comma seperate string of field names
'where'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'or_where'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'where_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'or_where_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'where_not_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'or_where_not_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'like'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'or_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'not_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'or_not_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'group_by'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'distinct'=>'TRUE/FALSE/NULL', --- TRUE enables SELECT DISTINCT, FALSE/NULL doesnt bother adding it
'having'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'or_having'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'order_by'=>array(array('field'=>'FIELD_NAME', 'direction'=>'ASC/DESC'),), --- can have as many of these field/direction arrays as you need, direction is optional
'limit'=>array(array('limit'=>'NUMBER_TO_LIMIT_RESULTS', 'offset'=>'NUMBER_TO_LIMIT_RESULTS')),
'join'=>array(array('table'=>'TABLE_NAME_TO_JOIN', 'on'=>'EX: a.field1 = b.field2', 'direction'=>'left/right/outer/inner/left outer/right outer'),), --- can have as many of these table/on/direction arrays as you need
'validations'=>array(array('field'=>'FORM_FIELD', 'label'=>'FORM_FIELD_LABEL', 'validation'=>'VALIDATION - See CI Docs'),), --- can have as many of these field/value/validation arrays as you need
'custom_message'=>'TO OVERRIDE THE INTERNAL ERROR MESSAGE RETURN',
'table_name'=>'TABLE_NAME')); --- REQUIRED!!!
*/
public function qdetails(){
try{
$tbl = self::prepArgs(1, func_get_args());
if($tbl != null){
$qry = $this->db->get($tbl);
if($qry->num_rows() > 0){
return $qry->row_array();
}else{
$this->msg .= 'There were no records found, for the query performed<br />' . $this->db->_error_message();
return null;
}
}else{
$this->msg .= 'There were no records found, for the query performed<br />' . $this->msg;
return null;
}
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return null;
}
}
// setup db insertion, return BOOLEAN
/*
* USAGE - the only array parameter required is the 'table_name', and 'insert'
self::qinsert(array('insert'=>array('DB_FIELD_NAME'=>'VALUE',), --- can have as many of these field/value items as you need
'validations'=>array(array('field'=>'FORM_FIELD', 'label'=>'FORM_FIELD_LABEL', 'validation'=>'VALIDATION - See CI Docs'),), --- can have as many of these field/value/validation arrays as you need
'custom_message'=>'TO OVERRIDE THE INTERNAL ERROR MESSAGE RETURN',
'table_name'=>'TABLE_NAME')); --- REQUIRED!!!
*/
public function qinsert(){
try{
return self::prepArgs(2, func_get_args());
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return FALSE;
}
}
// setup db edit, return BOOLEAN
/*
* USAGE - the only array parameter required is the 'table_name', and a where or like clause
self::qedit(array('update'=>array('DB_FIELD_NAME'=>'VALUE',), --- can have as many of these field/value items as you need
'where'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'or_where'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'where_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'or_where_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'where_not_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'or_where_not_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'like'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'or_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'not_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'or_not_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'group_by'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'having'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'or_having'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'join'=>array(array('table'=>'TABLE_NAME_TO_JOIN', 'on'=>'EX: a.field1 = b.field2', 'direction'=>'left/right/outer/inner/left outer/right outer'),), --- can have as many of these table/on/direction arrays as you need
'validations'=>array(array('field'=>'FORM_FIELD', 'label'=>'FORM_FIELD_LABEL', 'validation'=>'VALIDATION - See CI Docs'),), --- can have as many of these field/value/validation arrays as you need
'custom_message'=>'TO OVERRIDE THE INTERNAL ERROR MESSAGE RETURN',
'table_name'=>'TABLE_NAME')); --- REQUIRED!!!
*/
public function qupdate(){
try{
return self::prepArgs(3, func_get_args());
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return FALSE;
}
}
// setup db delete, return BOOLEAN
/*
* USAGE - the only array parameter required is the 'table_name', and a where or like clause
self::qdelete(array('where'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'or_where'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'where_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'or_where_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'where_not_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'or_where_not_in'=>array(array('field'=>'FIELD_NAME', 'value'=>array('VAL1', 'VAL2', etc...)),), --- can have as many of these field/value arrays as you need, value needs to be an array
'like'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'or_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'not_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'or_not_like'array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE', 'wildcard'=>'before/after/both/none'),), --- can have as many of these field/value arrays as you need, wildcard is optional
'group_by'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'having'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'or_having'=>array(array('field'=>'FIELD_NAME', 'value'=>'FIELD_VALUE'),), --- can have as many of these field/value arrays as you need
'join'=>array(array('table'=>'TABLE_NAME_TO_JOIN', 'on'=>'EX: a.field1 = b.field2', 'direction'=>'left/right/outer/inner/left outer/right outer'),), --- can have as many of these table/on/direction arrays as you need
'custom_message'=>'TO OVERRIDE THE INTERNAL ERROR MESSAGE RETURN',
'table_name'=>'TABLE_NAME')); --- REQUIRED!!!
*/
public function qdelete(){
try{
return self::prepArgs(4, func_get_args());
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return FALSE;
}
}
// get the last inserted id - only valid on inserts
public function last_insert_id(){
try{
return $this->last_id;
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return null;
}
}
// return a message if any of the returns above are invalid/false/errored out -- a specififed custom_message will override this
public function message(){
return ($this->custom_msg != null) ? $this->custom_msg : $this->msg;
}
// return a number of records based on the query run only valid on the selects
public function fullrecordcount(){
try{
return $this->full_qry_count;
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return null;
}
}
// return the pagination links -- only valid for qlist
public function paginator($base_url, $per_page, $total_rows, $num_links, $uri_segment, $aclass = null){
try{
$config['base_url'] = $base_url;
$config['per_page'] = $per_page;
$config['total_rows'] = $total_rows;
$config['num_links'] = $num_links;
$config['first_link'] = '<span class="fa fa-angle-double-left page_num"></span>';
$config['last_link'] = '<span class="fa fa-angle-double-right page_num"></span>';
$config['cur_tag_open'] = '<span class="page_num bold">';
$config['cur_tag_close'] = '</span>';
$config['next_link'] = '<span class="fa fa-angle-right page_num"></span>';
$config['prev_link'] = '<span class="fa fa-angle-left page_num"></span>';
$config['uri_segment'] = $uri_segment;
$config['num_tag_open'] = '<span class="page_num">';
$config['num_tag_close'] = '</span>';
if($aclass != null){
$config['anchor_class'] = 'class="' . $aclass . '" ';
}
$this->pagination->initialize($config);
return $this->pagination->create_links();
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return null;
}
}
// setup all possible arguments for all of the above, return name of the table from the arguments
private function prepArgs($which, $args){
if($args){
try{
if(array_key_exists('custom_message', $args[0])){
$this->custom_msg = $args[0]['custom_message'];
}
switch($which){
case 1: // select
return self::setupSelect($args);
break;
case 2: // insert
return self::setupInsert($args);
break;
case 3: // update
return self::setupUpdate($args);
break;
case 4: // delete
return self::setupDelete($args);
break;
}
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
}
}else{
$this->msg .= 'You have not passed in any arguments to your query, please have a look over your code.';
}
}
// setup our edit
private function setupUpdate($args){
try{
// setup our arguments
$this->setupArgs($args);
$data = array();
$tname = '';
$valid = TRUE;
// needs to include at least some kind of filter
if(!$this->validateFilters($args)){
$valid = FALSE;
$this->msg .= 'You need to have at least one filter, in order to update your record.';
}
// array of data to insert: required
if(array_key_exists('update', $args[0])){
$data = $args[0]['update'];
}else{
$valid = FALSE;
$this->msg .= 'You need to specify field/value pairs of data to update.';
}
// table name: required
if(array_key_exists('table_name', $args[0])){
$tname = $args[0]['table_name'];
}else{
$valid = FALSE;
$this->msg .= 'You need to specify a table name to update.';
}
// setup our validations
$valid = $this->setupValidations($args);
if($valid){
$this->db->update($tname, $data);
if(!($this->db->affected_rows() > 0)){
$this->msg .= $this->db->_error_message();
return FALSE;
}else{
return TRUE;
}
}else{
return $valid;
}
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return FALSE;
}
}
// setup our delete
private function setupDelete($args){
try{
// setup our arguments
$this->setupArgs($args);
// needs to include at least some kind of filter
if(!$this->validateFilters($args)){
$this->msg .= 'You need to have at least one filter, in order to delete your record.';
return null;
}
// table name: required
if(array_key_exists('table_name', $args[0])){
if($args[0]['table_name'] != null){
$this->db->delete($args[0]['table_name']);
if($this->db->affected_rows() <= 0){
$this->msg = 'There was an issue removing that record.<br />' . $this->db->_error_message();
return FALSE;
}
}else{
$this->msg = 'There was an issue removing that record.<br />' . $this->msg;
return FALSE;
}
}else{
$this->msg .= 'A table name is required in order to delete a record from it';
return FALSE;
}
return TRUE;
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return FALSE;
}
}
// setup(and run) our insert
private function setupInsert($args){
try{
$data = array();
$tname = '';
$valid = TRUE;
// array of data to insert: required
if(array_key_exists('insert', $args[0])){
$data = $args[0]['insert'];
}else{
$valid = FALSE;
$this->msg .= 'You need to specify field/value pairs of data to insert.';
}
// table name: required
if(array_key_exists('table_name', $args[0])){
$tname = $args[0]['table_name'];
}else{
$valid = FALSE;
$this->msg .= 'You need to specify a table name to insert data into.';
}
// setup our validations
$valid = $this->setupValidations($args);
if($valid){
$this->db->insert($tname, $data);
if(!($this->db->affected_rows() > 0)){
$this->msg .= $this->db->_error_message();
return FALSE;
}else{
$this->last_id = $this->db->insert_id();
return TRUE;
}
}else{
return $valid;
}
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return FALSE;
}
}
// setup our select
private function setupSelect($args){
try{
$tname = null;
// select field names
if(array_key_exists('select', $args[0])){
$this->db->select($args[0]['select']);
}
// setup our arguments
$this->setupArgs($args);
// setup our validations
$valid = $this->setupValidations($args);
// table name: required
if($valid){
if(array_key_exists('table_name', $args[0])){
$tname = $args[0]['table_name'];
}else{
$this->msg .= 'A table name is required to select any records from.';
}
}
return $tname;
}catch(Exception $ex){
$this->msg .= $ex->getMessage();
return null;
}
}
// setup validations
private function setupValidations($args){
if(array_key_exists('validations', $args[0])){
$v = $args[0]['validations'];
$vCt = count($v);
for($vv = 0; $vv < $vCt; ++$vv){
$this->form_validation->set_rules($v[$vv]['field'], $v[$vv]['label'], $v[$vv]['validation']);
}
if ($this->form_validation->run() === FALSE){
$this->msg .= validation_errors();
return FALSE;
}
return TRUE;
}
return TRUE;
}
// setup the arguments
private function setupArgs($args){
// where clause(s)
if(array_key_exists('where', $args[0])){
$w = $args[0]['where'];
$wCt = count($w);
for($ww = 0; $ww < $wCt; ++$ww){
if($w[$ww]['value']){
$this->db->where($w[$ww]['field'], $w[$ww]['value']);
}
}
}
// or_where clause(s)
if(array_key_exists('or_where', $args[0])){
$w = $args[0]['or_where'];
$wCt = count($w);
for($ww = 0; $ww < $wCt; ++$ww){
if($w[$ww]['value']){
$this->db->or_where($w[$ww]['field'], $w[$ww]['value']);
}
}
}
// where_in clause(s)
if(array_key_exists('where_in', $args[0])){
$w = $args[0]['where_in'];
$wCt = count($w);
for($ww = 0; $ww < $wCt; ++$ww){
if($w[$ww]['value']){
$this->db->where_in($w[$ww]['field'], $w[$ww]['value']);
}
}
}
// or_where_in clause(s)
if(array_key_exists('or_where_in', $args[0])){
$w = $args[0]['or_where_in'];
$wCt = count($w);
for($ww = 0; $ww < $wCt; ++$ww){
if($w[$ww]['value']){
$this->db->or_where_in($w[$ww]['field'], $w[$ww]['value']);
}
}
}
// where_not_in clause(s)
if(array_key_exists('where_not_in', $args[0])){
$w = $args[0]['where_not_in'];
$wCt = count($w);
for($ww = 0; $ww < $wCt; ++$ww){
if($w[$ww]['value']){
$this->db->where_not_in($w[$ww]['field'], $w[$ww]['value']);
}
}
}
// or_where_not_in clause(s)
if(array_key_exists('or_where_not_in', $args[0])){
$w = $args[0]['or_where_not_in'];
$wCt = count($w);
for($ww = 0; $ww < $wCt; ++$ww){
if($w[$ww]['value']){
$this->db->or_where_not_in($w[$ww]['field'], $w[$ww]['value']);
}
}
}
// like clause(s)
if(array_key_exists('like', $args[0])){
$l = $args[0]['like'];
$lCt = count($l);
for($ll = 0; $ll < $lCt; ++$ll){
if($l[$ll]['value']){
$this->db->like($l[$ll]['field'], $l[$ll]['value'], (isset($l[$ll]['wildcard'])) ? $l[$ll]['wildcard'] : null);
}
}
}
// or_like clause(s)
if(array_key_exists('or_like', $args[0])){
$l = $args[0]['or_like'];
$lCt = count($l);
for($ll = 0; $ll < $lCt; ++$ll){
if($l[$ll]['value']){
$this->db->or_like($l[$ll]['field'], $l[$ll]['value'], (isset($l[$ll]['wildcard'])) ? $l[$ll]['wildcard'] : null);
}
}
}
// not_like clause(s)
if(array_key_exists('not_like', $args[0])){
$l = $args[0]['not_like'];
$lCt = count($l);
for($ll = 0; $ll < $lCt; ++$ll){
if($l[$ll]['value']){
$this->db->not_like($l[$ll]['field'], $l[$ll]['value'], (isset($l[$ll]['wildcard'])) ? $l[$ll]['wildcard'] : null);
}
}
}
// or_not_like clause(s)
if(array_key_exists('or_not_like', $args[0])){
$l = $args[0]['or_not_like'];
$lCt = count($l);
for($ll = 0; $ll < $lCt; ++$ll){
if($l[$ll]['value']){
$this->db->or_not_like($l[$ll]['field'], $l[$ll]['value'], (isset($l[$ll]['wildcard'])) ? $l[$ll]['wildcard'] : null);
}
}
}
// group_by clause(s)
if(array_key_exists('group_by', $args[0])){
$g = $args[0]['group_by'];
$gCt = count($g);
for($gg = 0; $gg < $gCt; ++$gg){
if($g[$gg]['value']){
$this->db->group_by($g[$gg]['field'], $g[$gg]['value']);
}
}
}
// distinct flag
if(array_key_exists('distinct', $args[0])){
if($args[0]['distinct'] == TRUE){
$this->db->distinct();
}
}
// having clause(s)
if(array_key_exists('having', $args[0])){
$h = $args[0]['having'];
$hCt = count($h);
for($hh = 0; $hh < $hCt; ++$hh){
if($h[$hh]['value']){
$this->db->having($h[$hh]['field'], $h[$hh]['value']);
}
}
}
// or_having clause(s)
if(array_key_exists('or_having', $args[0])){
$h = $args[0]['or_having'];
$hCt = count($h);
for($hh = 0; $hh < $hCt; ++$hh){
if($h[$hh]['value']){
$this->db->or_having($h[$hh]['field'], $h[$hh]['value']);
}
}
}
// order_by clause(s)
if(array_key_exists('order_by', $args[0])){
$o = $args[0]['order_by'];
$oCt = count($o);
for($oo = 0; $oo < $oCt; ++$oo){
$this->db->order_by($o[$oo]['field'], ($o[$oo]['direction']) ? $o[$oo]['direction'] : null);
}
}
// join clause(s)
if(array_key_exists('join', $args[0])){
$j = $args[0]['join'];
$jCt = count($j);
for($jj = 0; $jj < $jCt; ++$jj){
$this->db->join($j[$jj]['table'], $j[$jj]['on'], $j[$jj]['direction']);
}
}
// limit
if(array_key_exists('limit', $args[0])){
$this->db->limit($args[0]['limit']['limit'], $args[0]['limit']['offset']);
}
}
// validate our filters
private function validateFilters($args){
return (!array_key_exists('where', $args[0]) ||
!array_key_exists('or_where', $args[0]) ||
!array_key_exists('where_in', $args[0]) ||
!array_key_exists('or_where_in', $args[0]) ||
!array_key_exists('where_not_in', $args[0]) ||
!array_key_exists('or_where_not_in', $args[0]) ||
!array_key_exists('like', $args[0]) ||
!array_key_exists('or_like', $args[0]) ||
!array_key_exists('not_like', $args[0]) ||
!array_key_exists('or_not_like', $args[0]));
}
}
?>