/** * returns record prepared for json transport * * @param Tinebase_Record_Interface $_record * @return array record data */ protected function _recordToJson($_record) { switch (get_class($_record)) { case 'Timetracker_Model_Timesheet': $_record['timeaccount_id'] = $_record['timeaccount_id'] ? $this->_timeaccountController->get($_record['timeaccount_id']) : $_record['timeaccount_id']; $_record['timeaccount_id']['account_grants'] = Timetracker_Model_TimeaccountGrants::getGrantsOfAccount(Tinebase_Core::get('currentAccount'), $_record['timeaccount_id']); $_record['timeaccount_id']['account_grants'] = $this->_resolveTimesheetGrantsByTimeaccountGrants($_record['timeaccount_id']['account_grants'], $_record['account_id']); Tinebase_User::getInstance()->resolveUsers($_record, 'account_id'); $recordArray = parent::_recordToJson($_record); break; case 'Timetracker_Model_Timeaccount': $recordArray = parent::_recordToJson($_record); // When editing a single TA we send _ALL_ grants to the client $recordArray['grants'] = Timetracker_Model_TimeaccountGrants::getTimeaccountGrants($_record)->toArray(); foreach ($recordArray['grants'] as &$value) { switch ($value['account_type']) { case Tinebase_Acl_Rights::ACCOUNT_TYPE_USER: $value['account_name'] = Tinebase_User::getInstance()->getUserById($value['account_id'])->toArray(); break; case Tinebase_Acl_Rights::ACCOUNT_TYPE_GROUP: $value['account_name'] = Tinebase_Group::getInstance()->getGroupById($value['account_id'])->toArray(); break; case Tinebase_Acl_Rights::ACCOUNT_TYPE_ANYONE: $value['account_name'] = array('accountDisplayName' => 'Anyone'); break; default: throw new Tinebase_Exception_InvalidArgument('Unsupported accountType.'); break; } } break; } return $recordArray; }
/** * returns multiple records prepared for json transport * * @param Tinebase_Record_RecordSet $_records * @param Tinebase_Model_Filter_FilterGroup $_filter * @param Tinebase_Model_Pagination $_pagination * * @return array data */ protected function _multipleRecordsToJson(Tinebase_Record_RecordSet $_records, $_filter = NULL, $_pagination = NULL) { $result = parent::_multipleRecordsToJson($_records, $_filter, $_pagination); // get groups + types (departments) and merge data $groupIds = $_records->group_id; $groups = Tinebase_Group::getInstance()->getMultiple(array_unique(array_values($groupIds))); $knownTypes = Tinebase_Department::getInstance()->search(new Tinebase_Model_DepartmentFilter()); foreach ($result as &$course) { $groupIdx = $groups->getIndexById($course['group_id']); if ($groupIdx !== FALSE) { $group = $groups[$groupIdx]->toArray(); unset($group['id']); $course = array_merge($group, $course); } else { if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) { Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Group with ID ' . $course['group_id'] . ' does not exist.'); } } $typeIdx = $knownTypes->getIndexById($course['type']); if ($typeIdx !== FALSE) { //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($knownTypes[$typeIdx]->toArray(), true)); $course['type'] = $knownTypes[$typeIdx]->toArray(); } else { if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) { Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Department with ID ' . $course['type'] . ' does not exist.'); } $course['type'] = array('id' => $course['type'], 'name' => $course['type']); } } return $result; }
/** * converts Tinebase_Record_RecordSet to external format * * @param Tinebase_Record_RecordSet $_records * @param array $_resolveUserFields * @return mixed */ public function fromTine20RecordSet(Tinebase_Record_RecordSet $_records, $_resolveUserFields = array()) { if (count($_records) == 0) { return array(); } Tinebase_Frontend_Json_Abstract::resolveContainerTagsUsers($_records, $_resolveUserFields); $_records->setTimezone(Tinebase_Core::get(Tinebase_Core::USERTIMEZONE)); $_records->convertDates = true; $result = $_records->toArray(); return $result; }
/** * returns record prepared for json transport * * @param Tinebase_Record_Interface $_record * @return array record data */ protected function _recordToJson($_record) { $recordArray = parent::_recordToJson($_record); switch (get_class($_record)) { case 'Voipmanager_Model_Snom_Phone': // add settings $recordArray = array_merge($recordArray, $this->getSnomPhoneSettings($_record->getId())); // add snom templates (no filter + no pagination) $recordArray['template_id'] = array('value' => $_record->template_id, 'records' => $this->searchSnomTemplates('', '')); // add snom locations (no filter + no pagination) $recordArray['location_id'] = array('value' => $_record->location_id, 'records' => $this->searchSnomLocations('', '')); // resolve lines foreach ($recordArray['lines'] as &$line) { $line['asteriskline_id'] = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->get($line['asteriskline_id'])->toArray(); } break; case 'Voipmanager_Model_Snom_Template': // add snom softwares (no filter + no pagination) $recordArray['software_id'] = array('value' => $recordArray['software_id'], 'records' => $this->searchSnomSoftwares('', '')); // add snom settings (no filter + no pagination) $recordArray['setting_id'] = array('value' => $recordArray['setting_id'], 'records' => $this->searchSnomSettings('', '')); break; case 'Voipmanager_Model_Snom_Phone': // add settings $recordArray = array_merge($recordArray, $this->getSnomPhoneSettings($recordArray['id'])); // resolve snom template_id $recordArray['template_id'] = array('value' => $recordArray['template_id'], 'records' => $this->searchSnomTemplates('', '')); // resolve snom location_id $recordArray['location_id'] = array('value' => $recordArray['location_id'], 'records' => $this->searchSnomLocations('', '')); // add names to lines foreach ($recordArray['lines'] as &$line) { $line['name'] = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->get($line['asteriskline_id'])->name; } break; case 'Voipmanager_Model_Asterisk_SipPeer': case 'Voipmanager_Model_Asterisk_Voicemail': // resolve context_id $recordArray['context_id'] = array('value' => $recordArray['context_id'], 'records' => $this->searchAsteriskContexts('', '')); break; } return $recordArray; }
/** * returns record prepared for json transport * * @param Tinebase_Record_Interface $_record * @return array record data */ protected function _recordToJson($_record) { switch (get_class($_record)) { case 'Timetracker_Model_Timesheet': $_record['timeaccount_id'] = $_record['timeaccount_id'] ? $this->_timeaccountController->get($_record['timeaccount_id']) : $_record['timeaccount_id']; $_record['timeaccount_id']['account_grants'] = Timetracker_Model_TimeaccountGrants::getGrantsOfAccount(Tinebase_Core::get('currentAccount'), $_record['timeaccount_id']); $_record['timeaccount_id']['account_grants'] = $this->_resolveTimesheetGrantsByTimeaccountGrants($_record['timeaccount_id']['account_grants'], $_record['account_id']); Tinebase_User::getInstance()->resolveUsers($_record, 'account_id'); if (Tinebase_Core::getUser()->hasRight('Sales', 'manage_invoices') && !empty($_record['invoice_id'])) { try { $_record['invoice_id'] = Sales_Controller_Invoice::getInstance()->get($_record['invoice_id']); } catch (Tinebase_Exception_NotFound $nfe) { Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Could not resolve invoice with id ' . $_record['invoice_id']); } } $recordArray = parent::_recordToJson($_record); break; case 'Timetracker_Model_Timeaccount': $recordArray = parent::_recordToJson($_record); // When editing a single TA we send _ALL_ grants to the client $recordArray['grants'] = Timetracker_Model_TimeaccountGrants::getTimeaccountGrants($_record)->toArray(); foreach ($recordArray['grants'] as &$value) { switch ($value['account_type']) { case Tinebase_Acl_Rights::ACCOUNT_TYPE_USER: $value['account_name'] = Tinebase_User::getInstance()->getUserById($value['account_id'])->toArray(); break; case Tinebase_Acl_Rights::ACCOUNT_TYPE_GROUP: $value['account_name'] = Tinebase_Group::getInstance()->getGroupById($value['account_id'])->toArray(); break; case Tinebase_Acl_Rights::ACCOUNT_TYPE_ANYONE: $value['account_name'] = array('accountDisplayName' => 'Anyone'); break; default: throw new Tinebase_Exception_InvalidArgument('Unsupported accountType.'); break; } } break; } return $recordArray; }
/** * Search for tasks matching given arguments * * @param array $filter * @param array $paging * @return array */ public function searchTasks($filter, $paging) { return parent::_search($filter, $paging, Tasks_Controller_Task::getInstance(), 'Tasks_Model_TaskFilter', TRUE); }
/** * returns multiple records prepared for json transport * * @param Tinebase_Record_RecordSet $_records Tinebase_Record_Abstract * @param Tinebase_Model_Filter_FilterGroup $_filter * @param Tinebase_Model_Pagination $_pagination * @return array data */ protected function _multipleRecordsToJson(Tinebase_Record_RecordSet $_records, $_filter = NULL, $_pagination = null) { switch ($_records->getRecordClassName()) { case 'Sipgate_Model_Connection': Sipgate_Controller_Line::getInstance()->resolveMultipleLines($_records); $this->_resolveMultipleContacts($_records); break; case 'Sipgate_Model_Line': Sipgate_Controller_Account::getInstance()->resolveMultipleAccounts($_records); Tinebase_User::getInstance()->resolveMultipleUsers($_records, $this->_resolveUserFields['Sipgate_Model_Line']); break; } return parent::_multipleRecordsToJson($_records); }
/** * returns multiple records prepared for json transport * * @param Tinebase_Record_RecordSet $_records Tinebase_Record_Abstract * @param Tinebase_Model_Filter_FilterGroup $_filter * @param Tinebase_Model_Pagination $_pagination needed for sorting * @return array data * * @todo perhaps we need to resolveContainerTagsUsers() before mergeAndRemoveNonMatchingRecurrences(), but i'm not sure about that * @todo use Calendar_Convert_Event_Json */ protected function _multipleRecordsToJson(Tinebase_Record_RecordSet $_records, $_filter = NULL, $_pagination = NULL) { if ($_records->getRecordClassName() == 'Calendar_Model_Event') { if (is_null($_filter)) { throw new Tinebase_Exception_InvalidArgument('Required argument $_filter is missing'); } Tinebase_Notes::getInstance()->getMultipleNotesOfRecords($_records); Calendar_Model_Attender::resolveAttendee($_records->attendee, TRUE, $_records); Calendar_Convert_Event_Json::resolveOrganizer($_records); Calendar_Convert_Event_Json::resolveRrule($_records); Calendar_Controller_Event::getInstance()->getAlarms($_records); Calendar_Model_Rrule::mergeAndRemoveNonMatchingRecurrences($_records, $_filter); $_records->sortByPagination($_pagination); $eventsData = parent::_multipleRecordsToJson($_records); foreach ($eventsData as $eventData) { if (!array_key_exists(Tinebase_Model_Grants::GRANT_READ, $eventData) || !$eventData[Tinebase_Model_Grants::GRANT_READ]) { $eventData['notes'] = array(); $eventData['tags'] = array(); } } return $eventsData; } return parent::_multipleRecordsToJson($_records); }
/** * returns record prepared for json transport * * @param Tinebase_Record_Interface $_record * @return array record data */ protected function _recordToJson($_record) { $recordArray = parent::_recordToJson($_record); switch (get_class($_record)) { case 'Phone_Model_MyPhone': // add settings $settings = Voipmanager_Controller_Snom_PhoneSettings::getInstance()->get($_record->getId()); $recordArray = array_merge($recordArray, $settings->toArray()); // resolve lines foreach ($recordArray['lines'] as &$line) { $line['asteriskline_id'] = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->get($line['asteriskline_id'])->toArray(); } break; } return $recordArray; }
/** * returns multiple records prepared for json transport * * @param Tinebase_Record_RecordSet $_records Tinebase_Record_Abstract * @param Tinebase_Model_Filter_FilterGroup * @param Tinebase_Model_Pagination $_pagination * @return array data */ protected function _multipleRecordsToJson(Tinebase_Record_RecordSet $_records, $_filter = NULL, $_pagination = NULL) { $result = parent::_multipleRecordsToJson($_records, $_filter, $_pagination); foreach ($result as &$contact) { $contact['jpegphoto'] = $this->_getImageLink($contact); } return $result; }
/** * Returns registry data of the application. * * Each application has its own registry to supply static data to the client. * Registry data is queried only once per session from the client. * * This registry must not be used for rights or ACL purposes. Use the generic * rights and ACL mechanisms instead! * * @return mixed array 'variable name' => 'data' */ public function getRegistryData() { $data = parent::getRegistryData(); $ci = HumanResources_Config::getInstance(); $calid = $ci->get($ci::DEFAULT_FEAST_CALENDAR, NULL); $data[$ci::DEFAULT_FEAST_CALENDAR] = $calid ? Tinebase_Container::getInstance()->get($calid)->toArray() : NULL; $data[$ci::VACATION_EXPIRES] = $ci->get($ci::VACATION_EXPIRES); return $data; }
/** * do some call json functions if preferences name match * - every app should define its own special handlers * * @param Tinebase_Frontend_Json_Abstract $_jsonFrontend * @param string $name * @param string $value * @param string $appName */ public function doSpecialJsonFrontendActions(Tinebase_Frontend_Json_Abstract $_jsonFrontend, $name, $value, $appName) { if ($appName == $this->_application) { // get default prefs if value = use default if ($value == Tinebase_Model_Preference::DEFAULT_VALUE) { $value = $this->{$name}; if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Using default (' . $value . ') for ' . $name); } } $session = Tinebase_Core::get(Tinebase_Session::SESSION); switch ($name) { case Tinebase_Preference::LOCALE: unset($session->userLocale); $_jsonFrontend->setLocale($value, FALSE, TRUE); break; case Tinebase_Preference::TIMEZONE: unset($session->timezone); $_jsonFrontend->setTimezone($value, FALSE); break; } } }
/** * returns multiple records prepared for json transport * * @param Tinebase_Record_RecordSet $_records Tinebase_Record_Abstract * @param Tinebase_Model_Filter_FilterGroup * @return array data */ protected function _multipleRecordsToJson(Tinebase_Record_RecordSet $_records, $_filter = NULL) { if ($_records->getRecordClassName() == 'Tasks_Model_Task') { // NOTE: in contrast to calendar, organizers in tasks are accounts atm. Tinebase_User::getInstance()->resolveMultipleUsers($_records, 'organizer', true); } //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(print_r($_records->toArray(), true)); return parent::_multipleRecordsToJson($_records); }
/** * resolves child records before converting the record set to an array * * @param Tinebase_Record_RecordSet $records * @param Tinebase_ModelConfiguration $modelConfiguration * @param boolean $multiple */ protected function _resolveBeforeToArray($records, $modelConfiguration, $multiple = false) { Tinebase_Frontend_Json_Abstract::resolveContainersAndTags($records); self::resolveAttachmentImage($records); self::resolveMultipleIdFields($records); // use modern record resolving, if the model was configured using Tinebase_ModelConfiguration // at first, resolve all single record fields if ($modelConfiguration) { $this->_resolveSingleRecordFields($records, $modelConfiguration); // resolve all multiple records fields $this->_resolveMultipleRecordFields($records, $modelConfiguration, $multiple); } }
/** * converts Tinebase_Record_RecordSet to external format * * @param Tinebase_Record_RecordSet $_records * @param Tinebase_Model_Filter_FilterGroup $_filter * @param Tinebase_Model_Pagination $_pagination * * @return mixed */ public function fromTine20RecordSet(Tinebase_Record_RecordSet $_records = NULL, $_filter = NULL, $_pagination = NULL) { if (count($_records) == 0) { return array(); } Tinebase_Notes::getInstance()->getMultipleNotesOfRecords($_records); Tinebase_Tags::getInstance()->getMultipleTagsOfRecords($_records); if (Tinebase_Core::isFilesystemAvailable()) { Tinebase_FileSystem_RecordAttachments::getInstance()->getMultipleAttachmentsOfRecords($_records); } Calendar_Model_Attender::resolveAttendee($_records->attendee, TRUE, $_records); Calendar_Convert_Event_Json::resolveRrule($_records); Calendar_Controller_Event::getInstance()->getAlarms($_records); Calendar_Convert_Event_Json::resolveGrantsOfExternalOrganizers($_records); Calendar_Model_Rrule::mergeAndRemoveNonMatchingRecurrences($_records, $_filter); $_records->sortByPagination($_pagination); Tinebase_Frontend_Json_Abstract::resolveContainersAndTags($_records, array('container_id')); $_records->setTimezone(Tinebase_Core::getUserTimezone()); $_records->convertDates = true; $eventsData = $_records->toArray(); foreach ($eventsData as $idx => $eventData) { if (!(isset($eventData[Tinebase_Model_Grants::GRANT_READ]) || array_key_exists(Tinebase_Model_Grants::GRANT_READ, $eventData)) || !$eventData[Tinebase_Model_Grants::GRANT_READ]) { $eventsData[$idx] = array_intersect_key($eventsData[$idx], array_flip(array('id', 'dtstart', 'dtend', 'transp', 'is_all_day_event'))); } } return $eventsData; }
/** * returns multiple records prepared for json transport * * @param Tinebase_Record_RecordSet $_records Tinebase_Record_Abstract * @param Tinebase_Model_Filter_FilterGroup * @param Tinebase_Model_Pagination $_pagination * @return array data * * @todo move to converter * @todo get multiple grants at once */ protected function _multipleRecordsToJson(Tinebase_Record_RecordSet $_records, $_filter = NULL, $_pagination = NULL) { $result = parent::_multipleRecordsToJson($_records, $_filter); foreach ($result as $idx => $recordArray) { $recordIdx = $_records->getIndexById($recordArray['id']); try { if (!is_object($_records[$recordIdx]->filters)) { throw new Tinebase_Exception_UnexpectedValue('no filter group found'); } $result[$idx]['filters'] = $_records[$recordIdx]->filters->toArray(TRUE); } catch (Exception $e) { if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) { Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Skipping filter: ' . $e->getMessage()); } unset($result[$idx]); continue; } // resolve grant users/groups if (isset($result[$idx]['grants'])) { $result[$idx]['grants'] = Tinebase_Frontend_Json_Container::resolveAccounts($result[$idx]['grants']); $result[$idx]['account_grants'] = Tinebase_PersistentFilter::getInstance()->getGrantsOfAccount(Tinebase_Core::getUser(), $_records[$recordIdx])->toArray(); } } return array_values($result); }
/** * returns message prepared for json transport * - overwriten to convert recipients to array * * @param Tinebase_Record_Interface $_record * @return array record data */ protected function _recordToJson($_record) { if ($_record instanceof Felamimail_Model_Message) { foreach (array('to', 'cc', 'bcc') as $type) { if (!is_array($_record->{$type})) { if (!empty($_record->{$type})) { $exploded = explode(',', $_record->{$type}); $_record->{$type} = $exploded; } else { $_record->{$type} = array(); } } } if ($_record->preparedParts instanceof Tinebase_Record_RecordSet) { foreach ($_record->preparedParts as $preparedPart) { if ($preparedPart->preparedData instanceof Calendar_Model_iMIP) { try { $iMIPFrontend = new Calendar_Frontend_iMIP(); $iMIPFrontend->prepareComponent($preparedPart->preparedData, true); } catch (Exception $e) { Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Could not prepare calendar iMIP component: ' . $e->getMessage()); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $e->getTraceAsString()); } $_record->preparedParts->removeRecord($preparedPart); } } } } } else { if ($_record instanceof Felamimail_Model_Account) { // add usernames $_record->resolveCredentials(); // imap $_record->resolveCredentials(TRUE, FALSE, TRUE); // smtp } else { if ($_record instanceof Felamimail_Model_Sieve_Vacation) { if (!$_record->mime) { $_record->reason = Tinebase_Mail::convertFromTextToHTML($_record->reason, 'felamimail-body-blockquote'); } } } } return parent::_recordToJson($_record); }
/** * 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) { switch ($_records->getRecordClassName()) { case 'Tinebase_Model_AccessLog': // TODO use _resolveUserFields and remove this foreach ($_records as $record) { if (!empty($record->account_id)) { try { $record->account_id = Admin_Controller_User::getInstance()->get($record->account_id)->toArray(); } catch (Tinebase_Exception_NotFound $e) { $record->account_id = Tinebase_User::getInstance()->getNonExistentUser('Tinebase_Model_FullUser')->toArray(); } } } break; case 'Tinebase_Model_Container': case 'Tinebase_Model_CustomField_Config': $applications = Tinebase_Application::getInstance()->getApplications(); foreach ($_records as $record) { $idx = $applications->getIndexById($record->application_id); if ($idx !== FALSE) { $record->application_id = $applications[$idx]; } } break; } $result = parent::_multipleRecordsToJson($_records, $_filter); return $result; }
/** * 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; }
/** * returns multiple records prepared for json transport * * @param Tinebase_Record_RecordSet $_records Tinebase_Record_Abstract * @param Tinebase_Model_Filter_FilterGroup * @return array data */ protected function _multipleRecordsToJson(Tinebase_Record_RecordSet $_records, $_filter = NULL) { $result = parent::_multipleRecordsToJson($_records, $_filter); foreach ($result as $idx => $recordArray) { $recordIdx = $_records->getIndexById($recordArray['id']); try { $result[$idx]['filters'] = $_records[$recordIdx]->filters->toArray(TRUE); } catch (Exception $e) { // skip filter unset($result[$idx]); } } return array_values($result); }