예제 #1
0
 public function view()
 {
     if (isset($_POST['action']['submit'])) {
         $this->panelErrors = Extension_Dashboard::validatePanelOptions($this->panelType, $this->panelId);
         if (empty($this->panelErrors)) {
             $this->panelId = Extension_Dashboard::savePanel(array('id' => $this->panelId, 'label' => $this->panelLabel, 'placement' => $this->panelPlacement, 'type' => $this->panelType), $this->panelConfig);
         }
     } else {
         if (isset($_POST['action']['delete'])) {
             Extension_Dashboard::deletePanel($this->panelId);
             $this->_Result->setAttribute('id', $this->panelId);
             $this->_Result->setAttribute('placement', $this->panelPlacement);
             return;
         }
     }
     if (isset($this->panelId) && !empty($this->panelId)) {
         $this->panelConfig = Extension_Dashboard::getPanel($this->panelId);
         $this->panelLabel = $this->panelConfig['label'];
         $this->panelPlacement = $this->panelConfig['placement'];
     }
     if (isset($_POST['action']['submit']) && empty($this->panelErrors)) {
         $html = Extension_Dashboard::buildPanelHTML($this->panelConfig);
         $class = $html->getAttribute('class');
         $html->setAttribute('class', $class . ' new-panel');
         $this->_Result->setAttribute('id', $this->panelId);
         $this->_Result->setAttribute('placement', $this->panelPlacement);
         $this->_Result->setValue(sprintf('<![CDATA[%s]]>', $html->generate()));
     } else {
         $this->addHeaderToPage('Content-Type', 'text/html');
         $container = new XMLElement('form');
         $container->setAttribute('id', 'save-panel');
         $container->appendChild(new XMLElement('div', NULL, array('class' => 'top')));
         $heading = new XMLElement('h3', __('Configuration') . ' <span>' . (isset($this->panelLabel) ? $this->panelLabel : __('Untitled Panel')) . '<span>');
         $container->appendChild($heading);
         $config_options = Extension_Dashboard::buildPanelOptions($this->panelType, $this->panelId, $this->panelErrors);
         $primary = new XMLElement('div', NULL, array('class' => 'panel-config'));
         $fieldset = new XMLElement('fieldset', NULL, array('class' => 'settings'));
         $legend = new XMLElement('legend', __('General'));
         $fieldset->appendChild($legend);
         $group = new XMLElement('div', NULL, array('class' => 'group'));
         $group->appendChild(Widget::Label(__('Name'), Widget::Input('label', $this->panelLabel)));
         $group->appendChild(Widget::Label(__('Placement'), Widget::Select('placement', array(array('primary', $this->panelPlacement == 'primary', __('Main content')), array('secondary', $this->panelPlacement == 'secondary', __('Sidebar'))))));
         $fieldset->appendChild($group);
         $primary->appendChild($fieldset);
         if ($config_options) {
             $primary->appendChild($config_options);
         }
         $actions = new XMLElement('div', NULL, array('class' => 'actions'));
         $actions->appendChild(Widget::Input('action[submit]', __('Save Panel'), 'submit', array('class' => 'button create')));
         $actions->appendChild(Widget::Input('action[cancel]', __('Cancel'), 'submit'));
         if ($this->panelId) {
             $actions->appendChild(new XMLElement('button', __('Delete Panel'), array('class' => 'delete', 'name' => 'action[delete]')));
         }
         $primary->appendChild($actions);
         $primary->appendChild(Widget::Input('id', $this->panelId, 'hidden'));
         $primary->appendChild(Widget::Input('type', $this->panelType, 'hidden'));
         $container->appendChild($primary);
         if (Symphony::isXSRFEnabled()) {
             $container->prependChild(XSRF::formToken());
         }
         $this->_Result = $container;
     }
 }
예제 #2
0
 public function __viewIndex()
 {
     $this->setPageType('form');
     $this->setTitle(__('Symphony') . ' &ndash; ' . __('Dashboard'));
     $this->addScriptToHead(URL . '/extensions/dashboard/assets/jquery-ui-1.11.4.custom.min.js', 29421);
     $this->addStylesheetToHead(URL . '/extensions/dashboard/assets/dashboard.index.css', 'screen', 29422);
     $this->addScriptToHead(URL . '/extensions/dashboard/assets/dashboard.index.js', 29423);
     // https://github.com/symphonycms/symphony-2/wiki/Migration-Guide-to-2.5-for-Developers#properties
     $author = null;
     if (is_callable(array('Symphony', 'Author'))) {
         $author = Symphony::Author();
     } else {
         $author = Administration::instance()->Author;
     }
     // Add welcome message
     $hour = date('H');
     $welcome = __('Nice to meet you');
     if ($author->get('last_see') != NULL) {
         if ($hour < 10) {
             $welcome = __('Good morning');
         } elseif ($hour < 17) {
             $welcome = __('Welcome back');
         } else {
             $welcome = __('Good evening');
         }
     }
     $panel_types = array();
     /**
      * Ask panel extensions to list their panel types.
      *
      * @delegate DashboardPanelTypes
      * @param string $context
      * '/backend/'
      * @param array $types
      */
     Symphony::ExtensionManager()->notifyMembers('DashboardPanelTypes', '/backend/', array('types' => &$panel_types));
     if ($author->isDeveloper()) {
         $panel_types_options = array(array('', FALSE, __('New Panel')));
         natsort($panel_types);
         foreach ($panel_types as $handle => $name) {
             $panel_types_options[] = array($handle, false, $name);
         }
         $actions = array();
         $actions[] = Widget::Select('panel-type', $panel_types_options);
         $actions[] = Widget::Anchor(__('Enable Editing'), '#', __('Disable Editing'), 'edit-mode button');
     }
     $this->Form->setAttribute('class', 'two columns');
     $this->appendSubheading($welcome . ', ' . $author->get('first_name'), $actions);
     $this->insertDrawer(Widget::Drawer('dashboard', 'Dashboard', new XMLElement('span', ''), 'closed', time()), 'horizontal', FALSE);
     $container = new XMLElement('div', NULL, array('id' => 'dashboard'));
     $primary = new XMLElement('div', NULL, array('class' => 'primary column sortable-container'));
     $secondary = new XMLElement('div', NULL, array('class' => 'secondary column sortable-container'));
     $panels = Extension_Dashboard::getPanels();
     foreach ($panels as $p) {
         $html = Extension_Dashboard::buildPanelHTML($p);
         switch ($p['placement']) {
             case 'primary':
                 $primary->appendChild($html);
                 break;
             case 'secondary':
                 $secondary->appendChild($html);
                 break;
         }
     }
     $container->appendChild($primary);
     $container->appendChild($secondary);
     $this->Form->appendChild($container);
 }