Esempio n. 1
0
 /**
  * get export object for given filter and format
  * 
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param string|array $_options format (as string) or export definition id (array)
  * @param Tinebase_Controller_Record_Interface $_controller (optional)
  * @param array $_additionalOptions (optional)
  * @return Tinebase_Export_Abstract
  * @throws Tinebase_Exception_NotFound
  */
 public static function factory($_filter, $_options, $_controller = NULL, $_additionalOptions = array())
 {
     if (!is_array($_options)) {
         $_options = array('format' => $_options);
     }
     if (array_key_exists('definitionId', $_options)) {
         $definition = Tinebase_ImportExportDefinition::getInstance()->get($_options['definitionId']);
         $exportClass = $definition->plugin;
         // export plugin needs the definition id
         $_additionalOptions = array_merge($_additionalOptions, $_options);
     } else {
         if (array_key_exists('format', $_options) && !empty($_options['format'])) {
             $appName = $_filter->getApplicationName();
             $model = $_filter->getModelName();
             $exportClass = $appName . '_Export_' . ucfirst(strtolower($_options['format']));
             if (!@class_exists($exportClass)) {
                 // check for model specific export class
                 list($a, $b, $modelPart) = explode('_', $model);
                 $exportClass = $exportClass . '_' . $modelPart;
                 if (!@class_exists($exportClass)) {
                     throw new Tinebase_Exception_NotFound('No ' . $_options['format'] . ' export class found for ' . $appName . ' / ' . $model);
                 }
             }
         } else {
             throw new Tinebase_Exception_InvalidArgument('Export definition ID or format required in options');
         }
     }
     if (preg_match('/pdf/i', $exportClass)) {
         // legacy
         $result = new $exportClass($_additionalOptions);
     } else {
         $result = new $exportClass($_filter, $_controller, $_additionalOptions);
     }
     return $result;
 }
 /**
  * update to 8.1
  * - move ack & snooze time from attendee to alarm
  */
 public function update_0()
 {
     // find all events with ack or snooze times set
     $eventIds = $this->_db->query("SELECT DISTINCT " . $this->_db->quoteIdentifier('cal_event_id') . " FROM " . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . "cal_attendee") . " WHERE " . $this->_db->quoteIdentifier("alarm_ack_time") . " IS NOT NULL OR " . $this->_db->quoteIdentifier("alarm_snooze_time") . " IS NOT NULL")->fetchAll(Zend_Db::FETCH_ASSOC);
     $attendeeBE = new Calendar_Backend_Sql_Attendee();
     $alarmBE = Tinebase_Alarm::getInstance();
     foreach ($eventIds as $eventId) {
         $eventId = $eventId['cal_event_id'];
         $attendeeFilter = new Tinebase_Model_Filter_FilterGroup();
         $attendeeFilter->addFilter(new Tinebase_Model_Filter_Text('cal_event_id', 'equals', $eventId));
         $attendees = $attendeeBE->search($attendeeFilter);
         $alarms = $alarmBE->search(new Tinebase_Model_AlarmFilter(array(array('field' => 'model', 'operator' => 'equals', 'value' => 'Calendar_Model_Event'), array('field' => 'record_id', 'operator' => 'equals', 'value' => $eventId))));
         foreach ($alarms as $alarm) {
             foreach ($attendees as $attendee) {
                 if ($attendee->alarm_ack_time instanceof Tinebase_DateTime) {
                     $alarm->setOption("acknowledged-{$attendee->user_id}", $attendee->alarm_ack_time->format(Tinebase_Record_Abstract::ISO8601LONG));
                 }
                 if ($attendee->alarm_snooze_time instanceof Tinebase_DateTime) {
                     $alarm->setOption("snoozed-{$attendee->user_id}", $attendee->alarm_snooze_time->format(Tinebase_Record_Abstract::ISO8601LONG));
                 }
             }
             $alarmBE->update($alarm);
         }
     }
     // delte ack & snooze from attendee
     $this->_backend->dropCol('cal_attendee', 'alarm_ack_time');
     $this->_backend->dropCol('cal_attendee', 'alarm_snooze_time');
     $this->setTableVersion('cal_attendee', 5);
     $this->setApplicationVersion('Calendar', '8.1');
 }
 /**
  * append relation filter
  *
  * @param Tinebase_Model_Filter_FilterGroup $filter
  */
 protected function _advancedSearch(Tinebase_Model_Filter_FilterGroup $filter)
 {
     $relationFilter = $this->_getAdvancedSearchFilter('Crm_Model_Lead', array('Addressbook_Model_Contact', 'Sales_Model_Product', 'Tasks_Model_Task'));
     if ($relationFilter) {
         $filter->addFilter($relationFilter);
     }
 }
