/** * search preferences * * @param string $applicationName * @param array $filter json encoded * @return array */ public function searchPreferencesForApplication($applicationName, $filter) { $decodedFilter = is_array($filter) ? $filter : Zend_Json::decode($filter); $filter = new Tinebase_Model_PreferenceFilter(); if (!empty($decodedFilter)) { $filter->setFromArrayInUsersTimezone($decodedFilter); } $appId = Tinebase_Application::getInstance()->getApplicationByName($applicationName)->getId(); $filter->addFilter($filter->createFilter(array('field' => 'application_id', 'operator' => 'equals', 'value' => $appId))); $backend = Tinebase_Core::getPreference($applicationName); if ($backend) { $records = $backend->search($filter); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Got ' . count($records) . ' preferences for app ' . $applicationName); } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($records->toArray(), TRUE)); } $result = $this->_multipleRecordsToJson($records, $filter); // add translated labels and descriptions $translations = $backend->getTranslatedPreferences(); foreach ($result as $key => $prefArray) { if (isset($translations[$prefArray['name']])) { $result[$key] = array_merge($prefArray, $translations[$prefArray['name']]); } else { $result[$key] = array_merge($prefArray, array('label' => $prefArray['name'])); } } // sort prefs by definition $allPrefs = (array) $backend->getAllApplicationPreferences(); usort($result, function ($a, $b) use($allPrefs) { $a = (int) array_search($a['name'], $allPrefs); $b = (int) array_search($b['name'], $allPrefs); if ($a == $b) { return 0; } return $a < $b ? -1 : 1; }); } else { $result = array(); } return array('results' => $result, 'totalcount' => count($result)); }
/** * search preferences * * @param string $applicationName * @param array $filter json encoded * @return array */ public function searchPreferencesForApplication($applicationName, $filter) { $decodedFilter = is_array($filter) ? $filter : Zend_Json::decode($filter); $filter = new Tinebase_Model_PreferenceFilter(); if (!empty($decodedFilter)) { $filter->setFromArrayInUsersTimezone($decodedFilter); } $appId = Tinebase_Application::getInstance()->getApplicationByName($applicationName)->getId(); $filter->addFilter($filter->createFilter(array('field' => 'application_id', 'operator' => 'equals', 'value' => $appId))); $backend = Tinebase_Core::getPreference($applicationName); if ($backend) { $records = $backend->search($filter); $result = $this->_multipleRecordsToJson($records, $filter); // add translated labels and descriptions $translations = $backend->getTranslatedPreferences(); foreach ($result as &$prefArray) { if (isset($translations[$prefArray['name']])) { $prefArray = array_merge($prefArray, $translations[$prefArray['name']]); } else { $prefArray = array_merge($prefArray, array('label' => $prefArray['name'])); } } } else { $result = array(); } return array('results' => $result, 'totalcount' => count($result)); }
/** * search for preferences * * @param Tinebase_Model_Filter_FilterGroup $_filter * @param Tinebase_Model_Pagination $_pagination * @param boolean $_onlyIds * @return Tinebase_Record_RecordSet|array of preferences / pref ids */ public function search(Tinebase_Model_Filter_FilterGroup $_filter = NULL, Tinebase_Model_Pagination $_pagination = NULL, $_onlyIds = FALSE) { if ($_filter === null) { $_filter = new Tinebase_Model_PreferenceFilter(); } // make sure account is set in filter $userId = Tinebase_Core::getUser()->getId(); if (!$_filter->isFilterSet('account')) { $accountFilter = $_filter->createFilter('account', 'equals', array('accountId' => (string) $userId, 'accountType' => Tinebase_Acl_Rights::ACCOUNT_TYPE_USER)); $_filter->addFilter($accountFilter); } else { // only admins can search for other users prefs $accountFilter = $_filter->getAccountFilter(); $accountFilterValue = $accountFilter->getValue(); if ($accountFilterValue['accountId'] != $userId && $accountFilterValue['accountType'] == Tinebase_Acl_Rights::ACCOUNT_TYPE_USER) { if (!Tinebase_Acl_Roles::getInstance()->hasRight($this->_application, Tinebase_Core::getUser()->getId(), Tinebase_Acl_Rights_Abstract::ADMIN)) { return new Tinebase_Record_RecordSet('Tinebase_Model_Preference'); } } } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_filter->toArray(), TRUE)); } $paging = new Tinebase_Model_Pagination(array('dir' => 'ASC', 'sort' => array('name'))); $allPrefs = parent::search($_filter, $_pagination, $_onlyIds); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r(is_array($allPrefs) ? $allPrefs : $allPrefs->toArray(), TRUE)); } if (!$_onlyIds) { $this->_addDefaultAndRemoveUndefinedPrefs($allPrefs, $_filter); // get single matching preferences for each different pref $result = $this->getMatchingPreferences($allPrefs); } else { $result = $allPrefs; } return $result; }