public function removeDSFilters($context) { //Check if there is a preview link field attached. $has_preview_link = false; if (!isset(self::$fieldManager)) { self::$fieldManager = new fieldManager(Symphony::Engine()); } if (is_array($context['elements'])) { foreach ($context['elements'] as $element) { $field_id = self::$fieldManager->fetchFieldIDFromElementName($element); $field_type = self::$fieldManager->fetchFieldTypeFromID($field_id); if ($field_type == 'preview_url') { $has_preview_link = true; } } } $contents = $context['contents']; $first_line = '$result = new XMLElement($this->dsParamROOTELEMENT);'; //CREATE THE HORRIBLE FILTER STRING $this->dsFilter = ' //PREVIEW LINK EXTENSION: Remove Filters' . PHP_EOL; $this->dsFilter .= ' if (!strpos($_SERVER[‘HTTP_USER_AGENT’],"Googlebot")) {' . PHP_EOL; $this->dsFilter .= ' if(sha1($_GET["entryid"]) == $_GET["key"]) {' . PHP_EOL; $this->dsFilter .= ' $filters = $this->dsParamFILTERS;' . PHP_EOL; $this->dsFilter .= ' foreach($filters as $key=>$filter) {' . PHP_EOL; $this->dsFilter .= ' unset($this->dsParamFILTERS[$key]);' . PHP_EOL; $this->dsFilter .= ' }' . PHP_EOL; $this->dsFilter .= ' $this->dsParamFILTERS["id"] = $_GET["entryid"];' . PHP_EOL; $this->dsFilter .= ' }' . PHP_EOL; $this->dsFilter .= ' }'; if ($has_preview_link) { $contents = str_replace($first_line, $first_line . PHP_EOL . PHP_EOL . $this->dsFilter, $contents); } else { $contents = str_replace($this->dsFilter, '', $contents); } $this->dsContents = $contents; }
public function generateView(XMLElement &$wrapper, $fieldname, $options, fieldSelectBox_Link_image $field) { parent::generateView($wrapper, $fieldname, $options, $field); $alert = false; $thumbSize = 100; // text options $editbtn_text = __('Edit Selection'); $editbtn_text_blank = __('Select Existing'); $editbtn_text_close = __('Done'); $createbtn_text = __('Create New'); $footer_text_blank = __('None'); $footer_text_drag = __('Drag to reorder'); $grid_columns = 6; // CSS is set up to accept 1-10 here, perhaps this could be defined in field settings $option_count = count($options[1]['options']); // print_r($options, TRUE); // set some default classes $attributes = $wrapper->getAttribute('class'); $wrapper->setAttribute('class', $attributes . ' closed has' . $option_count); // Create the imagegrid: $imagegrid = new XMLElement('div', null, array('class' => 'sblp-imagegrid col' . $grid_columns)); foreach ($options as $optGroup) { $container = new XMLElement('div', null, array('class' => 'container')); if (isset($optGroup['label'])) { foreach ($optGroup['options'] as $option) { $section = SectionManager::fetch($optGroup['id']); $id = $option[0]; $value = $option[2]; $attr = array('rel' => $id, 'class' => 'image', 'data-section' => $section->get('handle')); $fileEntries = EntryManager::fetch($id); // item preg_match('/<*a[^>]*href*=*["\']?([^"\']*)/', html_entity_decode($value), $matches); $href = str_replace(URL . '/workspace/', '', $matches[1]); // $s3Href = array_values($fileEntries[0]->getData(0))[1]["value_formatted"]; // $imgTitle = array_values($fileEntries[0]->getData(0))[2]['value']; foreach ($fileEntries[0]->getData(0) as $fields => $fe) { $fieldType = FieldManager::fetchFieldTypeFromID($fields); if ($fieldType == 'input') { $imgTitle = $fe["value"]; } if ($fieldType == 'reflection') { $imgHref = $fe["value_formatted"]; } } if (empty($href)) { // If no href could be found, the field selected for the relation probably isn't of the type 'upload': // In this case, show a message to the user: // $alert = true; } else { if (!empty($imgHref)) { // $href = str_replace('https://', '', $s3Href); } } // $img = '<img src="'.URL.'/image/2/'.$thumbSize.'/'.$thumbSize.'/5/1/'.$href.'" alt="thumb" width="'.$thumbSize.'" height="'.$thumbSize.'" />'; $img = '<img src="' . $imgHref . '" alt="' . $imgTitle . '" width="' . $thumbSize . '" height="' . $thumbSize . '" />'; // edit & delete $actions = ''; if ($field->get('enable_edit') == 1) { $actions .= '<a href="javascript:void(0)" class="edit" title="' . __('Edit this item') . '">' . __('Edit') . '</a>'; } if ($field->get('enable_delete') == 1) { $actions .= '<a href="javascript:void(0)" class="delete" title="' . __('Delete this item') . '">×</a>'; } $actions .= '<div class="corner"></div>'; $actions .= '<a href="javascript:void(0)" title="' . $imgTitle . '" link="' . $imgHref . '" class="thumb insert-link">' . $img . '</a>'; $container->appendChild(new XMLElement('div', $actions, $attr)); } } $imagegrid->appendChild($container); } $wrapper->appendChild($imagegrid); $imagegridfooter = new XMLElement('div', null, array('class' => 'sblp-imagegrid-footer')); /* Add button */ if ($field->get('enable_create') == 1) { $related_sections = $field->findRelatedSections(); usort($related_sections, function ($a, $b) { return strcasecmp($a->get('name'), $b->get('name')); }); } if ($option_count >= 1) { $imagegridfooter->appendChild(Widget::Anchor($editbtn_text, 'javascript:void(0)', null, 'edit button sblp-edit')); } if ($field->get('enable_create') == 1) { $imagegridfooter->appendChild(Widget::Anchor($createbtn_text, URL . '/symphony/publish/' . $related_sections[0]->get('handle') . '/new/', null, 'create button sblp-add')); } /* Just to make the button text values accessible to JS*/ $imagegridfooter->appendChild(Widget::Input('editbtn_text', $editbtn_text, 'hidden')); $imagegridfooter->appendChild(Widget::Input('editbtn_text_blank', $editbtn_text_blank, 'hidden')); $imagegridfooter->appendChild(Widget::Input('editbtn_text_close', $editbtn_text_close, 'hidden')); // $dragtext = $field->get('allow_multiple_selection') == 'yes' ? '<em>'.$footer_text_drag.'</em>' : ''; // $imagegridfooter->appendChild(new XMLElement('p', $dragtext, array('class' => 'dragtext'))); $wrapper->appendChild($imagegridfooter); // send some data to JS $wrapper->setAttribute('data-alert', $alert ? 'true' : 'false'); $wrapper->setAttribute('data-multiple', $field->get('allow_multiple_selection') == 'yes' ? 'true' : 'false'); // append assets only once self::appendAssets(); }
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']; } } }