Esempio n. 4
0
 /**
  * Removes accounts where current user has no access to
  * 
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param string $_action get|update
  * 
  * @todo move logic to Felamimail_Model_MessageFilter
  */
 public function checkFilterACL(Tinebase_Model_Filter_FilterGroup $_filter, $_action = 'get')
 {
     $accountFilter = $_filter->getFilter('account_id');
     // force a $accountFilter filter (ACL) / all accounts of user
     if ($accountFilter === NULL || $accountFilter['operator'] !== 'equals' || !empty($accountFilter['value'])) {
         $_filter->createFilter('account_id', 'equals', array());
     }
 }
 /**
  * the constructor
  *
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param Tinebase_Controller_Record_Interface $_controller (optional)
  * @param array $_additionalOptions (optional) additional options
  */
 public function __construct(Tinebase_Model_Filter_FilterGroup $_filter, Tinebase_Controller_Record_Interface $_controller = NULL, $_additionalOptions = array())
 {
     $periodFilter = $_filter->getFilter('period');
     if ($periodFilter) {
         $this->_from = $periodFilter->getFrom();
         $this->_until = $periodFilter->getUntil();
     }
     parent::__construct($_filter, $_controller, $_additionalOptions);
 }
 /**
  * append record paths (if path filter is set)
  *
  * @param Tinebase_Record_RecordSet $_records
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  *
  * TODO move to generic json converter
  */
 protected function _appendRecordPaths($_records, $_filter)
 {
     if ($_filter && $_filter->getFilter('path', false, true) !== null) {
         $recordPaths = Tinebase_Record_Path::getInstance()->getPathsForRecords($_records);
         foreach ($_records as $record) {
             $record->paths = $recordPaths->filter('record_id', $record->getId());
         }
     }
 }
 /**
  * the constructor
  *
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param Tinebase_Controller_Record_Interface $_controller (optional)
  * @param array $_additionalOptions (optional) additional options
  */
 public function init(Tinebase_Model_Filter_FilterGroup $_filter, Tinebase_Controller_Record_Interface $_controller = NULL, $_additionalOptions = array())
 {
     $this->_applicationName = 'Calendar';
     $this->_modelName = 'Event';
     $periodFilter = $_filter->getFilter('period', false, true);
     if ($periodFilter) {
         $this->_from = $periodFilter->getFrom();
         $this->_until = $periodFilter->getUntil();
     }
     parent::__construct($_filter, $_controller, $_additionalOptions);
 }
 /**
  * get export object for given filter and format
  * 
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param string|array $_options format (as string) or export definition id (array)
  * @param Tinebase_Controller_Record_Interface $_controller (optional)
  * @param array $_additionalOptions (optional)
  * @return Tinebase_Export_Abstract
  * @throws Tinebase_Exception_NotFound
  */
 public static function factory($_filter, $_options, $_controller = NULL, $_additionalOptions = array())
 {
     if (!is_array($_options)) {
         $_options = array('format' => $_options);
     }
     // always merge options? this needs to be refactored!
     $_additionalOptions = array_merge($_additionalOptions, $_options);
     if (isset($_options['definitionId']) || array_key_exists('definitionId', $_options)) {
         $definition = Tinebase_ImportExportDefinition::getInstance()->get($_options['definitionId']);
         $exportClass = $definition->plugin;
     } else {
         if ((isset($_options['format']) || array_key_exists('format', $_options)) && !empty($_options['format'])) {
             $appName = $_filter->getApplicationName();
             $model = $_filter->getModelName();
             $exportClass = $appName . '_Export_' . ucfirst(strtolower($_options['format']));
             // start output buffering to catch errors, append them to log and exception
             ob_start();
             if (!class_exists($exportClass)) {
                 $ob = ob_get_length() > 0 ? ob_get_clean() : '';
                 // check for model specific export class
                 list($a, $b, $modelPart) = explode('_', $model);
                 $exportClass2 = $exportClass . '_' . $modelPart;
                 if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) {
                     Tinebase_Core::getLogger()->log(__METHOD__ . '::' . __LINE__ . ' Could not find class ' . $exportClass . ' trying ' . $exportClass2 . '. Output Buffer: ' . PHP_EOL . $ob, Zend_Log::NOTICE);
                 }
                 if (!class_exists($exportClass2)) {
                     $ob = ob_get_length() > 0 ? ob_get_clean() : NULL;
                     ob_end_flush();
                     throw new Tinebase_Exception_NotFound('No ' . $_options['format'] . ' export class found for ' . $appName . ' / ' . $model . '. ClassName: ' . $exportClass2 . ($ob ? 'Output: ' . $ob : ''));
                 } else {
                     $exportClass = $exportClass2;
                 }
             }
             ob_end_flush();
         } else {
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Export options: ' . print_r($_options, TRUE));
             }
             throw new Tinebase_Exception_InvalidArgument('Export definition ID or format required in options');
         }
     }
     if (preg_match('/pdf/i', $exportClass)) {
         // legacy
         $result = new $exportClass($_additionalOptions);
     } else {
         $result = new $exportClass($_filter, $_controller, $_additionalOptions);
     }
     return $result;
 }
