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/');
             }
         }
     }
 }