public static function getPageList($page_id = 0) { $pagesData = PageManager::fetchPageByType(extension_RestEngine::pageType()); if (!is_array($pagesData[0])) { $pagesArray[0] = $pagesData; } else { $pagesArray = $pagesData; } $exclude = RestResourceManager::getExistingRestPages(); $pageOptions = array(); foreach ($pagesArray as $page) { $selectedPage = $page_id == $page['id'] ? true : false; //Disable select options for pages that already are set, allowing the current page and any pages that aren't already set up to still be selected. $attr = is_numeric(array_search($page['id'], $exclude)) && $page_id != $page['id'] ? array('disabled' => 'disabled') : null; $pageOptions[] = array($page['id'], $selectedPage, $page['title'], null, null, $attr); } return $pageOptions; }
public function eventPreSaveFilter($context) { if ($context['fields'] === null && (RestEngine::getHTTPMethod() === 'put' || 'post')) { $parsedData = RestEngine::parseBodyContent(); if ($context['entry_id'] === null && RestEngine::getHTTPMethod() === 'put') { $pageID = RestEngine::getPageID(); $urlParams = $this::getPageURLParams(); //use the page ID to look up the format and uid param settings $settings = RestResourceManager::getByPageID($pageID); if (array_key_exists($settings['uid_parameter'], $urlParams)) { $entryIDValue = $urlParams[$settings['uid_parameter']]; if ($settings['field_id'] == 0) { // 0 stands for using the Entry ID number directly so just // check to see if that entry number exists in the correct section $entrySection = EntryManager::fetchEntrySectionID($entryIDValue); if ($entrySection == $settings['section_id']) { //good to go $entryID = $entryIDValue; } } else { $fieldType = FieldManager::fetchFieldTypeFromID($settings['field_id']); //TODO: Eventually add in a more robust field type management to distinguish between value and handle based fields if necessary, or do it by array searching? if ($fieldType != 'memberemail') { $query = "SELECT `entry_id` FROM `tbl_entries_data_" . $settings['field_id'] . "` WHERE `handle` = '" . $entryIDValue . "' LIMIT 1"; } else { $query = "SELECT `entry_id` FROM `tbl_entries_data_" . $settings['field_id'] . "` WHERE `value` = '" . $entryIDValue . "' LIMIT 1"; } $entryID = Symphony::Database()->fetchVar('entry_id', 0, $query); } if (is_null($entryID)) { //no matching entry $context['messages'][] = array('restengine:invalid-id', FALSE, __('The specified resource "%1$s" does not exist.', array($entryIDValue))); } else { //good to go $context['entry_id'] = $entryID; } } else { $context['messages'][] = array('restengine:settings-error', FALSE, __('Invalid Rest Resource unique ID URL parameter: %1$s.', array($settings['uid_parameter']))); //probably some kind of error needs returning here } } if (is_array($parsedData) && !empty($parsedData['data']) && $parsedData['errors'] === null) { //Create the post data cookie element. General::array_to_xml($context['post_values'], $parsedData, true); //TODO: check for field mapping //TODO: Do we need to error when message body contains properties that we don't have fields for in the assigned section? $context['fields'] = $parsedData['data']; } } }
public function __actionEdit() { if (array_key_exists('delete', $_POST['action'])) { return $this->__actionDelete($this->_context[1], extension_RestEngine::baseURL() . 'settings/'); } if (array_key_exists('save', $_POST['action'])) { $isNew = $this->_context[0] !== "edit"; $fields = $_POST['fields']; if (!$isNew) { if (!($map_id = $this->_context[1])) { redirect(extension_RestEngine::baseURL() . 'settings/'); } if (!($existing = RestResourceManager::fetch($map_id))) { throw new SymphonyErrorPage(__('The API Resource you requested to edit does not exist.'), __('Resource not found'), 'error'); } } //TODO: Decide if I really want to require this or not? If not also change SQL $uid_parameter = trim($fields['uid_parameter']); if (strlen($uid_parameter) == 0) { $this->_errors['name'] = __('This is a required field'); return false; } //TODO: Do we need to check for the existence of anything here? if ($isNew) { } else { } $data = array('page_id' => $fields['page_id'], 'section_id' => $fields['section_id'], 'field_id' => $fields['field_id'], 'uid_parameter' => $fields['uid_parameter'], 'format_parameter' => $fields['format_parameter']); if ($isNew) { if ($map_id = RestResourceManager::add($data)) { redirect(extension_RestEngine::baseURL() . 'settings/edit/' . $map_id . '/created/'); } } else { if (RestResourceManager::edit($map_id, $data)) { redirect(extension_RestEngine::baseURL() . 'settings/edit/' . $map_id . '/saved/'); } } } }