Esempio n. 9
0
 /**
  * Search for records matching given filter
  *
  * @param  Tinebase_Model_Filter_FilterGroup    $_filter
  * @param  Tinebase_Model_Pagination            $_pagination
  * @param  array|string|boolean                 $_cols columns to get, * per default / use self::IDCOL or TRUE to get only ids
  * @return Tinebase_Record_RecordSet|array
  */
 public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Model_Pagination $_pagination = NULL, $_cols = '*')
 {
     $filters = $_filter->getFilterObjects();
     //        TODO: implement this folder filter
     //        $folderFilter = new Felamimail_Model_FolderFilter(array(
     //                        array('field' => 'account_id',  'operator' => 'in',     'value' => $accounts->getArrayOfIds()),
     //                        array('field' => 'localname',   'operator' => 'equals', 'value' => 'INBOX')
     //        ));
     foreach ($filters as $filter) {
         switch ($filter->getField()) {
             case 'account_id':
                 $accountId = $filter->getValue();
                 break;
             case 'parent':
                 $globalName = $filter->getValue();
                 $parent = true;
                 break;
             case 'id':
                 $felamimailAccount = Felamimail_Controller_Account::getInstance()->search()->toArray();
                 $accountId = $felamimailAccount[0]['id'];
                 $globalName = $filter->getValue();
                 $parent = true;
                 break;
             case 'globalname':
                 $globalName = $filter->getValue();
                 if ($filter->getOperator() == 'startswith') {
                     $parent = true;
                     $globalName = substr($globalName, 0, -1);
                 }
                 break;
         }
     }
     $resultArray = array();
     $accountId = (array) $accountId;
     foreach ($accountId as $id) {
         $account = Felamimail_Controller_Account::getInstance()->get($id);
         if ($parent === true) {
             $folders = $this->_getFoldersFromIMAP($account, $globalName);
             foreach ($folders as $folder) {
                 $resultArray[] = $this->get(self::encodeFolderUid($folder['globalName'], $id));
             }
         } else {
             $resultArray[] = $this->get(self::encodeFolderUid(Felamimail_Model_Folder::encodeFolderName($globalName), $id));
         }
     }
     $result = new Tinebase_Record_RecordSet('Felamimail_Model_Folder', $resultArray, true);
     return $result;
 }
 /**
  * get records and resolve fields
  *
  * @return Tinebase_Record_RecordSet
  */
 protected function _getRecords()
 {
     $pagination = !empty($this->_options['sortInfo']) ? new Tinebase_Model_Pagination($this->_options['sortInfo']) : new Tinebase_Model_Pagination();
     if ($this->_recordIds === NULL) {
         // need to fetch record ids first because filtered fields can change during iteration step
         if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
             Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Getting record ids using filter: ' . print_r($this->_filter->toArray(), TRUE) . ' and pagination: ' . print_r($pagination->toArray(), true));
         }
         $this->_recordIds = $this->_controller->search($this->_filter, $pagination, FALSE, TRUE, $this->_options['searchAction']);
         $this->_totalCount = count($this->_recordIds);
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Found ' . $this->_totalCount . ' total records to process.');
         }
         if (empty($this->_recordIds)) {
             return new Tinebase_Record_RecordSet($this->_filter->getModelName());
         }
     }
     // get records by filter (ensure acl)
     $filterClassname = get_class($this->_filter);
     $recordIdsForIteration = array_splice($this->_recordIds, 0, $this->_options['limit']);
     $idFilter = new $filterClassname(array(array('field' => isset($this->_options['idProperty']) || array_key_exists('idProperty', $this->_options) ? $this->_options['idProperty'] : 'id', 'operator' => 'in', 'value' => $recordIdsForIteration)));
     $records = $this->_controller->search($idFilter, $pagination, $this->_options['getRelations']);
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Got ' . count($records) . ' for next iteration.');
     }
     return $records;
 }
 /**
  * export records
  */
 protected function _exportRecords()
 {
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Starting export of ' . $this->_modelName . ' with filter: ' . print_r($this->_filter->toArray(), true) . ' and sort info: ' . print_r($this->_sortInfo, true));
     }
     $iterator = new Tinebase_Record_Iterator(array('iteratable' => $this, 'controller' => $this->_controller, 'filter' => $this->_filter, 'options' => array('searchAction' => 'export', 'sortInfo' => $this->_sortInfo, 'getRelations' => $this->_getRelations)));
     $result = $iterator->iterate();
     $this->_onAfterExportRecords($result);
     if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) {
         Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' Exported ' . $result['totalcount'] . ' records.');
     }
 }
 /**
  * get list of records
  *
  * @param Tinebase_Model_Filter_FilterGroup|optional $_filter
  * @param Tinebase_Model_Pagination|optional $_pagination
  * @param boolean|array $_getRelations
  * @param boolean $_onlyIds
  * @param string $_action for right/acl check
  * @return Tinebase_Record_RecordSet|array
  */
 public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Record_Interface $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get')
 {
     //@TODO support more appfilter combinations when needed
     $appFilter = $_filter->getFilter('application_id');
     $app = Tinebase_Application::getInstance()->getApplicationById($appFilter->getValue());
     $appname = $app->name;
     if (!Tinebase_Core::getUser()->hasRight($appname, 'admin')) {
         throw new Tinebase_Exception_AccessDenied("You do not have admin rights for {$appname}");
     }
     $configRecords = new Tinebase_Record_RecordSet('Tinebase_Model_Config');
     $appConfigObject = Tinebase_Config::getAppConfig($appname);
     $appConfigDefinitions = $appConfigObject->getProperties();
     $appDBConfig = $this->_configBackend->search($_filter);
     foreach ($appConfigDefinitions as $name => $definition) {
         if (array_key_exists('setByAdminModule', $definition) && $definition['setByAdminModule']) {
             $configFromFile = $appConfigObject->getConfigFileSection($name);
             $configFromDb = $appDBConfig->filter('name', $name)->getFirstRecord();
             if ($configFromDb && !$configFromFile) {
                 $configRecord = $this->_mergeDefinition($configFromDb, $definition);
                 $configRecord->source = Tinebase_Model_Config::SOURCE_DB;
             } else {
                 $definition['id'] = 'virtual-' . $name;
                 $definition['application_id'] = $app->getId();
                 $definition['name'] = $name;
                 $definition['value'] = json_encode($configFromFile);
                 $definition['source'] = is_null($configFromFile) ? Tinebase_Model_Config::SOURCE_DEFAULT : Tinebase_Model_Config::SOURCE_FILE;
                 $configRecord = new Tinebase_Model_Config($definition);
             }
             // exclude config's which the admin can't set
             if ($configRecord->source != Tinebase_Model_Config::SOURCE_FILE) {
                 $configRecords->addRecord($configRecord);
             }
         }
     }
     return $configRecords;
 }
