.
*
* You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
* California 94120-7775, or email info@knowledgetree.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* KnowledgeTree" logo and retain the original copyright notice. If the display of the
* logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
* must display the words "Powered by KnowledgeTree" and retain the original
* copyright notice.
* Contributor( s): ______________________________________
*
*
* -------------------------------------------------------------------------
*
* Subscription notification type.
*
* To use this, instantiate a SubscriptionEvent, and call the
* appropriate "event" method.
*
*/
require_once(KT_LIB_DIR . "/database/dbutil.inc");
require_once(KT_LIB_DIR . "/subscriptions/Subscription.inc");
require_once(KT_LIB_DIR . "/users/User.inc");
require_once(KT_LIB_DIR . "/dashboard/Notification.inc.php");
require_once(KT_LIB_DIR . "/alert/delivery/EmailAlert.inc");
require_once(KT_LIB_DIR . "/templating/templating.inc.php");
class SubscriptionEvent {
var $eventTypes = array(
"AddFolder",
"RemoveSubscribedFolder",
"RemoveChildFolder",
"AddDocument",
"RemoveSubscribedDocument",
"RemoveChildDocument",
"ModifyDocument",
"CheckInDocument",
"CheckOutDocument",
"MovedDocument",
"MovedDocument2",
"CopiedDocument",
"CopiedDocument2",
"ArchivedDocument",
"RestoredArchivedDocument",
"DownloadDocument",
);
var $subscriptionTypes = array(
"Document" => 1,
"Folder" => 2,
);
function &subTypes($sType) {
$subscriptionTypes = array(
"Document" => 1,
"Folder" => 2,
);
return KTUtil::arrayGet($subscriptionTypes, $sType, null);
}
var $alertedUsers = array(); // per-instance (e.g. per-event) list of users who were contacted.
var $_parameters = array(); // internal storage for
var $child = -1; // the child object-id (e.g. which initiated the event: document OR folder)
var $parent = -1; // the folder-id of the parent
// FIXME stubs.
/* Each of these functions handles appropriate propogation (e.g. both
* folder and document subscription) without calling secondary functions.
* Every attempt is made to be as explicit as possible.
*/
/*
* Notification of bulk upload
* Author : Jarrett Jordaan
* Date : 27/04/09
*
* @params : KTDocumentUtil $oDocObjects
* KTFolderUtil $oParentFolder
*/
function notifyBulkDocumentAction($oDocObjects, $eventType, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// TODO Better way to check if this is a folder object
if (is_object($oParentFolder)) {
$parentId = $oParentFolder->getId();
$aUsers = $this->_getSubscribers($parentId, $this->subscriptionTypes["Folder"]);
$this->bulkNotification($aUsers, $eventType, $oDocObjects, $parentId);
}
}
/*
* Bulk upload email notification handler
* Author : Jarrett Jordaan
* Date : 27/04/09
*
* @params : User $aUsers
* string $eventType
* KTDocumentUtil $oDocObjects
* int $parentId
*/
function bulkNotification($aUsers, $eventType, $oDocObjects, $parentId) {
$content = new SubscriptionContent(); // needed for i18n
$locationName = Folder::generateFullFolderPath($parentId);
$userId = $_SESSION['userID'];
$oUser = & User::get($userId);
$oUserName = $oUser->getName();
foreach ($aUsers as $oSubscriber) {
$userNotifications = array();
$aNotificationOptions = array();
$userSubscriberId = $oSubscriber->getID();
$emailAddress = $oSubscriber->getEmail();
// Email type details
$actionTypeEmail = $this->actionTypeEmail($eventType);
// Better subject header with just the modified folder location
$eSubject = "Subscription Notification: Bulk {$actionTypeEmail['message']}";
// now the email content.
$eContent .= "You are receiving this notification because you are subscribed to the \"$locationName\"
";
$eContent .= "Your colleague, {$oUser->getName()}, has performed a Bulk {$actionTypeEmail['type']} in the \"$locationName\" folder.
";
// REMOVE: debugger
global $default;
// Get first document/folders details into a notification
$oNotification = false;
foreach($oDocObjects as $oDocObject) {
$targetName = $oDocObject->getName();
$objectId = $oDocObject->getId();
$aNotificationOptions['target_user'] = $userSubscriberId;
$aNotificationOptions['actor_id'] = $userId;
$aNotificationOptions['target_name'] = $targetName;
$aNotificationOptions['location_name'] = $locationName;
$aNotificationOptions['object_id'] = $objectId;
$aNotificationOptions['event_type'] = $eventType;
$oNotification =& KTSubscriptionNotification::generateSubscriptionNotification($aNotificationOptions);
break;
}
$eContent .= $content->getEmailAlertContent($oNotification, $parentId);
$oEmail = new EmailAlert($emailAddress, $eSubject, $eContent);
$oEmail->send();
}
}
function actionTypeEmail($eventType) {
switch($eventType){
case 'AddFolder':
return array("message"=>"Folders/Documents Added", "type"=>"Add");
break;
case 'RemoveSubscribedFolder':
return array("message"=>"Removed Subscribed Folders/Documents", "type"=>"Remove");
break;
case 'RemoveChildFolder':
return array("message"=>"Removed Folders/Documents", "type"=>"Remove");
break;
case 'AddDocument':
return array("message"=>"Added Folders/Documents", "type"=>"Add");
break;
case 'RemoveSubscribedDocument':
return array("message"=>"Removed Subscribed Folders/Documents", "type"=>"Remove");
break;
case 'RemoveChildDocument':
return array("message"=>"Removed Folders/Documents", "type"=>"Remove");
break;
case 'ModifyDocument':
return array("message"=>"Modified Folders/Documents", "type"=>"Modify");
break;
case 'CheckInDocument':
return array("message"=>"Checked In Documents", "type"=>"Check In");
break;
case 'CheckOutDocument':
return array("message"=>"Checked Out Documents", "type"=>"Check Out");
break;
case 'MovedDocument':
return array("message"=>"Moved Documents/Folders", "type"=>"Move");
break;
case 'CopiedDocument':
return array("message"=>"Copied Folders/Documents", "type"=>"Copy");
break;
case 'ArchivedDocument':
return array("message"=>"Archived Folders/Documents", "type"=>"Archive");
break;
case 'RestoreArchivedDocument':
return array("message"=>"Restored Archived Documents", "type"=>"Archive Restore");
break;
case 'DownloadDocument':
return array("message"=>"Downloaded Folders/Documents", "type"=>"Download");
break;
default :
return array("message"=>"Unknown Operations", "type"=>"Unknown");
break;
}
}
// alerts users who are subscribed to $iParentFolderId.
function AddFolder($oAddedFolder, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// only useful for folder subscriptions.
$aUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'AddFolder', $oAddedFolder->getName(), $oAddedFolder->getId(), $parentId);
}
function AddDocument ($oAddedDocument, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// two parts to this:
$aUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'AddDocument', $oAddedDocument->getName(), $oAddedDocument->getId(), $parentId);
}
function RemoveFolder($oRemovedFolder, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// two cases to consider here:
// - notify people who are subscribed to the parent folder.
// - notify and unsubscribe people who are subscribed to the actual folder.
// we need to start with the latter, so we don't "lose" any.
$aUsers = $this->_getSubscribers($oRemovedFolder->getId(), $this->subscriptionTypes["Folder"]);
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'] = $oRemovedFolder->getName();
$aNotificationOptions['location_name'] = Folder::generateFullFolderPath($oParentFolder->getId());
$aNotificationOptions['object_id'] = $oParentFolder->getId(); // parent folder_id, since the removed one is removed.
$aNotificationOptions['event_type'] = "RemoveSubscribedFolder";
$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();
}
// now grab each oSubscribers oSubscription, and delete.
$oSubscription = Subscription::getByIds($oSubscriber->getId(), $oRemovedFolder->getId(), $this->subscriptionTypes["Folder"]);
if (!(PEAR::isError($oSubscription) || ($oSubscription == false))) {
$oSubscription->delete();
}
}
// now handle (for those who haven't been alerted) users watching the folder.
$aUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'RemoveChildFolder', $oRemovedFolder->getName(), $oParentFolder->getId(), $parentId);
}
function RemoveDocument($oRemovedDocument, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// two cases to consider here:
// - notify people who are subscribed to the parent folder.
// - notify and unsubscribe people who are subscribed to the actual folder.
// we need to start with the latter, so we don't "lose" any.
$aUsers = $this->_getSubscribers($oRemovedDocument->getId(), $this->subscriptionTypes["Document"]);
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'] = $oRemovedDocument->getName();
$aNotificationOptions['location_name'] = Folder::generateFullFolderPath($oParentFolder->getId());
$aNotificationOptions['object_id'] = $oParentFolder->getId(); // parent folder_id, since the removed one is removed.
$aNotificationOptions['event_type'] = "RemoveSubscribedDocument";
$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();
}
// now grab each oSubscribers oSubscription, and delete.
$oSubscription = Subscription::getByIds($oSubscriber->getId(), $oRemovedDocument->getId(), $this->subscriptionTypes["Document"]);
if (!(PEAR::isError($oSubscription) || ($oSubscription == false))) {
$oSubscription->delete();
}
}
// now handle (for those who haven't been alerted) users watching the folder.
$aUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'RemoveChildDocument', $oRemovedDocument->getName(), $oParentFolder->getId(), $parentId);
}
function ModifyDocument($oModifiedDocument, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// OK: two actions: document registrants, folder registrants.
$aDocUsers = $this->_getSubscribers($oModifiedDocument->getId(), $this->subscriptionTypes["Document"]);
$aFolderUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$aUsers = array_merge($aDocUsers, $aFolderUsers);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'ModifyDocument', $oModifiedDocument->getName(), $oModifiedDocument->getId(), $parentId);
}
function DiscussDocument($oModifiedDocument, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// OK: two actions: document registrants, folder registrants.
$aDocUsers = $this->_getSubscribers($oModifiedDocument->getId(), $this->subscriptionTypes["Document"]);
$aFolderUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$aUsers = array_merge($aDocUsers, $aFolderUsers);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'DiscussDocument', $oModifiedDocument->getName(), $oModifiedDocument->getId(), $parentId);
}
function CheckInDocument($oModifiedDocument, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// OK: two actions: document registrants, folder registrants.
$aDocUsers = $this->_getSubscribers($oModifiedDocument->getId(), $this->subscriptionTypes["Document"]);
$aFolderUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$aUsers = array_merge($aDocUsers, $aFolderUsers);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'CheckInDocument', $oModifiedDocument->getName(), $oModifiedDocument->getId(), $parentId);
}
function CheckOutDocument($oModifiedDocument, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// OK: two actions: document registrants, folder registrants.
$aDocUsers = $this->_getSubscribers($oModifiedDocument->getId(), $this->subscriptionTypes["Document"]);
$aFolderUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$aUsers = array_merge($aDocUsers, $aFolderUsers);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'CheckOutDocument', $oModifiedDocument->getName(), $oModifiedDocument->getId(), $parentId);
}
function MoveDocument($oMovedDocument, $oToFolder, $oFromFolder, $moveOrCopy = "MovedDocument") {
$parentId = $oToFolder->getId();
// Document registrants
$aDocUsers = $this->_getSubscribers($oMovedDocument->getId(), $this->subscriptionTypes["Document"]);
$this->sendNotification($aDocUsers, $moveOrCopy.'2', $oMovedDocument->getName(), $oMovedDocument->getId(), $parentId);
// Folder registrants
$aFromUsers = $this->_getSubscribers($oFromFolder->getId(), $this->subscriptionTypes["Folder"]);
$aFolderUsers = $this->_getSubscribers($oToFolder->getId(), $this->subscriptionTypes["Folder"]);
$aUsers = array_merge($aFromUsers, $aFolderUsers);
$this->sendNotification($aUsers, $moveOrCopy, $oMovedDocument->getName(), $oToFolder->getId(), $parentId);
}
function ArchivedDocument($oModifiedDocument, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// OK: two actions: document registrants, folder registrants.
$aDocUsers = $this->_getSubscribers($oModifiedDocument->getId(), $this->subscriptionTypes["Document"]);
$aFolderUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$aUsers = array_merge($aDocUsers, $aFolderUsers);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'ArchivedDocument', $oModifiedDocument->getName(), $oModifiedDocument->getId(), $parentId);
}
function RestoreDocument($oModifiedDocument, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// OK: two actions: document registrants, folder registrants.
$aDocUsers = $this->_getSubscribers($oModifiedDocument->getId(), $this->subscriptionTypes["Document"]);
$aFolderUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$aUsers = array_merge($aDocUsers, $aFolderUsers);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'RestoreArchivedDocument', $oModifiedDocument->getName(), $oModifiedDocument->getId(), $parentId);
}
function DownloadDocument($oDocument, $oParentFolder) {
$content = new SubscriptionContent(); // needed for i18n
// OK: two actions: document registrants, folder registrants.
$aDocUsers = $this->_getSubscribers($oDocument->getId(), $this->subscriptionTypes["Document"]);
$aFolderUsers = $this->_getSubscribers($oParentFolder->getId(), $this->subscriptionTypes["Folder"]);
$aUsers = array_merge($aDocUsers, $aFolderUsers);
$parentId = $oParentFolder->getId();
$this->sendNotification($aUsers, 'DownloadDocument', $oDocument->getName(), $oDocument->getId(), $parentId);
}
function sendNotification($aUsers, $eventType, $targetName, $objectId, $parentId) {
$content = new SubscriptionContent(); // needed for i18n
//$aUsers = $this->_getSubscribers($oDocument->getId(), $this->subscriptionTypes["Document"]);
$locationName = Folder::generateFullFolderPath($parentId);
$userId = $_SESSION['userID'];
foreach ($aUsers as $oSubscriber) {
$emailAddress = $oSubscriber->getEmail();
if ($oSubscriber->getEmailNotification() && !empty($emailAddress)) {
// notification object first.
$aNotificationOptions = array();
$aNotificationOptions['target_user'] = $oSubscriber->getID();
$aNotificationOptions['actor_id'] = $userId;
$aNotificationOptions['target_name'] = $targetName;
$aNotificationOptions['location_name'] = $locationName;
$aNotificationOptions['object_id'] = $objectId;
$aNotificationOptions['event_type'] = $eventType;
$oNotification =& KTSubscriptionNotification::generateSubscriptionNotification($aNotificationOptions);
// now the email content.
$emailContent = $content->getEmailAlertContent($oNotification);
$emailSubject = $content->getEmailAlertSubject($oNotification);
$oEmail = new EmailAlert($emailAddress, $emailSubject, $emailContent);
$oEmail->send();
}
}
}
// small helper function to assist in identifying the numeric id.
function _getKeyForType($sEventType) {
foreach ($this->eventTypes as $key => $val) {
if ($val == $sSubType) { return $key; }
}
return -1;
}
// helper function to get & adjust the $alertedUsers
// note that this has side-effects: $this->alertedUsers is a merged version
// after this has been called.
function _pruneAlertedUsers($aUserIds) {
$returnArray = array_diff($aUserIds, $this->alertedUsers);
$this->alertedUsers = kt_array_merge($returnArray, $this->alertedUsers); // now contains all users who will have been alerted.
return $returnArray;
}
// gets subscribers to object, with appropriate type (e.g. folder or document).
// need the second part because docs and folders have separate ids.
// based on the old SubscriptionEngine::retrieveSubscribers.
function _getSubscribers($iObjectId, $iSubType) {
global $default; // for the logging.
if (KTLOG_CACHE) $default->log->debug("_getSubscribers(id=$iObjectId, type=$iSubType); table=" .Subscription::getTableName($iSubType). "; id=" .Subscription::getIdFieldName($iSubType));
$aUsers = array();
$aNewUsers = array();
$aSubUsers = array();
$table = Subscription::getTableName($iSubType);
$field = Subscription::getIdFieldName($iSubType);
// If we're dealing with a folder then get those user who are subscribed to one of the parent folders and want notifications on sub folders
if($iSubType == $this->subscriptionTypes["Folder"] && $iObjectId != 1){
// Get parent folder ids
$query= "SELECT parent_folder_ids FROM folders WHERE id = {$iObjectId}";
$aParentIds = DBUtil::getResultArrayKey($query, 'parent_folder_ids');
$parentIds = $aParentIds[0];
// Get those users who have checked the subfolders option on the above folders
$query = "SELECT user_id FROM {$table} WHERE {$field} IN ({$parentIds}) AND with_subfolders = 1";
$aSubUsers = DBUtil::getResultArrayKey($query, 'user_id');
}
$sQuery = "SELECT user_id FROM {$table} WHERE {$field} = ?";
$aParams = array($iObjectId);
$aNewUsers = DBUtil::getResultArrayKey(array($sQuery, $aParams), 'user_id');
// Add any users from parent folders
$aNewUsers = array_merge($aNewUsers, $aSubUsers);
$aNewUsers = array_unique($aNewUsers);
// Remove alerted users
$aNewUsers = $this->_pruneAlertedUsers($aNewUsers);
$iCurrentUserId = $_SESSION['userID'];
// notionally less efficient than the old code. if its a big issue, can easily
// be refactored.
foreach ($aNewUsers as $iUserId) {
// the user doesn't need to be notified for his/her own modifications
if($iUserId == $iCurrentUserId){
continue;
}
$oUser = & User::get($iUserId);
// do a quick prune here, for performance/maintenance reasons.
if (PEAR::isError($oUser) || ($oUser == false)) {
$sQuery = "DELETE FROM " . Subscription::getTableName($iSubType) . " WHERE user_id = ?";
$aParams = array($iUserId);
DBUtil::runQuery(array($sQuery, $sParams));
$default->log->error("SubscriptionEvent::fireSubscription error removing subscription for user id=$iUserId");
} else {
$aUsers[] = $oUser;
}
}
if (KTLOG_CACHE) $default->log->debug('retrieveSubscribers found count=' . count($aUsers));
return $aUsers;
}
}
// interesting: how do we want to generate email & notification content?
// first suggestion:
// - generate this content here.
// - alternatively, generate the content inside the notification environment (for part 2).
/* very simple class to handle and hold the various and sundry event types content for emails. */
class SubscriptionContent {
// have to be instantiated, or the i18n can't work.
function SubscriptionContent() {
$this->_eventTypeNames = array(
"AddFolder" => _kt('Folder added'),
"RemoveSubscribedFolder" => _kt('Folder removed'), // nothing. your subscription is now gone.
"RemoveChildFolder" => _kt('Folder removed'),
"AddDocument" => _kt('Document added'),
"RemoveSubscribedDocument" => _kt('Document removed'), // nothing. your subscription is now gone.
"RemoveChildDocument" => _kt('Document removed'),
"ModifyDocument" => _kt('Document modified'),
"CheckInDocument" => _kt('Document checked in'),
"CheckOutDocument" => _kt('Document checked out'),
"MovedDocument" => _kt('Document moved'),
"MovedDocument2" => _kt('Document moved'),
"CopiedDocument" => _kt('Document copied'),
"CopiedDocument2" => _kt('Document copied'),
"ArchivedDocument" => _kt('Document archived'), // can go through and request un-archival (?)
"DownloadDocument" => _kt('Document downloaded'),
"RestoredArchivedDocument" => _kt('Document restored'),
"DiscussDocument" => _kt('Document Discussions updated'),
);
}
/**
* This function generates the email that will be sent for subscription notifications
*
* @author KnowledgeTree Team
* @access public
* @param object $oKTNotification: The notification object
* @return string $str: The html string that will be sent via email
*/
function getEmailAlertContent($oKTNotification, $bulk_action = 0) {
if($bulk_action == 0) $bulk_action = false;
// set up logo and title
$rootUrl = KTUtil::kt_url();
$info = $this->_getSubscriptionData($oKTNotification);
// set up email text
$addFolderText = _kt('The folder "').$info['object_name']._kt('" was added');
$removeSubscribedFolderText = _kt('The folder "').$info['object_name']._kt('" to which you were subscribed, has been removed');
$removeChildFolderText = _kt('The folder "').$info['object_name']._kt('" has been removed');
$addDocumentText = _kt('The document "').$info['object_name']._kt('" was added');
$removeSubscribedDocumentText = _kt('The document "').$info['object_name']._kt('" to which you were subscribed, has been removed');
$removeChildDocumentText = _kt('The document "').$info['object_name']._kt('" has been removed');
$modifyDocumentText = _kt('The document "').$info['object_name']._kt('" has been changed');
$checkInDocumentText = _kt('The document "').$info['object_name']._kt('" has been checked in');
$checkOutDocumentText = _kt('The document "').$info['object_name']._kt('" has been checked out');
$moveDocumentText = _kt('The document "').$info['object_name']._kt('" has been moved');
$copiedDocumentText = _kt('The document "').$info['object_name']._kt('" has been copied');
$archivedDocumentText = _kt('The document "').$info['object_name']._kt('"');
$restoreArchivedDocumentText = _kt('The document "').$info['object_name']._kt('" has been restored by an administrator');
$downloadDocumentText = _kt('The document "').$info['object_name']._kt('"');
$documentAlertText = _kt('An alert on the document "').$info['object_name']._kt('" has been added or modified');
if($info['location_name'] !== NULL && !$bulk_action){
$addFolderText .= _kt(' to "').$info['location_name']._kt('"');
$removeChildFolderText .= _kt(' from the folder "').$info['location_name']._kt('"');
$addDocumentText .= _kt(' to "').$info['location_name']._kt('"');
$removeChildDocumentText .= _kt(' from the folder "').$info['location_name']._kt('" to which you are subscribed');
$modifyDocumentText .= _kt(' in the folder "').$info['location_name']._kt('"');
$checkInDocumentText .= _kt(', in the folder "').$info['location_name']._kt('"');
$checkOutDocumentText .= _kt(', from the folder "').$info['location_name']._kt('"');
$moveDocumentText .= _kt(' to the folder "').$info['location_name']._kt('"');
$copiedDocumentText .= _kt(' to the folder "').$info['location_name']._kt('"');
$archivedDocumentText .= _kt(' in the folder "').$info['location_name']._kt('" has been archived');
$downloadDocumentText .= _kt(' in the folder "').$info['location_name']._kt('" has been downloaded');
$documentAlertText .= _kt(' in the folder "').$info['location_name']._kt('"');
}
if($bulk_action && $info['event_type']!="RemoveSubscribedFolder") {
$browse = "$rootUrl/browse.php?fFolderId=$bulk_action";
$subFolder = ''._kt('View Subscription Folder ').'';
}
// set up links
switch($info['event_type']){
case 'AddFolder':
$text = $addFolderText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
if(!$bulk_action) $links = ''._kt('View New Folder').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'RemoveSubscribedFolder':
$text = $removeSubscribedFolderText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links = ''._kt('Clear Alert').'';
break;
case 'RemoveChildFolder':
$text = $removeChildFolderText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
if(!$bulk_action) $links = ''._kt('View Folder').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'AddDocument':
$text = $addDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
if(!$bulk_action) $links = ''._kt('View Document').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'RemoveSubscribedDocument':
$text = $removeSubscribedDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links = ''._kt('Clear Alert').'';
break;
case 'RemoveChildDocument':
$text = $removeChildDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links = ''._kt('Clear Alert').'';
break;
case 'ModifyDocument':
$text = $modifyDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
if(!$bulk_action) $links = ''._kt('View Document').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'CheckInDocument':
$text = $checkInDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
$links = ''._kt('View Document').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'CheckOutDocument':
$text = $checkOutDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
if(!$bulk_action) $links = ''._kt('View Document').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'MovedDocument':
case 'MovedDocument2':
$text = $modifyDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
if(!$bulk_action) $links = ''._kt('View New Location').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'CopiedDocument':
case 'CopiedDocument2':
$text = $copiedDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
if(!$bulk_action) $links = ''._kt('View Document').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'ArchivedDocument':
$text = $archivedDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links = ''._kt('Clear Alert').'';
break;
case 'RestoreArchivedDocument':
$text = $restoreArchivedDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
if(!$bulk_action) $links = ''._kt('View Document').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'DownloadDocument':
$text = $downloadDocumentText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
if(!$bulk_action) $links = ''._kt('View Document').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
break;
case 'ModifyDocumentAlert':
$text = $documentAlertText;
$url = $rootUrl.'/notify.php?id='.$info['notify_id'];
$links = ''._kt('View Document').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=clear';
$links .= ' | '._kt('Clear Alert').'';
$url = $rootUrl.'/notify.php?id='.$info['notify_id'].'¬ify_action=viewall';
$links .= ' | '._kt('View all alerts on this document').'';
}
if($info['actor_name'] !== NULL && $info['event_type'] != 'RestoredArchivedDocument'){
$text .= _kt(', by ').$info['actor_name'];
}
// we can re-use the normal template.
// however, we need to wrap it - no need for a second template here.
//$str = '