X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=DataObjects%2FEvents.php;h=e8682ac8f2cadde618b6512710cb4b1c744fc85e;hp=1e32409d5e0565172f7de6c54f40640815ff6686;hb=HEAD;hpb=a5cdf067a689b0240df9eb7e55ad01e26ba3b073 diff --git a/DataObjects/Events.php b/DataObjects/Events.php index 1e32409d..a04484c4 100644 --- a/DataObjects/Events.php +++ b/DataObjects/Events.php @@ -7,7 +7,7 @@ * * */ -require_once 'DB/DataObject.php'; +class_exists('DB_DataObject') ? '' : require_once 'DB/DataObject.php'; class Pman_Core_DataObjects_Events extends DB_DataObject { @@ -25,7 +25,8 @@ class Pman_Core_DataObjects_Events extends DB_DataObject public $person_id; // int(11) public $remarks; // blob(65535) blob public $person_table; // string(64) - + public $dupe_id; // int(11) + /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE @@ -37,19 +38,22 @@ class Pman_Core_DataObjects_Events extends DB_DataObject { $tn = $this->tableName(); // if not empty on_table + if(!empty($q['person_table'])){ $jt = DB_DataObject::factory($q['person_table']); + - if(!array_key_exists("{$jt->tableName()}_id", $this->table())){ // coz we have triiger on mysql... + + if(!array_key_exists("{$jt->tableName()}_id", $this->tableColumns())){ // coz we have triiger on mysql... $keys = $jt->keys(); $this->_join = "LEFT JOIN {$jt->tableName()} AS join_person_id_id ON (join_person_id_id.{$keys[0]}=Events.person_id)"; + $this->selectAdd(); $this->selectAs(); $this->selectAs($jt, 'person_id_%s', 'join_person_id_id'); - if (method_exists($jt,'nameColumn')) { $this->selectAdd("join_person_id_id.{$jt->nameColumn()} as person_id_name"); } @@ -61,19 +65,20 @@ class Pman_Core_DataObjects_Events extends DB_DataObject } } else { - $person = 'Person'; + + $person = $au->tableName(); //'Person'; -- projects may not use person as the auth table... $cfg = HTML_FlexyFramework::get()->Pman; if (!empty($cfg['authTable'])) { $person =$cfg['authTable']; } $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.. + //$this->whereAdd(" + // person_table = '{$jt->tableName()}' + // OR + // person_table = '' + // OR person_table IS NULL" + //); // default to our standard.. - unless otherwise requested.. } @@ -85,6 +90,11 @@ class Pman_Core_DataObjects_Events extends DB_DataObject $dt = date('Y-m-d' , strtotime($q['query']['to'])); $this->whereAdd(" {$tn}.event_when <= '$dt' "); } + + if(!empty($q['_with_dupe_count'])){ + $this->dupe_id = 0; + $this->selectAdd("(select count(*)+1 from Events ev_cnt where ev_cnt.dupe_id = {$tn}.id) as dupe_count"); + } /* if (!empty($q['query']['grouped']) && $q['query']['grouped'] == 'gr') { // grouped.. @@ -96,12 +106,6 @@ class Pman_Core_DataObjects_Events extends DB_DataObject } */ - 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 @@ -114,9 +118,7 @@ class Pman_Core_DataObjects_Events extends DB_DataObject // 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' ); @@ -147,7 +149,7 @@ class Pman_Core_DataObjects_Events extends DB_DataObject //DB_DataObject::DebugLevel(1); $joins = explode(',',$q['_join']); - $this->selectAdd(); // ??? + //$this->selectAdd(); // ??? << this wipes out the default options $distinct = false; foreach($joins as $t) { @@ -157,13 +159,14 @@ class Pman_Core_DataObjects_Events extends DB_DataObject continue; } $jtn = $x->tableName(); - $jk = array_shift($x->keys()); + $jks = $x->keys(); + $jk = array_shift($jks); $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()); + $keys = array_keys($x->tableColumns()); if (isset($q['_join_cols'])) { $jcs = explode(',',$q['_join_cols'] ); //DB_DataObject::DebugLevel(1); @@ -207,8 +210,9 @@ class Pman_Core_DataObjects_Events extends DB_DataObject if (!$obj) { $roo->jerr("ontable is invalid"); } + if (!method_exists($obj,'relatedWhere')) { - $roo->jerr( $q['_related_on_table'] . " Does not have method relatedWhere :" . + $roo->jerr( $q['_related_on_table'] . " Does not have method relatedWhere or relatedEventsWhere:" . implode(',', get_class_methods($obj))); } if ($obj && method_exists($obj,'relatedWhere')) { @@ -232,11 +236,10 @@ class Pman_Core_DataObjects_Events extends DB_DataObject $this->whereAdd(implode(' OR ' , $w)); } - - - + } + // since roo does not support autojoin yet.. if (!isset($q['_distinct'])) { //$this->autoJoinExtra(); @@ -253,8 +256,16 @@ class Pman_Core_DataObjects_Events extends DB_DataObject } } - + function applyPermissionFilters($q, $au ,$roo) + { + if (!$au->hasPerm("Admin.Admin_Tab", 'S')) { + //DB_DataObject::DebugLevel(1); + // they can only view their changes.. + $this->whereAdd("($tn.person_id = {$au->id} OR $tn.person_id = 0)"); +// $this->person_id = $au->id; + } + } /** * check who is trying to access this. false == access denied.. @@ -297,24 +308,27 @@ class Pman_Core_DataObjects_Events extends DB_DataObject $ff = HTML_FlexyFramework::get(); $pg = $ff->page; $au = $pg->getAuthUser(); - + if ($ff->cli) { // && empty($au) && isset($obj->person_id)) { $au = false; // $au = DB_DataObject::Factory('Person'); // not always a person.. // $au->get($obj->person_id); } - + $this->person_name = $au && !empty($au->name) ? $au->name : ''; + //print_r($au); + //exit; + //$this->who = $au && !empty($au->name) ? $au->name : ''; if (empty($au) || (isset($au->id) && empty($au->id))) { // not authenticated - and a standard id based object $this->person_id = 0; } else { $col = $au->tableName() == "Person" ? 'person_id' : $au->tableName() . '_id'; // does $col exist? - $cols = $this->table(); + $cols = $this->tableColumns(); $col = isset($cols[$col]) ? $col : 'person_id'; // for BC.... - revert to using person_id $this->{$col} = $au->pid(); - //$this->person_id = $au ? (!empty($au->id) ? $au->id : $au->pid()) : -1; + //$this->person_id = $au ? (!empty($au->id) ? $au->id : $au->pid()) : -1; } $this->person_table = $au ? $au->tableName() : ''; $this->ipaddr = isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : 'cli'; @@ -329,9 +343,15 @@ class Pman_Core_DataObjects_Events extends DB_DataObject $rem = array(); // should this really go in remarks? - if ($obj && method_exists($obj,'toEventString')) { - $rem[] = $obj->toEventString() ; + if($obj->toEventString() !== false){ + $rem[] = $obj->toEventString(); + } } - $rem[] = $remarks; + + if(!empty($remarks)){ + $rem[] = $remarks; + } + $this->remarks = implode(' : ', $rem); } @@ -351,7 +371,7 @@ class Pman_Core_DataObjects_Events extends DB_DataObject } $ret = 0; - foreach(array_keys($new->table()) as $k) { + foreach(array_keys($new->tableColumns()) as $k) { // should we JSON serialize this? $n = empty($new->$k) ? '' : $new->$k; $o = empty($old->$k) || empty($old->$k) ? '' : $old->$k; @@ -409,7 +429,7 @@ class Pman_Core_DataObjects_Events extends DB_DataObject if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $this->ipaddr = $_SERVER['HTTP_X_FORWARDED_FOR']; } - } + } } function beforeUpdate($old, $request,$roo) @@ -450,26 +470,79 @@ class Pman_Core_DataObjects_Events extends DB_DataObject self::$deleted[] = $del; return true; } + static $extra_data = false; + + static function writeEventLogExtra($data) { + self::$extra_data = $data; + } + static $files = array(); + + /** + * Add a file to the output log + * this needs to be called before addEvent, and the data format should be the same as $_FILES + * eg. + * + * DB_DataObject::factory('Events')->addFile(array( + * 'tmp_name' => real file location + * 'name' => real file name + * 'type' => mimetype + * 'size' => filesize + * + * )) + * + */ + function addFile($data) + { + self::$files[] = $data; + } - function writeEventLog($extra_data = '') + function logDir($user = false) { $ff = HTML_FlexyFramework::get(); - if (empty($ff->Pman['event_log_dir'])) { + if ($user === false) { + if (function_exists('posix_getpwuid')) { + $uinfo = posix_getpwuid( posix_getuid () ); + + $user = $uinfo['name']; + } else { + $user = getenv('USERNAME'); // windows. + } + } + + + if (!empty($ff->Pman['storedir'])) { + return $ff->Pman['storedir'] .'/Events/'.$user; + } + // DEPRICATED... + if (!empty($ff->Pman['event_log_dir'])) { + return $ff->Pman['event_log_dir'] . '/'.$user; + } + + return false; + } + + + + function writeEventLog($extra_data = false) + { + $logdir = $this->logDir(); + + if (!$logdir) { return false; } - // add user (eg. www-data or local user if not..) - if (function_exists('posix_getpwuid')) { - $uinfo = posix_getpwuid( posix_getuid () ); - $user = $uinfo['name']; - } else { - $user = getenv('USERNAME'); // windows. - } //print_r($this); - $file = $ff->Pman['event_log_dir']. '/'. $user. date('/Y/m/d/'). $this->id . ".json"; + $file = $logdir. date('/Y/m/d/'). $this->id . ".json"; if (!file_exists(dirname($file))) { - mkdir(dirname($file),0700,true); + + @mkdir(dirname($file),0700,true); // this might fail if it does not have correct permissions.. + clearstatcache(); + if (!file_exists(dirname($file))) { + //print_r($this); + die("Events:: writeEventLog: could not create $file - permissons are not correct\n"); // fatal, otherwise we loop!? + } + } // Remove all the password from logs... @@ -483,9 +556,10 @@ class Pman_Core_DataObjects_Events extends DB_DataObject $i=0; $files = array(); + - $i = 0; - foreach ($_FILES as $k=>$f){ + + foreach (array_merge($_FILES, self::$files) as $k=>$f){ // does not handle any other file[] arrary very well.. if (empty($f['tmp_name']) || !file_exists($f['tmp_name'])) { continue; @@ -495,11 +569,14 @@ class Pman_Core_DataObjects_Events extends DB_DataObject $files[$k]['tmp_name'] = $this->id . '-'. $i; - $nf = $ff->Pman['event_log_dir']. '/'. $user. date('/Y/m/d/'). $files[$k]['tmp_name']; + $nf = $logdir . date('/Y/m/d/'). $files[$k]['tmp_name']; if (!copy($f['tmp_name'], $nf)) { print_r("failed to copy {$f['tmp_name']}...\n"); } } + + + $out = array( 'REQUEST_URI' => empty($_SERVER['REQUEST_URI']) ? 'cli' : $_SERVER['REQUEST_URI'], 'HTTP_USER_AGENT' => empty($_SERVER['HTTP_USER_AGENT']) ? '' : $_SERVER['HTTP_USER_AGENT'], @@ -511,9 +588,22 @@ class Pman_Core_DataObjects_Events extends DB_DataObject if (!empty(self::$deleted)) { $out['DELETED_DATAOBJECTS'] = self::$deleted; } - if (!empty($extra_data)) { + if ($extra_data !== false) { $out['EXTRA'] = $extra_data; } + if ( self::$extra_data !== false) { + $out['EXTRA_DATA'] = self::$extra_data; + } + $total_data = 0; + foreach($out as $k=>$v) { + if (!empty($v) && $k != 'REQUEST_URI') { + $total_data++; + } + } + if (!$total_data) { + return; // do not write an empty file with no usefull info. + } + file_put_contents($file, json_encode($out)); @@ -567,24 +657,23 @@ class Pman_Core_DataObjects_Events extends DB_DataObject function retrieveEventLog() { - $ff = HTML_FlexyFramework::get(); - if (empty($ff->Pman['event_log_dir'])) { + + $logdir = $this->logDir(); + if (!$logdir) { return false; - } - - if (function_exists('posix_getpwuid')) { - $uinfo = posix_getpwuid( posix_getuid () ); - $user = $uinfo['name']; - } else { - $user = getenv('USERNAME'); // windows. } $date = date('/Y/m/d/', strtotime($this->event_when)); - $file = $ff->Pman['event_log_dir']. '/'. $user. $date. $this->id . ".json"; - if (!file_exists(dirname($file))) { - return false; + $file = $logdir. $date. $this->id . ".json"; + if (!file_exists($file)) { + + // try looking www-dir.. + $file = $this->logDir('www-data'). $date. $this->id . ".json"; + if (!file_exists($file)) { + return false; + } } return $file; @@ -622,7 +711,7 @@ class Pman_Core_DataObjects_Events extends DB_DataObject $restored[$d['_table']] = array(); } - $restored[$d['_table']] = $d['id']; + $restored[$d['_table']][] = $d['id']; $table = DB_DataObject::factory($d['_table']); @@ -633,15 +722,41 @@ class Pman_Core_DataObjects_Events extends DB_DataObject unset($d['_table']); $table->setFrom($d); + + /* + * need to use the old id + */ $table->id = $d['id']; $table->sequenceKey(false,false); -// $table->insert(); - + $table->insert(); + + if($table->tableName() == 'crm_mailing_list_member'){ + $ml = DB_DataObject::factory('crm_mailing_list'); + if(!$ml->get($table->mailing_list_id)){ + continue; + } + + $mlm = DB_DataObject::factory('crm_mailing_list_member'); + $mlm->setFrom(array( + 'mailing_list_id' => $table->mailing_list_id, + 'is_active' => 1 + )); + + $o = clone($ml); + $ml->no_members = $mlm->count(); + $ml->update($o); + } } - print_R($restored);exit; + $roo->jok('RESTORE'); + } + function selectAddPersonEmail() + { + $this->selectAdd('join_person_id_id.email as email'); } + + }