// ------------ROO HOOKS------------------------------------
function applyFilters($q, $au ,$roo)
{
- DB_DataObject::debugLevel(1);
- $tn = $this->tableName();
- // if not empty on_table
- if(!empty($q['person_table'])){
- $jt = DB_DataObject::factory($q['person_table']);
-
- $this->_join = "LEFT JOIN {$jt->tableName()} AS join_person_id_id ON (join_person_id_id.id=Events.person_id)";
- $this->selectAdd();
- $this->selectAs();
-
- $this->selectAs($jt, 'person_id_%s', 'join_person_id_id');
-
- } else {
- $jt = DB_DataObject::factory('Person');
- $this->whereAdd("
- person_table = '{$jt->tableName()}'
- OR
- person_table = ''
- OR person_table IS NULL"
- ); // default to our standard.. - unless otherwise requested..
- }
-
-
- if (!empty($q['query']['from'])) {
- $dt = date('Y-m-d' , strtotime($q['query']['from']));
- $this->whereAdd(" {$tn}.event_when >= '$dt' ");
- }
- if (!empty($q['query']['to'])) {
- $dt = date('Y-m-d' , strtotime($q['query']['to']));
- $this->whereAdd(" {$tn}.event_when <= '$dt' ");
- }
- /*
- if (!empty($q['query']['grouped']) && $q['query']['grouped'] == 'gr') {
- // grouped..
- DB_DataObject::Debuglevel(1);
- $this->groupBy('on_id');
- $this->selectAdd('
- (SELECT count(id) FROM core_event_audit WHERE event_id = Events.id) as changed
- ');
- }
- */
-
- if (!$au->hasPerm("Admin.Admin_Tab", 'S')) {
- //DB_DataObject::DebugLevel(1);
- // they can only view their changes..
- $this->person_id = $au->id;
-
- }
- // _join = tablename,tablename...
-
- /// on_table=cohead
- // &_join=cohead
- // &_join_cols=cohead_number
- // &_columns=on_id_cohead_number,event_when << this is ignored at present.
- // max(event_when) is not supported... by any query yet..
-
- if (isset($q['on_table']) && !strlen($q['on_table'])) {
- // empty ontable queries.. these are valid..
- $this->whereAdd("$tn.on_table = ''");
- }
-
-
-
- if (isset($q['query']['person_sum'])) {
- //DB_DataObject::debugLevel(1);
- $this->_extra_cols = array('qty' );
- $this->selectAdd("count($tn.id) as qty");
- $this->selectAdd("count( distinct $tn.on_id) as uqty");
- $this->whereAdd('LENGTH(join_person_id_id.name) > 0 ');
- $this->groupBy('person_id,join_person_id_id.name,join_person_id_id.email');
- }
- if (isset($q['query']['table_sum'])) {
- //DB_DataObject::debugLevel(1);
- $this->_extra_cols = array('qty' , 'uqty');
- $this->selectAdd("count($tn.id) as qty");
- $this->selectAdd("count( distinct $tn.on_table, $tn.on_id) as uqty");
-
- $this->groupBy('on_table');
- }
- if (isset($q['query']['day_sum'])) {
- //DB_DataObject::debugLevel(1);
- $this->_extra_cols = array('qty' , 'uqty');
- $this->selectAdd("DATE_FORMAT(event_when, '%Y-%m-%d') as on_day");
- $this->selectAdd("count($tn.id) as qty");
- $this->selectAdd("count( distinct $tn.on_id) as uqty");
-
- $this->groupBy('on_day');
- }
-
- if (isset($q['_join'])) {
- //DB_DataObject::DebugLevel(1);
- $joins = explode(',',$q['_join']);
-
- $this->selectAdd(); // ???
- $distinct = false;
-
- foreach($joins as $t) {
- $t = preg_replace('/[^a-z_]+/', '', $t); // protection.
- $x = DB_DataObject::Factory($t);
- if (!is_a($x,'DB_DataObject')) {
- continue;
- }
- $jtn = $x->tableName();
- $jk = array_shift($x->keys());
- $this->_join .= "
-
- LEFT JOIN {$jtn} as join_on_id_{$jtn} ON {$tn}.on_id = join_on_id_{$jtn}.{$jk}
- AND on_table = '{$jtn}'
- ";
- $keys = array_keys($x->table());
- if (isset($q['_join_cols'])) {
- $jcs = explode(',',$q['_join_cols'] );
- //DB_DataObject::DebugLevel(1);
-
- foreach($jcs as $jc) {
- if (! in_array($jc, $keys)) {
- continue;
- }
- if ($distinct) {
-
-
- $this->selectAdd( " join_on_id_{$jtn}.{$jc} as on_id_{$jc} ");
- } else {
- $this->selectAdd( " distinct(join_on_id_{$jtn}.{$jc} ) as on_id_{$jc} ");
- $distinct = true;
- }
- $this->groupBy("on_id_{$jc} ");
- $this->whereAdd("join_on_id_{$jtn}.{$jc} IS NOT NULL");
- }
- $this->selectAdd( "MAX(events.event_when) as event_when");
- $this->orderBy('event_when DESC');
- // $this->selectAs(array($q['_join_cols']) , 'on_id_%s', "join_on_id_{$jtn}");
- } else {
- $this->selectAs($x, 'on_id_%s', "join_on_id_{$jtn}");
- }
- }
-
-
-
-
- }
-
- if (isset($q['_related_on_id']) && isset($q['_related_on_table'])) {
- // example: sales order - has invoices,
- ///DB_DataObject::DebugLevel(1);
- $ev =$this->factory('Events');
- $ev->setFrom(array(
- 'on_id' => $q['_related_on_id'],
- 'on_table' => $q['_related_on_table'],
- ));
- $obj = $ev->object();
-
- if (!$obj) {
- $roo->jerr("ontable is invalid");
- }
- if (!method_exists($obj,'relatedWhere')) {
- $roo->jerr( $q['_related_on_table'] . " Does not have method relatedWhere :" .
- implode(',', get_class_methods($obj)));
- }
- if ($obj && method_exists($obj,'relatedWhere')) {
- $ar = $obj->relatedWhere();
- $tn = $this->tableName();
-
- $w = array();
- $w[] = "( {$tn}.on_table = '" .
- $this->escape($q['_related_on_table']) .
- "' AND {$tn}.on_id = ". ((int) $q['_related_on_id']) .
- ")";
-
-
- foreach($ar as $k=>$v) {
- if (empty($v)) {
- continue;
- }
- $w[] = "( {$tn}.on_table = '$k' AND {$tn}.on_id IN (". implode(',', $v). "))";
-
- }
- $this->whereAdd(implode(' OR ' , $w));
- }
-
-
-
-
-
- }
- // since roo does not support autojoin yet..
- if (!isset($q['_distinct'])) {
- //$this->autoJoinExtra();
- }
-