Esempio n. 13
0
 public function toArray($_valueToJson = false)
 {
     $result = parent::toArray($_valueToJson);
     /* foreach ($result as &$filterData) {
            if ($filterData['field'] == 'id' && $_valueToJson == true && ! empty($filterData['value'])) {
                //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' value:' . print_r($filterData['value'], true));
                try {
                    $filterData['value'] = Donator_Controller_Project::getInstance()->get($filterData['value'])->toArray();
                } catch (Tinebase_Exception_NotFound $nfe) {
                    if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) Tinebase_Core::getLogger()->INFO(__METHOD__ . '::' . __LINE__ . " could not find and resolve timeaccount {$filterData['value']}");
                }
            }
        }*/
     return $result;
 }
 /**
  * (non-PHPdoc)
  * @see ActiveSync_Frontend_Abstract::_addContainerFilter()
  */
 protected function _addContainerFilter(Tinebase_Model_Filter_FilterGroup $_filter, $_containerId)
 {
     // custom filter gets added when created
     $_filter->createFilter('account_id', 'equals', Tinebase_Core::getPreference('Expressomail')->{Expressomail_Preference::DEFAULTACCOUNT});
     $_filter->addFilter($_filter->createFilter('folder_id', 'equals', $_containerId));
 }
 /**
  * Removes containers where current user has no access to
  * 
  * @param Timetracker_Model_TimeaccountFilter $_filter
  * @param string $_action
  */
 public function checkFilterACL(Tinebase_Model_Filter_FilterGroup $_filter, $_action = 'get')
 {
     switch ($_action) {
         case 'get':
             $_filter->setRequiredGrants(array(Timetracker_Model_TimeaccountGrants::BOOK_OWN, Timetracker_Model_TimeaccountGrants::BOOK_ALL, Timetracker_Model_TimeaccountGrants::VIEW_ALL, Tinebase_Model_Grants::GRANT_ADMIN));
             break;
         case 'update':
             $_filter->setRequiredGrants(array(Tinebase_Model_Grants::GRANT_ADMIN));
             break;
         case 'export':
             $_filter->setRequiredGrants(array(Tinebase_Model_Grants::GRANT_EXPORT, Tinebase_Model_Grants::GRANT_ADMIN));
             break;
         default:
             throw new Timetracker_Exception_UnexpectedValue('Unknown action: ' . $_action);
     }
 }
 /**
  * search tree nodes
  * 
  * @param Tinebase_Model_Filter_FilterGroup|optional $_filter
  * @param Tinebase_Model_Pagination|optional $_pagination
  * @param bool $_getRelations
  * @param bool $_onlyIds
  * @param string|optional $_action
  * @return Tinebase_Record_RecordSet of Tinebase_Model_Tree_Node
  */
 public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Record_Interface $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get')
 {
     // perform recursive search on recursive filter set
     if ($_filter->getFilter('recursive')) {
         return $this->_searchNodesRecursive($_filter, $_pagination);
     } else {
         $path = $this->_checkFilterACL($_filter, $_action);
     }
     if ($path->containerType === Tinebase_Model_Tree_Node_Path::TYPE_ROOT) {
         $result = $this->_getRootNodes();
     } else {
         if ($path->containerType === Tinebase_Model_Container::TYPE_PERSONAL && !$path->containerOwner) {
             if (!file_exists($path->statpath)) {
                 $this->_backend->mkdir($path->statpath);
             }
             $result = $this->_getOtherUserNodes();
         } else {
             try {
                 $result = $this->_backend->searchNodes($_filter, $_pagination);
             } catch (Tinebase_Exception_NotFound $tenf) {
                 // create basic nodes like personal|shared|user root
                 if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                     Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $path->statpath);
                 }
                 if ($path->name === Tinebase_Model_Container::TYPE_SHARED || $path->statpath === $this->_backend->getApplicationBasePath(Tinebase_Application::getInstance()->getApplicationByName($this->_applicationName), Tinebase_Model_Container::TYPE_PERSONAL) . '/' . Tinebase_Core::getUser()->getId()) {
                     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Creating new path ' . $path->statpath);
                     }
                     $this->_backend->mkdir($path->statpath);
                     $result = $this->_backend->searchNodes($_filter, $_pagination);
                 } else {
                     throw $tenf;
                 }
             }
             $this->resolveContainerAndAddPath($result, $path);
             $this->_sortContainerNodes($result, $path, $_pagination);
         }
     }
     return $result;
 }
