/**
  * 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));
 }
Beispiel #2
0
 /**
  * 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;
 }