static function addItem($groupID, $collaborationID, $userID)
 {
     $groupLink = eZCollaborationItemGroupLink::create($collaborationID, $groupID, $userID);
     $db = eZDB::instance();
     $db->begin();
     $groupLink->store();
     $itemStatus = eZCollaborationItemStatus::create($collaborationID, $userID);
     $itemStatus->store();
     $db->commit();
     return $groupLink;
 }
 static function updateFields($collaborationID, $userID = false, $fields)
 {
     if ($userID === false) {
         $userID = eZUser::currentUserID();
     }
     eZPersistentObject::updateObjectList(array('definition' => eZCollaborationItemStatus::definition(), 'update_fields' => $fields, 'conditions' => array('collaboration_id' => $collaborationID, 'user_id' => $userID)));
     $statusObject =& $GLOBALS['eZCollaborationItemStatusCache'][$collaborationID][$userID];
     if (isset($statusObject)) {
         foreach ($fields as $field => $value) {
             $statusObject->setAttribute($field, $value);
         }
     }
 }
 static function fetchListTool($parameters = array(), $asCount)
 {
     $parameters = array_merge(array('as_object' => true, 'offset' => false, 'parent_group_id' => false, 'limit' => false, 'is_active' => null, 'is_read' => null, 'status' => false, 'sort_by' => false), $parameters);
     $asObject = $parameters['as_object'];
     $offset = $parameters['offset'];
     $limit = $parameters['limit'];
     $statusTypes = $parameters['status'];
     $isRead = $parameters['is_read'];
     $isActive = $parameters['is_active'];
     $parentGroupID = $parameters['parent_group_id'];
     $sortText = '';
     if (!$asCount) {
         $sortCount = 0;
         $sortList = $parameters['sort_by'];
         if (is_array($sortList) and count($sortList) > 0) {
             if (count($sortList) > 1 and !is_array($sortList[0])) {
                 $sortList = array($sortList);
             }
         }
         if ($sortList !== false) {
             $sortingFields = '';
             foreach ($sortList as $sortBy) {
                 if (is_array($sortBy) and count($sortBy) > 0) {
                     if ($sortCount > 0) {
                         $sortingFields .= ', ';
                     }
                     $sortField = $sortBy[0];
                     switch ($sortField) {
                         case 'created':
                             $sortingFields .= 'ezcollab_item_group_link.created';
                             break;
                         case 'modified':
                             $sortingFields .= 'ezcollab_item_group_link.modified';
                             break;
                         default:
                             eZDebug::writeWarning('Unknown sort field: ' . $sortField, __METHOD__);
                             continue;
                     }
                     $sortOrder = true;
                     // true is ascending
                     if (isset($sortBy[1])) {
                         $sortOrder = $sortBy[1];
                     }
                     $sortingFields .= $sortOrder ? ' ASC' : ' DESC';
                     ++$sortCount;
                 }
             }
         }
         if ($sortCount == 0) {
             $sortingFields = ' ezcollab_item_group_link.modified DESC';
         }
         $sortText = "ORDER BY {$sortingFields}";
     }
     $parentGroupText = '';
     if ($parentGroupID > 0) {
         $parentGroupText = "ezcollab_item_group_link.group_id = '{$parentGroupID}' AND";
     }
     $isReadText = '';
     if ($isRead !== null) {
         $isReadValue = $isRead ? 1 : 0;
         $isReadText = "ezcollab_item_status.is_read = '{$isReadValue}' AND";
     }
     $isActiveText = '';
     if ($isActive !== null) {
         $isActiveValue = $isActive ? 1 : 0;
         $isActiveText = "ezcollab_item_status.is_active = '{$isActiveValue}' AND";
     }
     $userID = eZUser::currentUserID();
     $statusText = '';
     if ($statusTypes === false) {
         $statusTypes = array(self::STATUS_ACTIVE, self::STATUS_INACTIVE);
     }
     $statusText = implode(', ', $statusTypes);
     if ($asCount) {
         $selectText = 'count( ezcollab_item.id ) as count';
     } else {
         $selectText = 'ezcollab_item.*, ezcollab_item_status.is_read, ezcollab_item_status.is_active, ezcollab_item_status.last_read';
     }
     $sql = "SELECT {$selectText}\n                FROM\n                       ezcollab_item,\n                       ezcollab_item_status,\n                       ezcollab_item_group_link\n                WHERE  ezcollab_item.status IN ( {$statusText} ) AND\n                       {$isReadText}\n                       {$isActiveText}\n                       ezcollab_item.id = ezcollab_item_status.collaboration_id AND\n                       ezcollab_item.id = ezcollab_item_group_link.collaboration_id AND\n                       {$parentGroupText}\n                       ezcollab_item_status.user_id = '{$userID}' AND\n                       ezcollab_item_group_link.user_id = '{$userID}'\n                {$sortText}";
     $db = eZDB::instance();
     if (!$asCount) {
         $sqlParameters = array();
         if ($offset !== false and $limit !== false) {
             $sqlParameters['offset'] = $offset;
             $sqlParameters['limit'] = $limit;
         }
         $itemListArray = $db->arrayQuery($sql, $sqlParameters);
         foreach ($itemListArray as $key => $value) {
             $itemData =& $itemListArray[$key];
             $statusObject = eZCollaborationItemStatus::create($itemData['id'], $userID);
             $statusObject->setAttribute('is_read', $itemData['is_read']);
             $statusObject->setAttribute('is_active', $itemData['is_active']);
             $statusObject->setAttribute('last_read', $itemData['last_read']);
             $statusObject->updateCache();
         }
         $returnItemList = eZPersistentObject::handleRows($itemListArray, 'eZCollaborationItem', $asObject);
         eZDebugSetting::writeDebug('collaboration-item-list', $returnItemList);
         return $returnItemList;
     } else {
         $itemCount = $db->arrayQuery($sql);
         return $itemCount[0]['count'];
     }
 }