function displayPublishPanel(XMLElement &$wrapper, $data = null, $flagWithError = null, $fieldnamePrefix = null, $fieldnamePostfix = null, $entry_id = null) { $note = isset($data['value']) ? $data['value'] : $this->get('note'); $editable = $this->get('editable'); # Add <div> $div = new XMLElement("div", $note, array("id" => Lang::createHandle($this->get('label')), "class" => "publishnotes-note")); $wrapper->appendChild($div); # Editable if (isset($editable) && $editable) { $wrapper->setAttribute('class', $wrapper->getAttribute('class') . " editable"); $edit = new XMLElement("a", __("Edit note"), array("class" => "publishnotes-edit", "href" => "#edit")); $wrapper->appendChild($edit); # Add <textarea> $label = Widget::Label("Edit: " . $this->get('label'), NULL, Lang::createHandle($this->get('label'))); $textarea = Widget::Textarea('fields' . $fieldnamePrefix . '[' . $this->get('element_name') . ']' . $fieldnamePostfix, 8, 50, strlen($note) != 0 ? General::sanitize($note) : NULL); $label->appendChild($textarea); $control = new XMLElement("div", '<input type="submit" value="Change note"/> or <a href="#">cancel</a>', array("class" => "control")); $label->appendChild($control); if ($flagWithError != NULL) { $wrapper->appendChild(Widget::Error($label, $flagWithError)); } else { $wrapper->appendChild($label); } } }
/** * Generate data source output. * * @param XMLElement $wrapper * @param array $data * @param boolean $encode * @param string $mode */ public function appendFormattedElement(&$wrapper, $data, $encode = false) { // unify data if (!is_array($data['relation_id'])) { $data['relation_id'] = array($data['relation_id']); } // create Mediathek element $mediathek = new XMLElement($this->get('element_name')); // check for included fields if ($this->get('included_fields') == '') { $error = new XMLElement('error', 'No fields for output defined.'); $mediathek->appendChild($error); $wrapper->appendChild($mediathek); return; } // fetch field data $entryManager = new EntryManager($this->_engine); $entries = $entryManager->fetch($data['relation_id'], $this->get('related_section_id')); // sort entries $order = $this->_Parent->_Parent->Database->fetchVar('order', 0, "SELECT `order`\n\t\t\t\tFROM `tbl_fields_mediathek_sorting`\n\t\t\t\tWHERE `entry_id` = " . $wrapper->getAttribute('id') . "\n\t\t\t\tAND `field_id` = " . $this->get('id') . "\n\t\t\t\tLIMIT 1"); $sorted_ids = explode(',', $order); $sorted_entries = array(); if (!empty($sorted_ids) && $sorted_ids[0] != 0) { foreach ($sorted_ids as $id) { foreach ($entries as $entry) { if ($entry->get('id') == $id) { $sorted_entries[] = $entry; } } } } else { $sorted_entries = $entries; } // build XML $count = 1; foreach ($sorted_entries as $entry) { // fetch entry data $entry_data = $entry->getData(); // create entry element $item = new XMLElement('item'); // populate entry element $included_fields = explode(',', $this->get('included_fields')); foreach ($entry_data as $field_id => $values) { // only append if field is listed or if list empty if (in_array($field_id, $included_fields) || empty($included_fields[0])) { $field =& $entryManager->fieldManager->fetch($field_id); $field->appendFormattedElement($item, $values, false); } } // append entry element $mediathek->appendChild($item); $mediathek->setAttribute('items', $count); $count++; } // append Mediathek to data source $wrapper->appendChild($mediathek); }
public function prepareTableValue($data, XMLElement $link = null, $entry_id = null) { if (empty($data)) { return; } $zoom = (int) $data['zoom'] - 2; if ($zoom < 1) { $zoom = 1; } $thumbnail = sprintf("<img src='http://maps.google.com/maps/api/staticmap?center=%s&zoom=%d&size=160x90&sensor=false&markers=color:red|size:small|%s' alt=''/>", $data['centre'], $zoom, implode(',', array($data['latitude'], $data['longitude']))); if (null !== $link) { return sprintf('<a href="%s">%s</a>', $link->getAttribute('href'), $thumbnail); } return $thumbnail; }
/** * @see http://symphony-cms.com/learn/api/2.3/toolkit/field/#prepareTableValue */ function prepareTableValue($data, XMLElement $link = null) { if (empty($data['relation_id'])) { return null; } // Single select if ($this->get('allow_multiple') == 0 || count($data['relation_id']) === 1) { $subsection = new SubsectionManager(); $content = $subsection->generate($this->get('id'), $this->get('subsection_id'), $data, $this->get('recursion_levels'), SubsectionManager::GETPREVIEW); // Link? if ($link) { $href = $link->getAttribute('href'); $item = '<a href="' . $href . '">' . $content['preview'] . '</a>'; } else { $item = $content['preview']; } return '<div class="subsectionmanager">' . $item . '</div>'; } else { $count = count($data['relation_id']); return parent::prepareTableValue(array('value' => $count > 1 ? $count . ' ' . __('items') : $count . ' ' . __('item')), $link); } }
/** * Allows a Drawer element to added to the backend page in one of three * positions, `horizontal`, `vertical-left` or `vertical-right`. The button * to trigger the visibility of the drawer will be added after existing * actions by default. * * @since Symphony 2.3 * @see core.Widget#Drawer * @param XMLElement $drawer * An XMLElement representing the drawer, use `Widget::Drawer` to construct * @param string $position * Where `$position` can be `horizontal`, `vertical-left` or * `vertical-right`. Defaults to `horizontal`. * @param string $button * If not passed, a button to open/close the drawer will not be added * to the interface. Accepts 'prepend' or 'append' values, which will * add the button before or after existing buttons. Defaults to `prepend`. * If any other value is passed, no button will be added. */ public function insertDrawer(XMLElement $drawer, $position = 'horizontal', $button = 'append') { $drawer->addClass($position); $drawer->setAttribute('data-position', $position); $this->Drawer[$position][] = $drawer; if (in_array($button, array('prepend', 'append'))) { $this->insertAction(Widget::Anchor($drawer->getAttribute('data-label'), '#' . $drawer->getAttribute('id'), null, 'button drawer ' . $position), $button === 'append' ? true : false); } }
private function getChildrenWithClass(XMLElement &$rootElement, $className, $tagName = null) { if ($rootElement == null) { return null; } // contains the right css class and the right node name (if any) // TODO: Use word bondaries instead of strpos if ((!$className || strpos($rootElement->getAttribute('class'), $className) > -1) && (!$tagName || $rootElement->getName() == $tagName)) { return $rootElement; } // recursive search in child elements foreach ($rootElement->getChildren() as $key => $child) { if (!$child instanceof XMLElement) { continue; } $res = $this->getChildrenWithClass($child, $className, $tagName); if ($res != null) { return $res; } } return null; }
/** * @see http://symphony-cms.com/learn/api/2.2/toolkit/field/#prepareTableValue */ function prepareTableValue($data, XMLElement $link = NULL) { if (!is_array($data['start'])) { $data['start'] = array($data['start']); } if (!is_array($data['end'])) { $data['end'] = array($data['end']); } // Handle empty dates if (empty($data['start'][0])) { if ($link) { $href = $link->getAttribute('href'); return '<a href="' . $href . '">' . __('No Date') . '</a>'; } else { return __('No Date'); } } // Get schema if ($this->get('time') == 1) { $scheme = __SYM_DATETIME_FORMAT__; } else { $scheme = __SYM_DATE_FORMAT__; } // Parse dates $value = array(); for ($i = 0; $i < count($data['start']); $i++) { $start = new DateTime($data['start'][$i]); $separator = ' – '; // Date range if ($data['end'][$i] != $data['start'][$i]) { $end = new DateTime($data['end'][$i]); // Different start and end days if ($start->format('D-M-Y') != $end->format('D-M-Y')) { $value[] = LANG::localizeDate($start->format($scheme) . $separator . $end->format($scheme)); } else { // Show time if ($this->get('time') == 1) { // Adjust separator if (Symphony::Configuration()->get('time_format', 'region') == 'H:i') { $separator = '–'; } $value[] = LANG::localizeDate($start->format($scheme) . $separator . $end->format(Symphony::Configuration()->get('time_format', 'region'))); } else { $value[] = LANG::localizeDate($start->format($scheme)); } } } else { $value[] = LANG::localizeDate($start->format($scheme)); } } // Link? if ($link) { $href = $link->getAttribute('href'); return '<a href="' . $href . '">' . implode($value, ', <br />') . '</a>'; } else { return implode($value, ', <br />'); } }
public function displayPublishPanel(XMLElement &$wrapper, $data = NULL, $flagWithError = NULL, $fieldnamePrefix = NULL, $fieldnamePostfix = NULL) { $wrapper->setAttribute('class', $wrapper->getAttribute('class') . ' field-multilingual'); $container = new XMLElement('div', null, array('class' => 'container')); /* Label */ $label = Widget::Label($this->get('label')); $class = 'file'; $label->setAttribute('class', $class); if ($this->get('required') != 'yes') { $label->appendChild(new XMLElement('i', __('Optional'))); } $container->appendChild($label); $reference_language = FLang::instance()->referenceLanguage(); $all_languages = FLang::instance()->ld()->allLanguages(); $language_codes = FLang::instance()->ld()->languageCodes(); /* Tabs */ $ul = new XMLElement('ul'); $ul->setAttribute('class', 'tabs'); foreach ($language_codes as $language_code) { $class = $language_code . ($language_code == $reference_language ? ' active' : ''); $li = new XMLElement('li', $all_languages[$language_code] ? $all_languages[$language_code] : __('Unknown language')); $li->setAttribute('class', $class); // to use this, Multilingual Text must depend on Frontend Localisation so UX is consistent regarding Language Tabs // if( $language_code == $reference_language ){ // $ul->prependChild($li); // } // else{ $ul->appendChild($li); // } } $container->appendChild($ul); /* Inputs */ foreach ($language_codes as $language_code) { $div = new XMLElement('div', NULL, array('class' => 'file tab-panel tab-' . $language_code)); $file = 'file-' . $language_code; if ($data[$file]) { $div->appendChild(Widget::Anchor('/workspace' . $data[$file], URL . '/workspace' . $data[$file])); } $div->appendChild(Widget::Input('fields' . $fieldnamePrefix . '[' . $this->get('element_name') . '][' . $language_code . ']' . $fieldnamePostfix, $data[$file], $data[$file] ? 'hidden' : 'file')); $container->appendChild($div); } /* Directory check */ if (!is_dir(DOCROOT . $this->get('destination') . '/')) { $flagWithError = __('The destination directory, <code>%s</code>, does not exist.', array($this->get('destination'))); } elseif (!$flagWithError && !is_writable(DOCROOT . $this->get('destination') . '/')) { $flagWithError = __('Destination folder, <code>%s</code>, is not writable. Please check permissions.', array($this->get('destination'))); } if ($flagWithError != NULL) { $wrapper->appendChild(Widget::wrapFormElementWithError($container, $flagWithError)); } else { $wrapper->appendChild($container); } }
/** * Generate data source output. * * @param XMLElement $wrapper * @param array $data * @param boolean $encode * @param string $mode */ public function appendFormattedElement(&$wrapper, $data, $encode = false, $mode = "entries") { // unify data if (!is_array($data['relation_id'])) { $data['relation_id'] = array($data['relation_id']); } // create Subsection Manager element $subsectionmanager = new XMLElement($this->get('element_name')); // check for included fields if ($this->get('included_fields') == '') { $error = new XMLElement('error', 'No fields for output defined.'); $subsectionmanager->appendChild($error); $wrapper->appendChild($subsectionmanager); return; } // fetch field data $entries = self::$em->fetch($data['relation_id'], $this->get('subsection_id')); $subsectionmanager->setAttribute('entries', count($entries)); if ($mode == "entries") { // sort entries $order = self::$db->fetchVar('order', 0, sprintf("\n\t\t\t\t\t\t\tSELECT `order`\n\t\t\t\t\t\t\tFROM `tbl_fields_subsectionmanager_sorting`\n\t\t\t\t\t\t\tWHERE `entry_id` = %d\n\t\t\t\t\t\t\tAND `field_id` = %d\n\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t", $wrapper->getAttribute('id'), $this->get('id'))); $sorted_ids = explode(',', $order); $sorted_entries = array(); if (!empty($sorted_ids) && $sorted_ids[0] != 0 && !empty($sorted_ids[0])) { foreach ($sorted_ids as $id) { foreach ($entries as $entry) { if ($entry->get('id') == $id) { $sorted_entries[] = $entry; } } } } else { $sorted_entries = $entries; } // build XML $included_fields = explode(',', $this->get('included_fields')); foreach ($sorted_entries as $entry) { // fetch entry data $entry_data = $entry->getData(); // create entry element $item = new XMLElement('entry'); $item->setAttribute('id', $entry->get('id')); // populate entry element foreach ($entry_data as $field_id => $values) { // only append if field is listed or if list empty if (in_array($field_id, $included_fields) || empty($included_fields[0])) { $field = self::$fm->fetch($field_id); $field->appendFormattedElement($item, $values, false); } } // append entry element $subsectionmanager->appendChild($item); } } // append Subsection Manager to data source $wrapper->appendChild($subsectionmanager); }
/** * * Build the UI for the table view * @param Array $data * @param XMLElement $link * @param int $entry_id * @return string - the html of the link */ public function prepareTableValue($data, XMLElement $link = NULL, $entry_id = NULL) { $url = $data['url']; $thumb = $data['thumbnail_url']; $textValue = $this->prepareTextValue($data, $entry_id); $value = NULL; // no url = early exit if (strlen($url) == 0) { return NULL; } // no thumbnail or the parameter is not set ? if (empty($thumb) || $this->get('thumbs') != 'yes') { // if not use the title or the url as value $value = $textValue; } else { // create a image $thumb = ServiceDriver::removeHTTPProtocol($thumb); $thumb = ServiceDriver::removeRelativeProtocol($thumb); $img_path = URL . '/image/1/0/40/1/' . $thumb; $value = '<img src="' . $img_path . '" alt="' . General::sanitize($data['title']) . '" height="40" />'; } // does this cell serve as a link ? if (!!$link) { // if so, set our html as the link's value $link->setValue($value); $link->setAttribute('title', $textValue . ' | ' . $link->getAttribute('title')); } else { // if not, wrap our html with a external link to the resource url $link = new XMLElement('a', $value, array('href' => $url, 'target' => '_blank', 'title' => $textValue)); } // returns the link's html code return $link->generate(); }