Esempio n. 17
0
 /**
  * add default preferences to and remove undefined preferences from record set
  * 
  * @param Tinebase_Record_RecordSet $_prefs
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  */
 protected function _addDefaultAndRemoveUndefinedPrefs(Tinebase_Record_RecordSet $_prefs, Tinebase_Model_Filter_FilterGroup $_filter)
 {
     $allAppPrefs = $this->getAllApplicationPreferences();
     // add default prefs if not already in array (only if no name or type filters are set)
     if (!$_filter->isFilterSet('name') && !$_filter->isFilterSet('type')) {
         $missingDefaultPrefs = array_diff($allAppPrefs, $_prefs->name);
         foreach ($missingDefaultPrefs as $prefName) {
             $_prefs->addRecord($this->getApplicationPreferenceDefaults($prefName));
         }
     }
     // remove all prefs that are not defined
     $undefinedPrefs = array_diff($_prefs->name, $allAppPrefs);
     if (count($undefinedPrefs) > 0) {
         $_prefs->addIndices(array('name'));
         foreach ($undefinedPrefs as $undefinedPrefName) {
             $record = $_prefs->find('name', $undefinedPrefName);
             $_prefs->removeRecord($record);
             if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) {
                 Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' Removed undefined preference from result: ' . $undefinedPrefName);
             }
         }
     }
 }
 /**
  * get the filter group object
  *
  * @param $filterModel
  * @return Tinebase_Model_Filter_FilterGroup
  */
 protected function _getFilterObject($filterModel)
 {
     if (!class_exists($filterModel)) {
         $configuredModel = preg_replace('/Filter$/', '', $filterModel);
         // TODO check if model class exists?
         //if (class_exists($configuredModel))
         // use generic filter model
         $filter = new Tinebase_Model_Filter_FilterGroup();
         $filter->setConfiguredModel($configuredModel);
     } else {
         $filter = new $filterModel();
     }
     return $filter;
 }
 /**
  * add columns from filter
  * 
  * @param array $_colsToFetch
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @return array
  */
 protected function _addFilterColumns($_colsToFetch, Tinebase_Model_Filter_FilterGroup $_filter)
 {
     // need to ask filter if it needs additional columns
     $filterCols = $_filter->getRequiredColumnsForSelect();
     foreach ($filterCols as $key => $filterCol) {
         if (!(isset($_colsToFetch[$key]) || array_key_exists($key, $_colsToFetch))) {
             $_colsToFetch[$key] = $filterCol;
         }
     }
     return $_colsToFetch;
 }
 /**
  * repair dangling attendee records (no displaycontainer_id)
  *
  * @see https://forge.tine20.org/mantisbt/view.php?id=8172
  */
 public function repairDanglingDisplaycontainerEvents()
 {
     $filter = new Tinebase_Model_Filter_FilterGroup();
     $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'user_type', 'operator' => 'in', 'value' => array(Calendar_Model_Attender::USERTYPE_USER, Calendar_Model_Attender::USERTYPE_GROUPMEMBER, Calendar_Model_Attender::USERTYPE_RESOURCE))));
     $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'displaycontainer_id', 'operator' => 'isnull', 'value' => null)));
     $danglingAttendee = $this->_attendeeBackend->search($filter);
     $danglingContactAttendee = $danglingAttendee->filter('user_type', '/' . Calendar_Model_Attender::USERTYPE_USER . '|' . Calendar_Model_Attender::USERTYPE_GROUPMEMBER . '/', TRUE);
     $danglingContactIds = array_unique($danglingContactAttendee->user_id);
     $danglingContacts = Addressbook_Controller_Contact::getInstance()->getMultiple($danglingContactIds, TRUE);
     $danglingResourceAttendee = $danglingAttendee->filter('user_type', Calendar_Model_Attender::USERTYPE_RESOURCE);
     $danglingResourceIds = array_unique($danglingResourceAttendee->user_id);
     Calendar_Controller_Resource::getInstance()->doContainerACLChecks(false);
     $danglingResources = Calendar_Controller_Resource::getInstance()->getMultiple($danglingResourceIds, TRUE);
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Processing ' . count($danglingContactIds) . ' dangling contact ids...');
     }
     foreach ($danglingContactIds as $danglingContactId) {
         $danglingContact = $danglingContacts->getById($danglingContactId);
         if ($danglingContact && $danglingContact->account_id) {
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Get default display container for account ' . $danglingContact->account_id);
             }
             if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
                 Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($danglingContact->toArray(), true));
             }
             $displayCalId = Calendar_Controller_Event::getDefaultDisplayContainerId($danglingContact->account_id);
             if ($displayCalId) {
                 // finaly repair attendee records
                 $attendeeRecords = $danglingContactAttendee->filter('user_id', $danglingContactId);
                 $this->_attendeeBackend->updateMultiple($attendeeRecords->getId(), array('displaycontainer_id' => $displayCalId));
                 Tinebase_Core::getLogger()->NOTICE(__METHOD__ . '::' . __LINE__ . " repaired the following contact attendee " . print_r($attendeeRecords->toArray(), TRUE));
             }
         }
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Processing ' . count($danglingResourceIds) . ' dangling resource ids...');
     }
     foreach ($danglingResourceIds as $danglingResourceId) {
         $resource = $danglingResources->getById($danglingResourceId);
         if ($resource && $resource->container_id) {
             $displayCalId = $resource->container_id;
             $attendeeRecords = $danglingResourceAttendee->filter('user_id', $danglingResourceId);
             $this->_attendeeBackend->updateMultiple($attendeeRecords->getId(), array('displaycontainer_id' => $displayCalId));
             Tinebase_Core::getLogger()->NOTICE(__METHOD__ . '::' . __LINE__ . " repaired the following resource attendee " . print_r($attendeeRecords->toArray(), TRUE));
         }
     }
 }
 /**
  * returns the active contract for the given employee and date or now, when no date is given
  * 
  * @param string $_employeeId
  * @param Tinebase_DateTime $_firstDayDate
  * @throws Tinebase_Exception_InvalidArgument
  * @throws HumanResources_Exception_NoCurrentContract
  * @throws Tinebase_Exception_Duplicate
  * @return HumanResources_Model_Contract
  */
 public function getValidContract($_employeeId, $_firstDayDate = NULL)
 {
     if (!$_employeeId) {
         throw new Tinebase_Exception_InvalidArgument('You have to set an account id at least');
     }
     $_firstDayDate = $_firstDayDate ? new Tinebase_DateTime($_firstDayDate) : new Tinebase_DateTime();
     $filter = new HumanResources_Model_ContractFilter(array(), 'AND');
     $filter->addFilter(new Tinebase_Model_Filter_Date(array('field' => 'start_date', 'operator' => 'before', 'value' => $_firstDayDate)));
     $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'employee_id', 'operator' => 'equals', 'value' => $_employeeId)));
     $endDate = new Tinebase_Model_Filter_FilterGroup(array(), 'OR');
     $endDate->addFilter(new Tinebase_Model_Filter_Date(array('field' => 'end_date', 'operator' => 'after', 'value' => $_firstDayDate)));
     $filter->addFilterGroup($endDate);
     $contracts = $this->search($filter);
     if ($contracts->count() < 1) {
         $filter = new HumanResources_Model_ContractFilter(array(), 'AND');
         $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'employee_id', 'operator' => 'equals', 'value' => $_employeeId)));
         $contracts = $this->search($filter);
         if ($contracts->count() > 0) {
             $e = new HumanResources_Exception_NoCurrentContract();
             $e->addRecord($contracts->getFirstRecord());
             throw $e;
         } else {
             throw new HumanResources_Exception_NoContract();
         }
     } else {
         if ($contracts->count() > 1) {
             throw new Tinebase_Exception_Duplicate('There are more than one valid contracts for this employee!');
         }
     }
     return $contracts->getFirstRecord();
 }
