X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=Notify.php;h=fd582092af5a14fa15dae313ff2f70dba6e54320;hp=63e3487f3ee4e9f32d9fcb4bdf55f87182ed2911;hb=1524f8b36295809a3eedd6da3c6494f8aa0d86f5;hpb=dd97e32be85684087c7f519d5023a6db013bf217 diff --git a/Notify.php b/Notify.php index 63e3487f..fd582092 100644 --- a/Notify.php +++ b/Notify.php @@ -42,7 +42,7 @@ class Pman_Core_Notify extends Pman ), 'old' => array( - 'desc' => 'Show old messages..', + 'desc' => 'Show old messages.. (and new messages...)', 'default' => 0, 'short' => 'o', 'min' => 0, @@ -56,13 +56,11 @@ class Pman_Core_Notify extends Pman 'min' => 0, 'max' => 0, ), - 'generate' => array( - 'desc' => 'Generate notifications for a table, eg. cash_invoice', - 'default' => '', - 'short' => 'g', - 'min' => 0, - 'max' => 1, + /* removed - use GenerateNotifcations.php hooked classes + 'generate' => 'Generate notifications for a table, eg. cash_invoice', + ), + */ 'limit' => array( 'desc' => 'Limit search for no. to send to ', 'default' => 1000, @@ -120,7 +118,7 @@ class Pman_Core_Notify extends Pman var $pool = array(); - function get($r,$opts) + function parseArgs(&$opts) { if ($opts['debug']) { DB_DataObject::debugLevel($opts['debug']); @@ -134,9 +132,7 @@ class Pman_Core_Notify extends Pman if (empty($opts['limit'])) { $opts['limit'] = '1000'; // not sure why it's not picking up the defautl.. } - //date_default_timezone_set('UTC'); - // phpinfo();exit; - $showold = !empty($opts['old']); + if (!empty($opts['old'])) { $opts['list'] = 1; // force listing.. } @@ -146,28 +142,30 @@ class Pman_Core_Notify extends Pman if (!empty($opts['send-to'])) { $this->send_to = $opts['send-to']; } - + } + + + function get($r,$opts=array()) + { + $this->parseArgs($opts); + + //date_default_timezone_set('UTC'); - $w = DB_DataObject::factory('core_notify_recur'); - if (is_a($w, 'DB_DataObject')) { - $w->generateNotifications(); - } - if (!empty($opts['generate'])) { - $w = DB_DataObject::factory($opts['generate']); - if (is_a($w, 'DB_DataObject')) { - $w->generateNotifications(); - } - exit; - - - } - + + $this->generateNotifications(); + + //DB_DataObject::debugLevel(1); $w = DB_DataObject::factory($this->table); + $total = 0; - - if (!$showold) { + if (!empty($opts['old'])) { + // show old and new... + $w->orderBy('act_when DESC'); // latest first + $w->limit($opts['limit']); // we can run + $total = min($w->count(), $opts['limit']); + } else { // standard //$w->whereAdd('act_when > sent'); // eg.. sent is not valid.. @@ -179,32 +177,29 @@ class Pman_Core_Notify extends Pman } $w->orderBy('act_when ASC'); // oldest first. - - $this->logecho("QUEUE is {$w->count()}"); + $total = min($w->count(), $opts['limit']); + $this->logecho("QUEUE is {$w->count()} only running " . ((int) $opts['limit'])); - $w->limit($opts['limit']); // we can run 1000 ... - } else { - $w->orderBy('act_when DESC'); // latest first $w->limit($opts['limit']); // we can run 1000 ... } + if (!empty($this->evtype)) { $w->evtype = $this->evtype; } $w->autoJoin(); + $w->find(); - - $ar = $w->fetchAll(); + $ar = array(); // $w->fetchAll(); if (!empty($opts['list'])) { - if (empty($ar)) { - die("Nothing in Queue\n"); - } - foreach($ar as $w) { + + + while ($w->fetch()) { $o = $w->object(); - $this->logecho("$w->id : $w->person_id_email email : ". + $this->logecho("{$w->id} : {$w->person()->email} email : ". $o->toEventString()." ". $w->status() ); } exit; @@ -214,12 +209,15 @@ class Pman_Core_Notify extends Pman $pushed = array(); $requeue = array(); while (true) { + if ($w->fetch()) { + $ar[] = clone($w); + $total--; + } - - $this->logecho("BATCH SIZE: ". count($ar) ); + $this->logecho("BATCH SIZE: ". (count($ar) + $total) ); if (empty($ar)) { - $this->logecho("COMPLETED MAIN QUEUE - running delated"); + $this->logecho("COMPLETED MAIN QUEUE - running deleted"); if (empty($pushed)) { break; @@ -236,7 +234,9 @@ class Pman_Core_Notify extends Pman sleep(3); continue; } - if ($this->poolHasDomain($p->person_id_email) > $this->max_to_domain) { + $email = $p->person() ? $p->person()->email : $p->to_email; + + if ($this->poolHasDomain($email) > $this->max_to_domain) { if ($pushed === false) { // we only try once to requeue.. @@ -251,7 +251,7 @@ class Pman_Core_Notify extends Pman } - $this->run($p->id,$p->person_id_email); + $this->run($p->id,$email); @@ -275,6 +275,42 @@ class Pman_Core_Notify extends Pman exit; } + function generateNotifications() + { + // this should check each module for 'GenerateNotifications.php' class.. + //and run it if found.. + $ff = HTML_FlexyFramework::get(); + + $disabled = explode(',', $ff->disable); + + $modules = array_reverse($this->modulesList()); + + // move 'project' one to the end... + + foreach ($modules as $module){ + if(in_array($module, $disabled)){ + continue; + } + $file = $this->rootDir. "/Pman/$module/GenerateNotifications.php"; + if(!file_exists($file)){ + continue; + } + + require_once $file; + $class = "Pman_{$module}_GenerateNotifications"; + $x = new $class; + if(!method_exists($x, 'generate')){ + continue; + }; + //echo "$module\n"; + $x->generate($this); + } + + + } + + + function run($id, $email, $cmdOpts="") { @@ -312,7 +348,7 @@ class Pman_Core_Notify extends Pman } $cmd = 'exec ' . $php . ' ' . $app . ' ' . $cmdOpts; //. ' &'; - print_r($cmd);exit; + $pipe = array(); $this->logecho("call proc_open $cmd"); @@ -342,6 +378,7 @@ class Pman_Core_Notify extends Pman 'cmd' => $cmd, 'email' => $email, 'pipes' => $pipes, + 'notify_id' => $id, 'started' => time() @@ -382,6 +419,14 @@ class Pman_Core_Notify extends Pman $this->logecho("TERMINATING: ({$p['pid']}) " . $p['cmd'] . " : " . file_get_contents($p['out'])); @unlink($p['out']); + $w = DB_DataObject::factory($this->table); + $w->get($p['notify_id']); + $ww = clone($w); + $this->addEvent('NOTIFY', $w, 'TERMINATED - TIMEOUT'); + $w->act_when = date('Y-m-d H:i:s', strtotime('NOW + 30 MINUTES')); + $w->update($ww); + + continue; }