static function process() { $limit = 100; $offset = 0; $availableHandlers = eZNotificationEventFilter::availableHandlers(); do { $eventList = eZNotificationEvent::fetchUnhandledList(array('offset' => $offset, 'length' => $limit)); foreach ($eventList as $event) { $db = eZDB::instance(); $db->begin(); foreach ($availableHandlers as $handler) { if ($handler === false) { eZDebug::writeError("Notification handler does not exist: {$handlerKey}", __METHOD__); } else { $handler->handle($event); } } $itemCountLeft = eZNotificationCollectionItem::fetchCountForEvent($event->attribute('id')); if ($itemCountLeft == 0) { $event->remove(); } else { $event->setAttribute('status', eZNotificationEvent::STATUS_HANDLED); $event->store(); } $db->commit(); } eZContentObject::clearCache(); } while (count($eventList) == $limit); // If less than limit, we're on the last iteration eZNotificationCollection::removeEmpty(); }
static function removeEmpty() { $db = eZDB::instance(); if ($db->databaseName() == 'oracle') { // fix for compatibility with Oracle versions prior to 9 $query = 'SELECT eznotificationcollection.id FROM eznotificationcollection, eznotificationcollection_item WHERE eznotificationcollection.id = eznotificationcollection_item.collection_id(+) AND eznotificationcollection_item.collection_id IS NULL'; } else { $query = 'SELECT eznotificationcollection.id FROM eznotificationcollection LEFT JOIN eznotificationcollection_item ON eznotificationcollection.id=eznotificationcollection_item.collection_id WHERE eznotificationcollection_item.collection_id IS NULL'; } $idArray = $db->arrayQuery($query); $db->begin(); foreach ($idArray as $id) { eZPersistentObject::removeObject(eZNotificationCollection::definition(), array('id' => $id['id'])); } $db->commit(); }
if ( $clean['collaboration'] ) { $cli->output( "Removing all collaboration elements" ); eZCollaborationItem::cleanup(); } if ( $clean['collectedinformation'] ) { $cli->output( "Removing all collected information" ); eZInformationCollection::cleanup(); } if ( $clean['notification'] ) { $cli->output( "Removing all notifications events" ); eZNotificationEvent::cleanup(); eZNotificationCollection::cleanup(); eZNotificationEventFilter::cleanup(); } if ( $clean['searchstats'] ) { $cli->output( "Removing all search statistics" ); eZSearchLog::removeStatistics(); } $script->shutdown(); ?>
function sendMessage($event, $parameters) { $collections = eZNotificationCollection::fetchListForHandler(self::NOTIFICATION_HANDLER_ID, $event->attribute('id'), self::TRANSPORT); foreach ($collections as $collection) { $items = $collection->attribute('items_to_send'); $addressList = array(); foreach ($items as $item) { $addressList[] = $item->attribute('address'); $item->remove(); } $transport = eZNotificationTransport::instance('ezmail'); $transport->send($addressList, $collection->attribute('data_subject'), $collection->attribute('data_text'), null, $parameters); if ($collection->attribute('item_count') == 0) { $collection->remove(); } } }
function sendMessage($event, $parameters) { $collection = eZNotificationCollection::fetchForHandler(self::NOTIFICATION_HANDLER_ID, $event->attribute('id'), self::TRANSPORT); if (!$collection) { return; } $items = $collection->attribute('items_to_send'); if (!$items) { eZDebugSetting::writeDebug('kernel-notification', "No items to send now"); return; } $addressList = array(); foreach ($items as $item) { $addressList[] = $item->attribute('address'); $item->remove(); } $transport = eZNotificationTransport::instance('ezmail'); $transport->send($addressList, $collection->attribute('data_subject'), $collection->attribute('data_text'), null, $parameters); if ($collection->attribute('item_count') == 0) { $collection->remove(); } }
static function handleCollaborationEvent($event, $item, &$parameters) { $participantList = eZCollaborationItemParticipantLink::fetchParticipantList(array('item_id' => $item->attribute('id'), 'participant_type' => eZCollaborationItemParticipantLink::TYPE_USER, 'as_object' => false)); $userIDList = array(); $participantMap = array(); foreach ($participantList as $participant) { $userIDList[] = $participant['participant_id']; $participantMap[$participant['participant_id']] = $participant; } // $collaborationIdentifier = $event->attribute( 'collaboration_identifier' ); $collaborationIdentifier = $event->attribute('data_text1'); $ruleList = eZCollaborationNotificationRule::fetchItemTypeList($collaborationIdentifier, $userIDList, false); $userIDList = array(); foreach ($ruleList as $rule) { $userIDList[] = $rule['user_id']; } $userList = array(); if (count($userIDList) > 0) { $db = eZDB::instance(); $userIDListText = $db->generateSQLINStatement($userIDList, 'contentobject_id', false, false, 'int'); $userList = $db->arrayQuery("SELECT contentobject_id, email FROM ezuser WHERE {$userIDListText}"); } else { return eZNotificationEventHandler::EVENT_SKIPPED; } $itemHandler = $item->attribute('handler'); $collectionHandling = $itemHandler->notificationCollectionHandling(); $db = eZDB::instance(); $db->begin(); if ($collectionHandling == self::NOTIFICATION_COLLECTION_ONE_FOR_ALL) { $tpl = eZTemplate::factory(); $tpl->resetVariables(); $tpl->setVariable('collaboration_item', $item); $result = $tpl->fetch('design:notification/handler/ezcollaboration/view/plain.tpl'); $subject = $tpl->variable('subject'); if ($tpl->hasVariable('message_id')) { $parameters['message_id'] = $tpl->variable('message_id'); } if ($tpl->hasVariable('references')) { $parameters['references'] = $tpl->variable('references'); } if ($tpl->hasVariable('reply_to')) { $parameters['reply_to'] = $tpl->variable('reply_to'); } if ($tpl->hasVariable('from')) { $parameters['from'] = $tpl->variable('from'); } if ($tpl->hasVariable('content_type')) { $parameters['content_type'] = $tpl->variable('content_type'); } $collection = eZNotificationCollection::create($event->attribute('id'), eZCollaborationNotificationHandler::NOTIFICATION_HANDLER_ID, eZCollaborationNotificationHandler::TRANSPORT); $collection->setAttribute('data_subject', $subject); $collection->setAttribute('data_text', $result); $collection->store(); foreach ($userList as $subscriber) { $collection->addItem($subscriber['email']); } } else { if ($collectionHandling == self::NOTIFICATION_COLLECTION_PER_PARTICIPATION_ROLE) { $userCollection = array(); foreach ($userList as $subscriber) { $contentObjectID = $subscriber['contentobject_id']; $participant = $participantMap[$contentObjectID]; $participantRole = $participant['participant_role']; $userItem = array('participant' => $participant, 'email' => $subscriber['email']); if (!isset($userCollection[$participantRole])) { $userCollection[$participantRole] = array(); } $userCollection[$participantRole][] = $userItem; } $tpl = eZTemplate::factory(); $tpl->resetVariables(); foreach ($userCollection as $participantRole => $collectionItems) { $templateName = $itemHandler->notificationParticipantTemplate($participantRole); if (!$templateName) { $templateName = eZCollaborationItemHandler::notificationParticipantTemplate($participantRole); } $itemInfo = $itemHandler->attribute('info'); $typeIdentifier = $itemInfo['type-identifier']; $tpl->setVariable('collaboration_item', $item); $tpl->setVariable('collaboration_participant_role', $participantRole); $result = $tpl->fetch('design:notification/handler/ezcollaboration/view/' . $typeIdentifier . '/' . $templateName); $subject = $tpl->variable('subject'); if ($tpl->hasVariable('message_id')) { $parameters['message_id'] = $tpl->variable('message_id'); } if ($tpl->hasVariable('references')) { $parameters['references'] = $tpl->variable('references'); } if ($tpl->hasVariable('reply_to')) { $parameters['reply_to'] = $tpl->variable('reply_to'); } if ($tpl->hasVariable('from')) { $parameters['from'] = $tpl->variable('from'); } if ($tpl->hasVariable('content_type')) { $parameters['content_type'] = $tpl->variable('content_type'); } $collection = eZNotificationCollection::create($event->attribute('id'), eZCollaborationNotificationHandler::NOTIFICATION_HANDLER_ID, eZCollaborationNotificationHandler::TRANSPORT); $collection->setAttribute('data_subject', $subject); $collection->setAttribute('data_text', $result); $collection->store(); foreach ($collectionItems as $collectionItem) { $collection->addItem($collectionItem['email']); } } } else { if ($collectionHandling == self::NOTIFICATION_COLLECTION_PER_USER) { } else { eZDebug::writeError("Unknown collaboration notification collection handling type '{$collectionHandling}', skipping notification", __METHOD__); } } } $db->commit(); return eZNotificationEventHandler::EVENT_HANDLED; }