Ejemplo n.º 1
0
 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);
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * 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);
     }
 }
Ejemplo n.º 6
0
 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;
 }
Ejemplo n.º 7
0
 /**
  * @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 = ' &#8211; ';
         // 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 = '&#8211;';
                     }
                     $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);
 }
Ejemplo n.º 10
0
 /**
  *
  * 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();
 }