Commit b6c567c1a0f6e3f1974d03541b5ab971f800868c

Authored by nbm
1 parent 079c63e6

Make subscriptions recurse down folders.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3783 c91229c3-7414-0410-bfa2-8a42b809f60b
lib/subscriptions/SubscriptionEngine.inc
... ... @@ -64,7 +64,18 @@ class SubscriptionEngine {
64 64 // for each subscriber, construct an address based on their notification preferences
65 65 for ($i=0; $i<count($aSubscribers); $i++) {
66 66 // lookup the subscription
67   - $oSubscription = & Subscription::getByIDs($aSubscribers[$i]->getID(), $iExternalID, $iSubscriptionType);
  67 + if ($iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) {
  68 + $oSubscription = & Subscription::getByIDs($aSubscribers[$i]->getID(), $oValues['folderID'], $iSubscriptionType);
  69 + if (empty($oSubscription) || PEAR::isError($oSubscription)) {
  70 + $oSubscription =& new Subscription($aSubscribers[$i]->getID(), $aValues["folderID"], $iSubscriptionType);
  71 + $res = $oSubscription->create();
  72 + if (empty($res) || PEAR::isError($res)) {
  73 + continue;
  74 + }
  75 + }
  76 + } else {
  77 + $oSubscription = & Subscription::getByIDs($aSubscribers[$i]->getID(), $iExternalID, $iSubscriptionType);
  78 + }
68 79  
69 80 // update the alerted status
70 81 $oSubscription->setIsAlerted(true);
... ... @@ -109,6 +120,21 @@ class SubscriptionEngine {
109 120 $default->log->error("SubscriptionEngine::fireSubscription could not update subscription- db error?");
110 121 }
111 122 }
  123 +
  124 + if ($iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) {
  125 + $oFolder =& Folder::get($iExternalID);
  126 + if ($oFolder && !PEAR::isError($oFolder)) {
  127 + $iThisSubscriptionsSent = SubscriptionEngine::fireSubscription($oFolder->getParentId(),
  128 + ($iSubscriptionAlertType == SubscriptionConstants::subscriptionAlertType("RemoveSubscribedDocument") ?
  129 + SubscriptionConstants::subscriptionAlertType("RemoveChildDocument") :
  130 + $iSubscriptionAlertType),
  131 + SubscriptionConstants::subscriptionType("FolderSubscription"),
  132 + $aValues);
  133 + $default->log->info("SubscriptionEngine::fireSubscription fired folder subscribers, count=$iThisSubscriptionsSent");
  134 + $iSubscriptionsSent += $iThisSubscriptionsSent;
  135 + }
  136 + }
  137 +
112 138 // return the number of processed subscriptions
113 139 return $iSubscriptionsSent;
114 140 }
... ... @@ -122,6 +148,10 @@ class SubscriptionEngine {
122 148 */
123 149 function retrieveSubscribers($iExternalID, $iSubscriptionType) {
124 150 global $default;
  151 + global $aAlreadySent;
  152 + if (!isset($aAlreadySent)) {
  153 + $aAlreadySent = array();
  154 + }
125 155  
126 156 $sql = $default->db;
127 157 $aUsers = array();
... ... @@ -131,6 +161,10 @@ class SubscriptionEngine {
131 161 if ($sql->query(array($sQuery, $aParams))) {
132 162 while ($sql->next_record()) {
133 163 $iUserID = $sql->f("user_id");
  164 + if (in_array($iUserID, $aAlreadySent)) {
  165 + continue;
  166 + }
  167 + $aAlreadySent[] = $iUserID;
134 168 $oUser = & User::get($iUserID );
135 169 if ($oUser) {
136 170 $aUsers[] = $oUser;
... ...