public function __viewEdit()
 {
     $section_id = $this->_context[1];
     $sectionManager = new SectionManager($this->_Parent);
     if (!($section = $sectionManager->fetch($section_id))) {
         $this->_Parent->customError(E_USER_ERROR, __('Unknown Section'), __('The Section you are looking for could not be found.'), false, true);
     }
     $meta = $section->get();
     $fieldManager = new FieldManager($this->_Parent);
     $types = array();
     $formHasErrors = is_array($this->_errors) && !empty($this->_errors);
     if ($formHasErrors) {
         $this->pageAlert(__('An error occurred while processing this form. <a href="#error">See below for details.</a>'), Alert::ERROR);
     }
     if (isset($this->_context[2])) {
         switch ($this->_context[2]) {
             case 'saved':
                 $this->pageAlert(__('Section updated at %1$s. <a href="%2$s">Create another?</a> <a href="%3$s">View all Sections</a>', array(DateTimeObj::getTimeAgo(__SYM_TIME_FORMAT__), URL . '/symphony/blueprints/sections/new/', URL . '/symphony/blueprints/sections/')), Alert::SUCCESS);
                 break;
             case 'created':
                 $this->pageAlert(__('Section created at %1$s. <a href="%2$s">Create another?</a> <a href="%3$s">View all Sections</a>', array(DateTimeObj::getTimeAgo(__SYM_TIME_FORMAT__), URL . '/symphony/blueprints/sections/new/', URL . '/symphony/blueprints/sections/')), Alert::SUCCESS);
                 break;
         }
     }
     if (isset($_POST['fields'])) {
         $fields = array();
         if (is_array($_POST['fields']) && !empty($_POST['fields'])) {
             foreach ($_POST['fields'] as $position => $data) {
                 if ($fields[$position] = $fieldManager->create($data['type'])) {
                     $fields[$position]->setArray($data);
                     $fields[$position]->set('sortorder', $position);
                 }
             }
         }
     } else {
         $fields = $fieldManager->fetch(NULL, $section_id);
     }
     $meta['subsection'] = $meta['subsection'] == 'yes' ? 1 : 0;
     $meta['entry_order'] = isset($meta['entry_order']) ? $meta['entry_order'] : 'date';
     if (isset($_POST['meta'])) {
         $meta = $_POST['meta'];
         $meta['hidden'] = isset($meta['hidden']) ? 'yes' : 'no';
         if ($meta['name'] == '') {
             $meta['name'] = $section->get('name');
         }
     }
     $this->setPageType('form');
     $this->setTitle(__('%1$s &ndash; %2$s &ndash; %3$s', array(__('Symphony'), __('Sections'), $meta['name'])));
     $this->appendSubheading($meta['name']);
     $fieldset = new XMLElement('fieldset');
     $fieldset->setAttribute('class', 'settings');
     $fieldset->appendChild(new XMLElement('legend', __('Essentials')));
     $div = new XMLElement('div', NULL, array('class' => 'group'));
     $namediv = new XMLElement('div', NULL);
     $label = Widget::Label('Name');
     $label->appendChild(Widget::Input('meta[name]', $meta['name']));
     if (isset($this->_errors['name'])) {
         $namediv->appendChild(Widget::wrapFormElementWithError($label, $this->_errors['name']));
     } else {
         $namediv->appendChild($label);
     }
     $label = Widget::Label();
     $input = Widget::Input('meta[hidden]', 'yes', 'checkbox', $meta['hidden'] == 'yes' ? array('checked' => 'checked') : NULL);
     $label->setValue(__('%s Hide this section from the Publish menu', array($input->generate(false))));
     $namediv->appendChild($label);
     $div->appendChild($namediv);
     $navgroupdiv = new XMLElement('div', NULL);
     $sectionManager = new SectionManager($this->_Parent);
     $sections = $sectionManager->fetch(NULL, 'ASC', 'sortorder');
     $label = Widget::Label(__('Navigation Group') . ' <i>' . __('Choose only one. Created if does not exist') . '</i>');
     $label->appendChild(Widget::Input('meta[navigation_group]', $meta['navigation_group']));
     if (isset($this->_errors['navigation_group'])) {
         $navgroupdiv->appendChild(Widget::wrapFormElementWithError($label, $this->_errors['navigation_group']));
     } else {
         $navgroupdiv->appendChild($label);
     }
     if (is_array($sections) && !empty($sections)) {
         $ul = new XMLElement('ul', NULL, array('class' => 'tags singular'));
         $groups = array();
         foreach ($sections as $s) {
             if (in_array($s->get('navigation_group'), $groups)) {
                 continue;
             }
             $ul->appendChild(new XMLElement('li', $s->get('navigation_group')));
             $groups[] = $s->get('navigation_group');
         }
         $navgroupdiv->appendChild($ul);
     }
     $div->appendChild($navgroupdiv);
     $fieldset->appendChild($div);
     $this->Form->appendChild($fieldset);
     $fieldset = new XMLElement('fieldset');
     $fieldset->setAttribute('class', 'settings');
     $fieldset->appendChild(new XMLElement('legend', __('Fields')));
     $div = new XMLElement('div');
     $h3 = new XMLElement('h3', __('Fields'));
     $h3->setAttribute('class', 'label');
     $div->appendChild($h3);
     $ol = new XMLElement('ol');
     $ol->setAttribute('id', 'fields-duplicator');
     if (is_array($fields) && !empty($fields)) {
         foreach ($fields as $position => $field) {
             $wrapper = new XMLElement('li');
             $field->set('sortorder', $position);
             $field->displaySettingsPanel($wrapper, isset($this->_errors[$position]) ? $this->_errors[$position] : NULL);
             $ol->appendChild($wrapper);
         }
     }
     foreach ($fieldManager->fetchTypes() as $type) {
         if ($type = $fieldManager->create($type)) {
             array_push($types, $type);
         }
     }
     uasort($types, create_function('$a, $b', 'return strnatcasecmp($a->_name, $b->_name);'));
     foreach ($types as $type) {
         $defaults = array();
         $type->findDefaults($defaults);
         $type->setArray($defaults);
         $wrapper = new XMLElement('li');
         $wrapper->setAttribute('class', 'template');
         $type->set('sortorder', '-1');
         $type->displaySettingsPanel($wrapper);
         $ol->appendChild($wrapper);
     }
     $div->appendChild($ol);
     $fieldset->appendChild($div);
     $this->Form->appendChild($fieldset);
     $div = new XMLElement('div');
     $div->setAttribute('class', 'actions');
     $div->appendChild(Widget::Input('action[save]', __('Save Changes'), 'submit', array('accesskey' => 's')));
     $button = new XMLElement('button', __('Delete'));
     $button->setAttributeArray(array('name' => 'action[delete]', 'class' => 'confirm delete', 'title' => __('Delete this section'), 'type' => 'submit'));
     $div->appendChild($button);
     $this->Form->appendChild($div);
 }
 public function __viewEdit()
 {
     $section_id = $this->_context[1];
     $sectionManager = new SectionManager($this->_Parent);
     if (!($section = $sectionManager->fetch($section_id))) {
         Administration::instance()->customError(__('Unknown Section'), __('The Section you are looking for could not be found.'));
     }
     $meta = $section->get();
     $fieldManager = new FieldManager($this->_Parent);
     $types = array();
     $formHasErrors = is_array($this->_errors) && !empty($this->_errors);
     if ($formHasErrors) {
         $this->pageAlert(__('An error occurred while processing this form. <a href="#error">See below for details.</a>'), Alert::ERROR);
     }
     if (isset($this->_context[2])) {
         switch ($this->_context[2]) {
             case 'saved':
                 $this->pageAlert(__('Section updated at %1$s. <a href="%2$s" accesskey="c">Create another?</a> <a href="%3$s" accesskey="a">View all Sections</a>', array(DateTimeObj::getTimeAgo(__SYM_TIME_FORMAT__), SYMPHONY_URL . '/blueprints/sections/new/', SYMPHONY_URL . '/blueprints/sections/')), Alert::SUCCESS);
                 break;
             case 'created':
                 $this->pageAlert(__('Section created at %1$s. <a href="%2$s" accesskey="c">Create another?</a> <a href="%3$s" accesskey="a">View all Sections</a>', array(DateTimeObj::getTimeAgo(__SYM_TIME_FORMAT__), SYMPHONY_URL . '/blueprints/sections/new/', SYMPHONY_URL . '/blueprints/sections/')), Alert::SUCCESS);
                 break;
         }
     }
     if (isset($_POST['fields'])) {
         $fields = array();
         if (is_array($_POST['fields']) && !empty($_POST['fields'])) {
             foreach ($_POST['fields'] as $position => $data) {
                 if ($fields[$position] = $fieldManager->create($data['type'])) {
                     $fields[$position]->setArray($data);
                     $fields[$position]->set('sortorder', $position);
                 }
             }
         }
     } else {
         $fields = $fieldManager->fetch(NULL, $section_id);
     }
     $meta['entry_order'] = isset($meta['entry_order']) ? $meta['entry_order'] : 'date';
     if (isset($_POST['meta'])) {
         $meta = $_POST['meta'];
         $meta['hidden'] = isset($meta['hidden']) ? 'yes' : 'no';
         if ($meta['name'] == '') {
             $meta['name'] = $section->get('name');
         }
     }
     $this->setPageType('form');
     $this->setTitle(__('%1$s &ndash; %2$s &ndash; %3$s', array(__('Symphony'), __('Sections'), $meta['name'])));
     $this->appendSubheading($meta['name']);
     $fieldset = new XMLElement('fieldset');
     $fieldset->setAttribute('class', 'settings');
     $fieldset->appendChild(new XMLElement('legend', __('Essentials')));
     $div = new XMLElement('div', NULL, array('class' => 'group'));
     $namediv = new XMLElement('div', NULL);
     $label = Widget::Label(__('Name'));
     $label->appendChild(Widget::Input('meta[name]', General::sanitize($meta['name'])));
     if (isset($this->_errors['name'])) {
         $namediv->appendChild(Widget::wrapFormElementWithError($label, $this->_errors['name']));
     } else {
         $namediv->appendChild($label);
     }
     $label = Widget::Label();
     $input = Widget::Input('meta[hidden]', 'yes', 'checkbox', $meta['hidden'] == 'yes' ? array('checked' => 'checked') : NULL);
     $label->setValue(__('%s Hide this section from the back-end menu', array($input->generate(false))));
     $namediv->appendChild($label);
     $div->appendChild($namediv);
     $navgroupdiv = new XMLElement('div', NULL);
     $sectionManager = new SectionManager($this->_Parent);
     $sections = $sectionManager->fetch(NULL, 'ASC', 'sortorder');
     $label = Widget::Label(__('Navigation Group') . ' <i>' . __('Choose only one. Created if does not exist') . '</i>');
     $label->appendChild(Widget::Input('meta[navigation_group]', $meta['navigation_group']));
     if (isset($this->_errors['navigation_group'])) {
         $navgroupdiv->appendChild(Widget::wrapFormElementWithError($label, $this->_errors['navigation_group']));
     } else {
         $navgroupdiv->appendChild($label);
     }
     if (is_array($sections) && !empty($sections)) {
         $ul = new XMLElement('ul', NULL, array('class' => 'tags singular'));
         $groups = array();
         foreach ($sections as $s) {
             if (in_array($s->get('navigation_group'), $groups)) {
                 continue;
             }
             $ul->appendChild(new XMLElement('li', $s->get('navigation_group')));
             $groups[] = $s->get('navigation_group');
         }
         $navgroupdiv->appendChild($ul);
     }
     $div->appendChild($navgroupdiv);
     $fieldset->appendChild($div);
     $this->Form->appendChild($fieldset);
     /**
      * Allows extensions to add elements to the header of the Section Editor
      * form. Usually for section settings, this delegate is passed the current
      * `$meta` array and the `$this->_errors` array.
      *
      * @delegate AddSectionElements
      * @since Symphony 2.2
      * @param string $context
      * '/blueprints/sections/'
      * @param XMLElement $form
      *  An XMLElement of the current `$this->Form`, just after the Section
      *  settings have been appended, but before the Fields duplicator
      * @param array $meta
      *  The current $_POST['meta'] array
      * @param array $errors
      *  The current errors array
      */
     Symphony::ExtensionManager()->notifyMembers('AddSectionElements', '/blueprints/sections/', array('form' => &$this->Form, 'meta' => &$meta, 'errors' => &$this->_errors));
     $fieldset = new XMLElement('fieldset');
     $fieldset->setAttribute('class', 'settings');
     $fieldset->appendChild(new XMLElement('legend', __('Fields')));
     $div = new XMLElement('div');
     $p = new XMLElement('p', __('Fields'));
     $p->setAttribute('class', 'label');
     $div->appendChild($p);
     $ol = new XMLElement('ol');
     $ol->setAttribute('id', 'fields-duplicator');
     if (is_array($fields) && !empty($fields)) {
         foreach ($fields as $position => $field) {
             $wrapper = new XMLElement('li', NULL, array('class' => 'field-' . $field->handle() . ($field->mustBeUnique() ? ' unique' : NULL)));
             $wrapper->setAttribute('data-type', $field->handle());
             $field->set('sortorder', $position);
             $field->displaySettingsPanel($wrapper, isset($this->_errors[$position]) ? $this->_errors[$position] : NULL);
             $ol->appendChild($wrapper);
         }
     }
     foreach ($fieldManager->fetchTypes() as $type) {
         if ($type = $fieldManager->create($type)) {
             array_push($types, $type);
         }
     }
     uasort($types, create_function('$a, $b', 'return strnatcasecmp($a->_name, $b->_name);'));
     foreach ($types as $type) {
         $defaults = array();
         $type->findDefaults($defaults);
         $type->setArray($defaults);
         $wrapper = new XMLElement('li');
         $wrapper->setAttribute('class', 'template field-' . $type->handle() . ($type->mustBeUnique() ? ' unique' : NULL));
         $wrapper->setAttribute('data-type', $type->handle());
         $type->set('sortorder', '-1');
         $type->displaySettingsPanel($wrapper);
         $ol->appendChild($wrapper);
     }
     $div->appendChild($ol);
     $fieldset->appendChild($div);
     $this->Form->appendChild($fieldset);
     $div = new XMLElement('div');
     $div->setAttribute('class', 'actions');
     $div->appendChild(Widget::Input('action[save]', __('Save Changes'), 'submit', array('accesskey' => 's')));
     $button = new XMLElement('button', __('Delete'));
     $button->setAttributeArray(array('name' => 'action[delete]', 'class' => 'button confirm delete', 'title' => __('Delete this section'), 'type' => 'submit', 'accesskey' => 'd', 'data-message' => __('Are you sure you want to delete this section?')));
     $div->appendChild($button);
     $this->Form->appendChild($div);
 }