Esempio n. 22
0
 public function printReceiptsByFilter($preview = false, $outputType, $filters, $userOptions, $types, $sort, $additionalOptions)
 {
     $additionalOptions = Zend_Json::decode($additionalOptions);
     if ($additionalOptions['addressLabels'] == true) {
         $this->printAddressLabelsByFilter($outputType, $filters, $userOptions, $types, $sort);
         return;
     }
     $sortField = 'creation_time';
     $sortDir = 'ASC';
     $sort = Zend_Json::decode($sort);
     $this->setUseSorting(true);
     if (is_array($sort) && array_key_exists('field', $sort) && array_key_exists('order', $sort)) {
         if (in_array($sort['field'], array('creation_time', 'order_nr'))) {
             $sortField = $sort['field'];
         }
         if (in_array($sort['order'], array('ASC', 'DESC'))) {
             $sortDir = $sort['order'];
         }
     }
     $this->setTypes(Zend_Json::decode($types));
     $this->setOutputType($outputType);
     $this->setPreview($preview);
     $this->setFilters($filters);
     $this->setUserOptions($userOptions);
     if ($additionalOptions['preview'] == true) {
         $this->setPreview(true);
     }
     if ($additionalOptions['copy'] == true) {
         $this->setCopy(true);
     }
     $filters = $this->createFilters();
     $firstGroup = new Tinebase_Model_Filter_FilterGroup(array(), 'AND');
     $firstGroup->addFilterGroup($filters);
     if (!$this->preview && !$this->copy) {
         // only print receipts with empty print date!
         $firstGroup->addFilter(new Tinebase_Model_Filter_Date('print_date', 'isnull'));
     }
     $typesGroup = new Tinebase_Model_Filter_FilterGroup(array(), 'OR');
     $inoviceFilter = null;
     $shippingFilter = null;
     if ($this->types['invoice'] == true) {
         $invoiceFilter = new Tinebase_Model_Filter_Text('type', 'equals', Billing_Model_Receipt::TYPE_INVOICE);
     }
     if ($this->types['credit'] == true) {
         $invoiceFilter = new Tinebase_Model_Filter_Text('type', 'equals', Billing_Model_Receipt::TYPE_CREDIT);
     }
     if ($this->types['shipping'] == true) {
         $shippingFilter = new Tinebase_Model_Filter_Text('type', 'equals', Billing_Model_Receipt::TYPE_SHIPPING);
     }
     if (!$invoiceFilter && !$shippingFilter) {
         $invoiceFilter = new Tinebase_Model_Filter_Text('type', 'equals', Billing_Model_Receipt::TYPE_INVOICE);
     }
     if ($invoiceFilter) {
         $typesGroup->addFilter($invoiceFilter);
     }
     if ($shippingFilter) {
         $typesGroup->addFilter($shippingFilter);
     }
     $firstGroup->addFilterGroup($typesGroup);
     $paging = new Tinebase_Model_Pagination(array('sort' => $sortField, 'dir' => $sortDir));
     // -> get ids only
     $this->receiptIds = $this->_receiptController->search($firstGroup, $paging, false, TRUE);
     $this->runTransaction(self::PROCESS_RECEIPTS);
 }
 /**
  * you can define default filters here
  *
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  */
 protected function _addDefaultFilter(Tinebase_Model_Filter_FilterGroup $_filter = NULL)
 {
     if (!$_filter->isFilterSet('showHidden')) {
         $hiddenFilter = $_filter->createFilter('showHidden', 'equals', FALSE);
         $hiddenFilter->setIsImplicit(TRUE);
         $_filter->addFilter($hiddenFilter);
     }
 }
 /**
  * add container acl filter to filter group
  * 
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param string                            $_containerId
  */
 protected function _addContainerFilter(Tinebase_Model_Filter_FilterGroup $_filter, $_containerId)
 {
     $syncableContainers = $this->_getSyncableFolders();
     $containerIds = array();
     if ($_containerId == $this->_specialFolderName) {
         $containerIds = $syncableContainers->getArrayOfIds();
     } elseif (in_array($_containerId, $syncableContainers->id)) {
         $containerIds = array($_containerId);
     }
     $_filter->addFilter($_filter->createFilter('container_id', 'in', $containerIds));
 }
 /**
  * Removes containers where current user has no access to
  *
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param string $_action get|update
  */
 public function checkFilterACL(Tinebase_Model_Filter_FilterGroup $_filter, $_action = 'get')
 {
     if (!$this->_doContainerACLChecks) {
         if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
             Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Container ACL disabled for ' . $_filter->getModelName() . '.');
         }
         return TRUE;
     }
     $aclFilters = $_filter->getAclFilters();
     if (!$aclFilters) {
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Force a standard containerFilter (specialNode = all) as ACL filter.');
         }
         $containerFilter = $_filter->createFilter('container_id', 'specialNode', 'all', array('applicationName' => $_filter->getApplicationName()));
         $_filter->addFilter($containerFilter);
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Setting filter grants for action ' . $_action);
     }
     switch ($_action) {
         case 'get':
             $_filter->setRequiredGrants(array(Tinebase_Model_Grants::GRANT_READ, Tinebase_Model_Grants::GRANT_ADMIN));
             break;
         case 'update':
             $_filter->setRequiredGrants(array(Tinebase_Model_Grants::GRANT_EDIT, Tinebase_Model_Grants::GRANT_ADMIN));
             break;
         case 'export':
             $_filter->setRequiredGrants(array(Tinebase_Model_Grants::GRANT_EXPORT, Tinebase_Model_Grants::GRANT_ADMIN));
             break;
         case 'sync':
             $_filter->setRequiredGrants(array(Tinebase_Model_Grants::GRANT_SYNC, Tinebase_Model_Grants::GRANT_ADMIN));
             break;
         default:
             throw new Tinebase_Exception_UnexpectedValue('Unknown action: ' . $_action);
     }
 }
 /**
  * get list of records
  *
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param Tinebase_Model_Pagination $_pagination
  * @param boolean $_getRelations
  * @param boolean $_onlyIds
  * @param string $_action for right/acl check
  * @return Tinebase_Record_RecordSet|array
  */
 public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Model_Pagination $_pagination = NULL, $_getRelations = FALSE, $_onlyIds = FALSE, $_action = 'get')
 {
     $_filter->setId('OuterFilter');
     return parent::search($_filter, $_pagination, $_getRelations, $_onlyIds, $_action);
 }
