diff --git a/lib/dashboard/Notification.inc.php b/lib/dashboard/Notification.inc.php index 574e21b..0707007 100644 --- a/lib/dashboard/Notification.inc.php +++ b/lib/dashboard/Notification.inc.php @@ -189,7 +189,9 @@ class KTSubscriptionNotification extends KTNotificationHandler { "CheckOutDocument" => 'document', "MovedDocument" => 'document', "ArchivedDocument" => 'document', // can go through and request un-archival (?) - "RestoredArchivedDocument" => 'document'); + "RestoredArchivedDocument" => 'document', + "DiscussDocument" => 'document', + ); function KTSubscriptionNotification() { $this->_eventTypeNames = array( @@ -204,7 +206,8 @@ class KTSubscriptionNotification extends KTNotificationHandler { "CheckOutDocument" => _kt('Document checked out'), "MovedDocument" => _kt('Document moved'), "ArchivedDocument" => _kt('Document archived'), // can go through and request un-archival (?) - "RestoredArchivedDocument" => _kt('Document restored') + "RestoredArchivedDocument" => _kt('Document restored'), + "DiscussDocument" => _kt('Document Discussions updated'), ); //parent::KTNotificationHandler(); } diff --git a/lib/subscriptions/subscriptions.inc.php b/lib/subscriptions/subscriptions.inc.php index 1bb70bc..d30faaf 100644 --- a/lib/subscriptions/subscriptions.inc.php +++ b/lib/subscriptions/subscriptions.inc.php @@ -317,6 +317,59 @@ class SubscriptionEvent { } } } + + function DiscussDocument($oModifiedDocument, $oParentFolder) { + $content = new SubscriptionContent(); // needed for i18n + // OK: two actions: document registrants, folder registrants. + $aUsers = $this->_getSubscribers($oModifiedDocument->getId(), $this->subscriptionTypes["Document"]); + $aUsers = $this->_pruneAlertedUsers($aUsers); // setup the alerted users. _might_ be a singleton. + foreach ($aUsers as $oSubscriber) { + + // notification object first. + $aNotificationOptions = array(); + $aNotificationOptions['target_user'] = $oSubscriber->getID(); + $aNotificationOptions['actor_id'] = KTUtil::arrayGet($_SESSION,"userID", null); // _won't_ be null. + $aNotificationOptions['target_name'] = $oModifiedDocument->getName(); + $aNotificationOptions['location_name'] = Folder::generateFullFolderPath($oParentFolder->getId()); + $aNotificationOptions['object_id'] = $oModifiedDocument->getId(); // parent folder_id, in this case. + $aNotificationOptions['event_type'] = "DiscussDocument"; + $oNotification =& KTSubscriptionNotification::generateSubscriptionNotification($aNotificationOptions); + + // now the email content. + // FIXME this needs to be handled entirely within notifications from now on. + if ($oSubscriber->getEmailNotification() && (strlen($oSubscriber->getEmail()) > 0)) { + $emailContent = $content->getEmailAlertContent($oNotification); + $emailSubject = $content->getEmailAlertSubject($oNotification); + $oEmail = new EmailAlert($oSubscriber->getEmail(), $emailSubject, $emailContent); + $oEmail->send(); + } + } + + $aUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]); + $aUsers = $this->_pruneAlertedUsers($aUsers); // setup the alerted users. _might_ be a singleton. + foreach ($aUsers as $oSubscriber) { + + // notification object first. + $aNotificationOptions = array(); + $aNotificationOptions['target_user'] = $oSubscriber->getID(); + $aNotificationOptions['actor_id'] = KTUtil::arrayGet($_SESSION,"userID", null); // _won't_ be null. + $aNotificationOptions['target_name'] = $oModifiedDocument->getName(); + $aNotificationOptions['location_name'] = Folder::generateFullFolderPath($oParentFolder->getId()); + $aNotificationOptions['object_id'] = $oModifiedDocument->getId(); // parent folder_id, in this case. + $aNotificationOptions['event_type'] = "DiscussDocument"; + $oNotification =& KTSubscriptionNotification::generateSubscriptionNotification($aNotificationOptions); + + // now the email content. + // FIXME this needs to be handled entirely within notifications from now on. + if ($oSubscriber->getEmailNotification() && (strlen($oSubscriber->getEmail()) > 0)) { + $emailContent = $content->getEmailAlertContent($oNotification); + $emailSubject = $content->getEmailAlertSubject($oNotification); + $oEmail = new EmailAlert($oSubscriber->getEmail(), $emailSubject, $emailContent); + $oEmail->send(); + } + } + } + function CheckInDocument($oModifiedDocument, $oParentFolder) { $content = new SubscriptionContent(); // needed for i18n // OK: two actions: document registrants, folder registrants. @@ -677,7 +730,8 @@ class SubscriptionContent { "CheckOutDocument" => _kt('Document checked out'), "MovedDocument" => _kt('Document moved'), "ArchivedDocument" => _kt('Document archived'), // can go through and request un-archival (?) - "RestoredArchivedDocument" => _kt('Document restored') + "RestoredArchivedDocument" => _kt('Document restored'), + "DiscussDocument" => _kt('Document Discussions updated'), ); } @@ -729,7 +783,8 @@ class SubscriptionContent { "CheckOutDocument" => 'document', "MovedDocument" => 'document', "ArchivedDocument" => 'document', // can go through and request un-archival (?) - "RestoredArchivedDocument" => 'document'); + "RestoredArchivedDocument" => 'document', + "DiscussDocument" => 'document'); diff --git a/plugins/ktstandard/KTDiscussion.php b/plugins/ktstandard/KTDiscussion.php index 79e9f4e..8a64c80 100644 --- a/plugins/ktstandard/KTDiscussion.php +++ b/plugins/ktstandard/KTDiscussion.php @@ -191,6 +191,22 @@ class KTDocumentDiscussionAction extends KTDocumentAction { $res = $oThread->update(); $aErrorOptions['message'] = _kt("There was an error updating the thread with the new comment"); $this->oValidator->notError($res, $aErrorOptions); + + $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); + $aTriggers = $oKTTriggerRegistry->getTriggers('discussion', 'postValidate'); + foreach ($aTriggers as $aTrigger) { + $sTrigger = $aTrigger[0]; + $oTrigger = new $sTrigger; + $aInfo = array( + "document" => $this->oDocument, + "comment" => $oComment, + ); + $oTrigger->setInfo($aInfo); + $ret = $oTrigger->postValidate(); + if (PEAR::isError($ret)) { + $this->oValidator->notError($res, $aErrorOptions); + } + } // Thread and comment created correctly, commit to database $this->commitTransaction(); @@ -303,7 +319,21 @@ class KTDocumentDiscussionAction extends KTDocumentAction { $aErrorOptions['message'] = _kt("There was an error updating the thread with the new comment"); $this->oValidator->notError($res, $aErrorOptions); - + $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); + $aTriggers = $oKTTriggerRegistry->getTriggers('discussion', 'postValidate'); + foreach ($aTriggers as $aTrigger) { + $sTrigger = $aTrigger[0]; + $oTrigger = new $sTrigger; + $aInfo = array( + "document" => $this->oDocument, + "comment" => $oComment, + ); + $oTrigger->setInfo($aInfo); + $ret = $oTrigger->postValidate(); + if (PEAR::isError($ret)) { + $this->oValidator->notError($res, $aErrorOptions); + } + } // Thread and comment created correctly, commit to database $this->commitTransaction(); diff --git a/plugins/ktstandard/KTSubscriptions.php b/plugins/ktstandard/KTSubscriptions.php index 1075ade..3ac41b9 100644 --- a/plugins/ktstandard/KTSubscriptions.php +++ b/plugins/ktstandard/KTSubscriptions.php @@ -63,6 +63,8 @@ class KTSubscriptionPlugin extends KTPlugin { 'ktstandard.triggers.subscription.moveDocument'); $this->registerTrigger('archive', 'postValidate', 'KTArchiveSubscriptionTrigger', 'ktstandard.triggers.subscription.archive'); + $this->registerTrigger('discussion', 'postValidate', 'KTDiscussionSubscriptionTrigger', + 'ktstandard.triggers.subscription.archive'); $this->registerAction('foldersubscriptionaction', 'KTFolderSubscriptionAction', 'ktstandard.subscription.foldersubscription'); $this->registerAction('foldersubscriptionaction', 'KTFolderUnsubscriptionAction', @@ -299,6 +301,24 @@ class KTArchiveSubscriptionTrigger { } // }}} + + +class KTDiscussionSubscriptionTrigger { + var $aInfo = null; + function setInfo(&$aInfo) { + $this->aInfo =& $aInfo; + } + + function postValidate() { + $oDocument =& $this->aInfo["document"]; + $oSubscriptionEvent = new SubscriptionEvent(); + $oFolder = Folder::get($oDocument->getFolderID()); + + $oSubscriptionEvent->DiscussDocument($oDocument, $oFolder); + } +} +// }}} + // {{{ KTFolderSubscriptionAction class KTFolderSubscriptionAction extends KTFolderAction { var $sName = 'ktstandard.subscription.foldersubscription'; diff --git a/templates/kt3/notifications/subscriptions.DiscussDocument.smarty b/templates/kt3/notifications/subscriptions.DiscussDocument.smarty new file mode 100644 index 0000000..3d56981 --- /dev/null +++ b/templates/kt3/notifications/subscriptions.DiscussDocument.smarty @@ -0,0 +1,17 @@ +
{$info.title}
+
+ + {if ($info.has_actor)} + {$info.actor_name} has added to the discussion around document "{$info.object_name}". + {else} + The discussion around document "{$info.object_name}" has been updated. + {/if} +
+ {if !$is_broken} + {i18n}View Document{/i18n} + {else} + {i18n}Document is no longer available{/i18n} + {/if} + | {i18n}Clear Alert{/i18n} +
+