From 2562514ee08ca50e57c35b12ba0b941e4a3ecae6 Mon Sep 17 00:00:00 2001 From: michael Date: Mon, 10 Feb 2003 11:45:11 +0000 Subject: [PATCH] updated dependencies, fixed subscription firing bugs --- lib/subscriptions/SubscriptionEngine.inc | 78 ++++++++++++++++++++++++++++++++++++++---------------------------------------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/lib/subscriptions/SubscriptionEngine.inc b/lib/subscriptions/SubscriptionEngine.inc index 96bc6b6..aa034d8 100644 --- a/lib/subscriptions/SubscriptionEngine.inc +++ b/lib/subscriptions/SubscriptionEngine.inc @@ -2,9 +2,10 @@ require_once("$default->owl_fs_root/lib/users/User.inc"); require_once("$default->owl_fs_root/lib/documentmanagement/Document.inc"); require_once("$default->owl_fs_root/lib/foldermanagement/Folder.inc"); -require_once("$default->owl_fs_root/lib/subscriptions/DocumentSubscription.inc"); -require_once("$default->owl_fs_root/lib/subscriptions/FolderSubscription.inc"); -require_once("$default->owl_fs_root/lib/email/Email.inc"); +require_once("$default->owl_fs_root/lib/subscriptions/Subscription.inc"); +require_once("$default->owl_fs_root/lib/subscriptions/AlertContent.inc"); +require_once("$default->owl_fs_root/lib/subscriptions/alert/EmailAlert.inc"); +require_once("$default->owl_fs_root/lib/subscriptions/alert/SMSAlert.inc"); /** * @@ -21,31 +22,6 @@ require_once("$default->owl_fs_root/lib/email/Email.inc"); */ class SubscriptionEngine { - - /* - fireSubscription($iFolderID, SubscriptionConstants::subscriptionAlertType("AddFolder"), - SubscriptionConstants::subscriptionType("FolderSubscription"), - array( "newFolderName" =>, - "parentFolderName" =>)); - - fireSubscription($iFolderID, SubscriptionConstants::subscriptionAlertType("RemoveFolder"), - SubscriptionConstants::subscriptionType("FolderSubscription"), - array( "removedFolderName" =>, - "parentFolderName" =>)); - fireSubscription($iFolderID, SubscriptionConstants::subscriptionAlertType("AddDocument"), - SubscriptionConstants::subscriptionType("FolderSubscription"), - array( "newDocumentName" =>, - "folderName" =>)); - - fireSubscription($iFolderID, SubscriptionConstants::subscriptionAlertType("RemoveDocument"), - SubscriptionConstants::subscriptionType("FolderSubscription"), - array( "removedDocumentName" =>, - "folderName" =>)); - - fireSubscription($iFolderID, SubscriptionConstants::subscriptionAlertType("ModifyDocument"), - SubscriptionConstants::subscriptionType("DocumentSubscription"), - array( "modifiedDocumentName" =>, )); - */ /** * Fires a subscription alert for this subscription content * @@ -55,54 +31,75 @@ class SubscriptionEngine { * @param array any dynamic values that should be sent with the alert (eg. document name, path to modified document) */ function fireSubscription($iExternalID, $iSubscriptionAlertType, $iSubscriptionType, $aValues) { + global $default; + // get the list of subscriber addresses that we need to alert - $aSubscribers = retrieveSubscribers($iExternalID, $iSubscriptionType); + $aSubscribers = SubscriptionEngine::retrieveSubscribers($iExternalID, $iSubscriptionType); + + // count the number of subscriptions we've sent + $iSubscriptionsSent = 0; - // if the subscription type is document, add the folder subscriber also + // if the subscription type is document, fire the folder subscriptions also if ($iSubscriptionType == SubscriptionConstants::subscriptionType("DocumentSubscription")) { - $aSubscribers = array_merge($aSubscribers, retrieveSubscribers($iExternalID, SubscriptionConstants::subscriptionType("FolderSubscription"))); + $oDocument = & Document::get($iExternalID); + $default->log->debug("document=$oDocument"); + $iSubscriptionsSent = SubscriptionEngine::fireSubscription($oDocument->getFolderID(), + $iSubscriptionAlertType, + SubscriptionConstants::subscriptionType("FolderSubscription"), + $aValues); + $default->log->info("fired folder subscribers, count=$iSubscriptionsSent"); } + $default->log->info("subscribers=" . arrayToString($aSubscribers)); // for each subscriber, construct an address based on their notification preferences for ($i=0; $ilog->info("looking up subscription subID=" . $aSubscribers[$i]->getID() . " ID=$iExternalID; type=$iSubscriptionType"); + // lookup the subscription $oSubscription = & Subscription::getByIDs($aSubscribers[$i]->getID(), $iExternalID, $iSubscriptionType); // update the alerted status $oSubscription->setIsAlerted(true); + // write it back to the db if ($oSubscription->update()) { - // create the link to this subscription - $aValues["viewAlertLink"] = generateControllerUrl("viewAlert", "fSubscriptionID=" . $oSubscription->getID()); - // supply the subscriber name + // get the subscription id + $aValues["subscriptionID"] = $oSubscription->getID(); + // and subscriber name $aValues["subscriberName"] = $aSubscribers[$i]->getName(); // retrieve the appropriate content + // using the values array to customise the notification message $sAlertContent = AlertContent::get($iSubscriptionAlertType, $aValues); // construct alerts if ($aSubscribers[$i]->getEmailNotification() && (strlen($aSubscribers[$i]->getEmail()) > 0)) { - $oEmail = new EmailAlert($aSubscribers[$i]->getEmail(), $sAlertContent); + $oEmail = new EmailAlert($aSubscribers[$i]->getEmail(), $sAlertContent["subject"], $sAlertContent["text"]); if ($oEmail->send()) { - $default->log->debug("SubscriptionEngine::fireSubscription successfully sent email for folderID=$iFolderID, subscriber=" . $aSubscribers[$i]->getID() . "; text=$sNotificationText"); + $iSubscriptionsSent++; + $default->log->debug("SubscriptionEngine::fireSubscription successfully sent email alert to " . $aSubscribers[$i]->getEmail() . " for subscriptionID=" . $aSubscribers[$i]->getID()); } else { - $default->log->error("SubscriptionEngine::fireSubscription failed sending email for folderID=$iFolderID, subscriber=" . $aSubscribers[$i]->getID() . "; text=$sNotificationText"); + $default->log->error("SubscriptionEngine::fireSubscription failed sending email alert to " . $aSubscribers[$i]->getEmail() . " for subscriptionID=" . $aSubscribers[$i]->getID() . "; text=$sAlertContent"); } } // if sms notification is enabled, sms them if ($aSubscribers[$i]->getSmsNotification() && strlen($aSubscribers[$i]->getMobile()) > 0) { - $oSms = new SMSAlert($aSubscribers[$i]->getMobile(), $sAlertContent); + $oSms = new SMSAlert($aSubscribers[$i]->getMobile(), $sAlertContent["text"]); if ($oSms->send()) { + $iSubscriptionsSent++; $default->log->debug("SubscriptionEngine::fireSubscription successfully sent sms for folderID=$iFolderID, subscriber=" . $aSubscribers[$i]->getID() . "; text=$sNotificationText"); } else { $default->log->error("SubscriptionEngine::fireSubscription failed sending sms for folderID=$iFolderID, subscriber=" . $aSubscribers[$i]->getID() . "; text=$sNotificationText"); } } + } else { + $default->log->error("SubscriptionEngine::fireSubscription could not update subscription- db error?"); } } + // return the number of processed subscriptions + return $iSubscriptionsSent; } /** @@ -117,7 +114,8 @@ class SubscriptionEngine { $sql = $default->db; $aUsers = array(); - if ($sql->query("SELECT user_id from $default->owl_folder_subscriptions_table WHERE folder_id=$iFolderID")) { + if ($sql->query("SELECT user_id FROM " . Subscription::getTableName($iSubscriptionType) . " " . + "WHERE " . Subscription::getIdFieldName($iSubscriptionType) . " = $iExternalID")) { while ($sql->next_record()) { $aUsers[] = & User::get($sql->f("user_id")); } -- libgit2 0.21.4