Esempio n. 27
0
 /**
  * Search for records matching given filter
  *
  * @param  Tinebase_Model_Filter_FilterGroup    $_filter
  * @param  Tinebase_Model_Pagination            $_pagination
  * @param  array|string|boolean                 $_cols columns to get, * per default / use self::IDCOL or TRUE to get only ids
  * @return Tinebase_Record_RecordSet|array
  *
  * @todo implement optimizations on flags and security sorting
  * @todo implement messageuid,account_id search
  */
 public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Model_Pagination $_pagination = NULL, $_cols = '*')
 {
     /*        
     Tinebase_Core::getLogger()->alert(__METHOD__ . '#####::#####' . __LINE__ . ' Message Search = $_filter ' . print_r($_filter,true));
     Tinebase_Core::getLogger()->alert(__METHOD__ . '#####::#####' . __LINE__ . ' Message Search = $_pagination' . print_r($_filter,true));
     Tinebase_Core::getLogger()->alert(__METHOD__ . '#####::#####' . __LINE__ . ' Message Search = $_cols' . print_r($_cols,true));
     */
     $return = null;
     $messages = array();
     $filterObjects = $_filter->getFilterObjects();
     $imapFilters = $this->_parseFilterGroup($_filter, $_pagination);
     $pagination = !$_pagination ? new Tinebase_Model_Pagination(NULL, TRUE) : $_pagination;
     if (empty($imapFilters['paths'])) {
         $paths = $this->_getAllFolders();
         $imapFilters['paths'] = $this->_getFoldersInfo($paths);
     }
     // TODO: do pagination on $ids and return after getMultiple
     if ($imapFilters['filters'] == 'Id') {
         $ids = $filterObjects[0]->getValue();
         $ids = $this->_doPagination((array) $ids, $pagination);
         if ($_cols === TRUE) {
             return empty($ids) ? array() : $ids;
         } else {
             return empty($ids) ? $this->_rawDataToRecordSet(array()) : $this->getMultiple($ids);
         }
     } else {
         $ids = $this->_getIds($imapFilters, $_pagination);
         // get Summarys and merge results
         foreach ($ids as $folderId => $idsInFolder) {
             $folder = Felamimail_Controller_Folder::getInstance()->get($folderId);
             $imap = Felamimail_Backend_ImapFactory::factory($folder->account_id);
             $imap->selectFolder(Felamimail_Model_Folder::encodeFolderName($folder->globalname));
             $idsInFolder = count($ids) === 1 ? $this->_doPagination($idsInFolder, $_pagination) : $idsInFolder;
             // do pagination early
             $messagesInFolder = $imap->getSummary($idsInFolder, null, null, $folderId);
             if (count($ids) === 1) {
                 $tmp = array();
                 // We cannot trust the order we get from getSummary(), so we'll have to
                 // put it the right order, defined by $idsInFolder
                 // TODO: Put it into Felamilail_Backend_Imap->getSummary()????
                 foreach ($idsInFolder as $id) {
                     $tmp[$id] = $messagesInFolder[$id];
                 }
                 $messagesInFolder = $tmp;
                 unset($tmp);
             }
             $messages = array_merge($messages, $messagesInFolder);
             if (count($ids) !== 1 && count($messages) > 1000) {
                 throw new Felamimail_Exception_IMAPCacheTooMuchResults();
             }
         }
         if (count($ids) === 1 && !in_array($pagination->sort, $this->_imapSortParams) || count($ids) > 1) {
             $callback = new Felamimail_Backend_Cache_Imap_MessageComparator($pagination);
             uasort($messages, array($callback, 'compare'));
         }
     }
     if (empty($messages)) {
         return $this->_rawDataToRecordSet(array());
     }
     // Apply Pagination and get the resulting summary
     $page = count($ids) === 1 ? $messages : $this->_doPagination($messages, $_pagination);
     //        $limit = empty($pagination->limit) ? count($messages) : $pagination->limit;
     //        $chunked = array_chunk($messages, $limit, true);
     //        $chunkIndex = empty($pagination->start) ? 0 : $pagination->start/$limit;
     // Put headers into model
     //        if($imapFilters['filters'] == 'Id'){
     //            $return = empty($chunked[$chunkIndex])?new Tinebase_Record_RecordSet('Felamimail_Model_Message', array(), true): new Tinebase_Record_RecordSet('Felamimail_Model_Message', $chunked[$chunkIndex], true);
     //        }else
     $return = empty($page) ? $this->_rawDataToRecordSet(array()) : $this->_rawDataToRecordSet($this->_createModelMessageArray($page));
     Tinebase_Core::getLogger()->alert(__METHOD__ . '#####::#####' . __LINE__ . ' Imap Sort = $sorted ' . print_r($messages, true));
     return $return;
     //
     //        Tinebase_Core::getLogger()->alert(__METHOD__ . '#####::#####' . __LINE__ . ' Could\'nt use Imap directly' . print_r($return,true));
     //        $aux = new Felamimail_Backend_Cache_Sql_Message();
     //        $return = $aux->search($_filter,$_pagination, $_cols);
     //Tinebase_Core::getLogger()->alert(__METHOD__ . '#####::#####' . __LINE__ . ' Message Search = $retorno' . print_r($retorno,true));
 }
