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;
 }