Esempio n. 28
0
 /**
  * Calendar optimized search function
  *
  * @param  Tinebase_Model_Filter_FilterGroup    $_filter
  * @param  Tinebase_Model_Pagination            $_pagination
  * @param  boolean                              $_onlyIds
  * @param  bool   $_getDeleted
  * @return Tinebase_Record_RecordSet|array
  */
 public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Model_Pagination $_pagination = NULL, $_onlyIds = FALSE, $_getDeleted = FALSE)
 {
     if ($_pagination === NULL) {
         $_pagination = new Tinebase_Model_Pagination();
     }
     // we use a an extra select to reduce data amount where grants etc. have to be computed for.
     // the exdate is already appended here, to reduce virtual row numbers later
     $subselect = $this->_getSelectSimple('id', $_getDeleted);
     $subselect->joinLeft(array('exdate' => $this->_tablePrefix . 'cal_exdate'), $this->_db->quoteIdentifier('exdate.cal_event_id') . ' = ' . $this->_db->quoteIdentifier($this->_tableName . '.id'), array('exdate' => Tinebase_Backend_Sql_Command::getAggregateFunction($this->_db, $this->_db->quoteIdentifier('exdate.exdate'))));
     // this attendee join has nothing to do with grants but is here for attendee/status/... filters
     $subselect->joinLeft(array('attendee' => $this->_tablePrefix . 'cal_attendee'), $this->_db->quoteIdentifier('attendee.cal_event_id') . ' = ' . $this->_db->quoteIdentifier('cal_events.id'), array());
     if (!$_getDeleted) {
         $subselect->joinLeft(array('dispcontainer' => $this->_tablePrefix . 'container'), $this->_db->quoteIdentifier('dispcontainer.id') . ' = ' . $this->_db->quoteIdentifier('attendee.displaycontainer_id'), array());
         $subselect->where($this->_db->quoteIdentifier('dispcontainer.is_deleted') . ' = 0 OR ' . $this->_db->quoteIdentifier('dispcontainer.is_deleted') . 'IS NULL');
     }
     // remove grantsfilter here as we need it in the main select
     $grantsFilter = $_filter->getFilter('grants');
     if ($grantsFilter) {
         $_filter->removeFilter('grants');
     }
     $this->_addFilter($subselect, $_filter);
     $_pagination->appendPaginationSql($subselect);
     $subselect->group($this->_tableName . '.' . 'id');
     $stmt = $this->_db->query($subselect);
     $rows = (array) $stmt->fetchAll(Zend_Db::FETCH_ASSOC);
     $ids = array();
     $exdates = array();
     foreach ($rows as $row) {
         $ids[] = $row['id'];
         $exdates[$row['id']] = $row['exdate'];
     }
     $select = $this->_getSelectSimple('*', $_getDeleted);
     $select->where($this->_db->quoteInto("{$this->_db->quoteIdentifier('cal_events.id')} IN (?)", !empty($ids) ? $ids : ' '));
     $_pagination->appendPaginationSql($select);
     // append grants filters : only take limited set of attendee into account for grants computation
     $attenderFilter = $_filter->getFilter('attender');
     if (!$attenderFilter) {
         // if a container filter is set, take owners of personal containers (solve secretary scenario)
         $containerFilter = $_filter->getFilter('container_id');
         if ($containerFilter && $containerFilter instanceof Calendar_Model_CalendarFilter) {
             $attenderFilter = $containerFilter->getRelatedAttendeeFilter();
         } else {
             $attenderFilter = new Calendar_Model_AttenderFilter('attender', 'equals', array('user_type' => Calendar_Model_Attender::USERTYPE_USER, 'user_id' => Tinebase_Core::getUser()->contact_id));
         }
     }
     $this->_appendEffectiveGrantCalculationSql($select, $attenderFilter);
     if ($grantsFilter) {
         $grantsFilter->appendFilterSql($select, $this);
     }
     $select->group($this->_tableName . '.' . 'id');
     $this->_traitGroup($select);
     $stmt = null;
     // solve PHP bug @see {http://bugs.php.net/bug.php?id=35793}
     $stmt = $this->_db->query($select);
     $rows = (array) $stmt->fetchAll(Zend_Db::FETCH_ASSOC);
     if ($_onlyIds) {
         $identifier = is_bool($_onlyIds) ? $this->_getRecordIdentifier() : $_onlyIds;
         $result = array();
         foreach ($rows as $row) {
             $result[] = $row[$identifier];
         }
     } else {
         foreach ($rows as &$row) {
             $row['exdate'] = $exdates[$row[$this->_getRecordIdentifier()]];
         }
         $result = $this->_rawDataToRecordSet($rows);
     }
     return $result;
 }
Esempio n. 29
0
 /**
  * returns multiple records prepared for json transport
  *
  * @param Tinebase_Record_RecordSet $_records Tinebase_Record_Abstract
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @return array data
  */
 protected function _multipleRecordsToJson(Tinebase_Record_RecordSet $_records, $_filter = NULL)
 {
     if (count($_records) == 0) {
         return array();
     }
     switch ($_records->getRecordClassName()) {
         case 'Tinebase_Model_Preference':
             $accountFilterArray = $_filter->getFilter('account')->toArray();
             $adminMode = $accountFilterArray['value']['accountId'] == 0 && $accountFilterArray['value']['accountType'] == Tinebase_Acl_Rights::ACCOUNT_TYPE_ANYONE;
             foreach ($_records as $record) {
                 if (!isset($app) || $record->application_id != $app->getId()) {
                     $app = Tinebase_Application::getInstance()->getApplicationById($record->application_id);
                 }
                 $preference = Tinebase_Core::getPreference($app->name, TRUE);
                 $preference->resolveOptions($record);
                 if ($record->type == Tinebase_Model_Preference::TYPE_DEFAULT || !$adminMode && $record->type == Tinebase_Model_Preference::TYPE_ADMIN) {
                     $record->value = Tinebase_Model_Preference::DEFAULT_VALUE;
                 }
             }
             break;
     }
     $result = parent::_multipleRecordsToJson($_records, $_filter);
     return $result;
 }
Esempio n. 30
0
 /**
  * Removes accounts where current user has no access to
  * 
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param string $_action get|update
  */
 public function checkFilterACL(Tinebase_Model_Filter_FilterGroup $_filter, $_action = 'get')
 {
     $userFilter = $_filter->getFilter('user_id');
     // force a $userFilter filter (ACL)
     if ($userFilter === NULL || $userFilter->getOperator() !== 'equals' || $userFilter->getValue() !== $this->_currentAccount->getId()) {
         $userFilter = $_filter->createFilter('user_id', 'equals', $this->_currentAccount->getId());
         $_filter->addFilter($userFilter);
     }
 }