Ejemplo n.º 1
0
 /**
  * Display the widget
  *
  * @return string The generated HTML
  */
 public function display()
 {
     // The number of updates
     $updates = array();
     $titles = array();
     $api = new HawkApi();
     $plugins = array_map(function ($plugin) {
         return $plugin->getDefinition('version');
     }, Plugin::getAll(false));
     $themes = array_map(function ($theme) {
         return $theme->getDefinition('version');
     }, Theme::getAll());
     try {
         $updates = $api->getAllAvailableUpdates($plugins, $themes);
     } catch (\Hawk\HawkApiException $e) {
         $updates = array();
     }
     if (!empty($updates)) {
         if (!empty($updates['hawk'])) {
             \Hawk\Plugins\Main\MenuItem::getByName('admin.settings')->label .= View::make(Plugin::current()->getView('available-updates.tpl'), array('updates' => count($updates['hawk']), 'title' => Lang::get('admin.available-updates-title-core', array('number' => count($updates['hawk'])), count($updates['hawk']))));
         }
         if (!empty($updates['plugins'])) {
             \Hawk\Plugins\Main\MenuItem::getByName('admin.plugins')->label .= View::make(Plugin::current()->getView('available-updates.tpl'), array('updates' => count($updates['plugins']), 'title' => Lang::get('admin.available-updates-title-plugins', array('number' => count($updates['plugins'])), count($updates['plugins']))));
         }
         if (!empty($updates['themes'])) {
             \Hawk\Plugins\Main\MenuItem::getByName('admin.themes')->label .= View::make(Plugin::current()->getView('available-updates.tpl'), array('updates' => count($updates['themes']), 'title' => Lang::get('admin.available-updates-title-plugins', array('number' => count($updates['themes'])), count($updates['themes']))));
         }
     }
     return '';
 }
Ejemplo n.º 2
0
 /**
  * Lists all of the themes and allows the user to change
  * the theme for the different site types.
  *
  * @return strng
  */
 public function indexSection()
 {
     $this->setOutputType(self::_OT_CONFIG);
     // Check which site type to change theme for
     try {
         $siteType = strtolower($this->_input->get('type'));
     } catch (Input_KeyNoExist $e) {
         $siteType = $this->_router->getDefaultSiteType();
     }
     if (!$this->_router->siteTypeExists($siteType)) {
         $this->_event->error(t('Selected site type does not exist'));
         $siteType = $this->_router->getDefaultSiteType();
     }
     $this->setTitle(sprintf(t('"%s" theme & style'), ucfirst($siteType)), false);
     $view = $this->loadView('overview.html');
     $view->assign(array('THEMES' => Theme::getAll(), 'CURRENT' => $this->_config->get('theme/' . $siteType . '_default'), 'SITE_TYPE' => $siteType));
     $view->assignHtml(array('CSRF' => $this->_input->createToken(true)));
     return $view->getOutput();
 }
Ejemplo n.º 3
0
 /**
  * Create a custom theme
  */
 public function create()
 {
     $form = new Form(array('id' => 'create-theme-form', 'labelWidth' => '20em', 'fieldsets' => array('form' => array(new TextInput(array('name' => 'name', 'required' => true, 'pattern' => '/^[\\w\\-]+$/', 'label' => Lang::get($this->_plugin . '.theme-create-name-label'))), new TextInput(array('name' => 'title', 'required' => true, 'label' => Lang::get($this->_plugin . '.theme-create-title-label'))), new SelectInput(array('name' => 'extends', 'invitation' => '-', 'options' => array_map(function ($theme) {
         return $theme->getTitle();
     }, Theme::getAll()), 'label' => Lang::get($this->_plugin . '.theme-create-extends-label'))), new TextInput(array('name' => 'version', 'required' => true, 'pattern' => '/^(\\d+\\.){2,3}\\d+$/', 'label' => Lang::get($this->_plugin . '.theme-create-version-label'), 'default' => '0.0.1')), new TextInput(array('name' => 'author', 'label' => Lang::get($this->_plugin . '.theme-create-author-label')))), 'submits' => array(new SubmitInput(array('name' => 'valid', 'value' => Lang::get('main.valid-button'))), new ButtonInput(array('name' => 'cancel', 'value' => Lang::get('main.cancel-button'), 'onclick' => 'app.dialog("close")')))), 'onsuccess' => 'app.dialog("close"); app.load(app.getUri("available-themes"), { selector : $("#admin-themes-select-tab")} );'));
     if (!$form->submitted()) {
         // Display the form
         return View::make(Theme::getSelected()->getView('dialogbox.tpl'), array('title' => Lang::get($this->_plugin . '.theme-create-title'), 'icon' => 'picture-o', 'page' => $form));
     } else {
         if ($form->check()) {
             $dir = THEMES_DIR . $form->getData('name') . '/';
             if (is_dir($dir)) {
                 $form->error('name', Lang::get($this->_plugin . '.theme-create-name-already-exists-error'));
                 return $form->response(Form::STATUS_CHECK_ERROR, Lang::get($this->_plugin . '.theme-create-name-already-exists-error'));
             }
             // The theme can be created
             try {
                 // Create the main directory
                 if (!mkdir($dir)) {
                     throw new \Exception('Impossible to create the directory ' . $dir);
                 }
                 // Create the directory views
                 if (!mkdir($dir . 'views')) {
                     throw new \Exception('Impossible to create the directory ' . $dir . 'views');
                 }
                 // Get the parent theme
                 $parent = null;
                 if ($form->getData('extends')) {
                     $parent = Theme::get($form->getData('extends'));
                 }
                 // Create the file manifest.json
                 $conf = array('title' => $form->getData('title'), 'version' => $form->getData('version'), 'author' => $form->getData('author'));
                 if ($parent) {
                     $conf['extends'] = $parent->getName();
                 }
                 if (file_put_contents($dir . Theme::MANIFEST_BASENAME, json_encode($conf, JSON_PRETTY_PRINT)) === false) {
                     throw new \Exception('Impossible to create the file ' . $dir . Theme::MANIFEST_BASENAME);
                 }
                 $theme = Theme::get($form->getData('name'));
                 if ($parent) {
                     // The theme extends another one, make a copy of the parent theme except manifest.json and views
                     foreach (glob($parent->getRootDir() . '*') as $element) {
                         if (!in_array(basename($element), array(Theme::MANIFEST_BASENAME, 'views'))) {
                             App::fs()->copy($element, $theme->getRootDir());
                         }
                     }
                 } else {
                     // Create the directory less
                     if (!mkdir($dir . 'less')) {
                         throw new \Exception('Impossible to create the directory ' . $dir . 'less');
                     }
                     // Create the file theme.less
                     if (!touch($theme->getBaseLessFile())) {
                         throw new \Exception('Impossible to create the file ' . $theme->getBaseLessFile());
                     }
                 }
                 return $form->response(Form::STATUS_SUCCESS, Lang::get($this->_plugin . '.theme-create-success'));
             } catch (\Exception $e) {
                 if (is_dir($dir)) {
                     App::fs()->remove($dir);
                 }
                 return $form->response(Form::STATUS_ERROR, DEBUG_MODE ? $e->getMessage() : Lang::get($this->_plugin . '.theme-create-error'));
             }
         }
     }
 }
Ejemplo n.º 4
0
 /**
  * Allows the current user to edit account details, such as password and email.
  *
  * @return string
  */
 public function settingsSection()
 {
     if (!$this->_session->isLoggedIn()) {
         throw new Module_NoPermission();
     }
     $this->setTitle(t('Edit account settings'));
     // Gather user details
     $this->displayPageLinks();
     $user = $this->_session->getUser();
     if (!isset($user['theme'])) {
         $user['theme'] = null;
     }
     /**
      * Prepare form validation
      */
     $form = new View_Form('profile/settings.html', 'users');
     $form->addElement('users/passwd/current', null, t('Current password'), array(array($this, 'validatePassword')));
     $form->addElement('users/passwd/new', null, t('Password'), array(new Validator_Length(4, 32), new Validator_Confirm('users/passwd/conf', Validator_Confirm::_POST)), false);
     $form->addElement('users/hide_email', $user['hide_email'], t('Hide email'), new Validator_Bool());
     $form->addElement('users/theme', $user['theme'], t('Theme name'), new Validator_InArray(Theme::getAll()), false);
     try {
         // Add Email validation if needed
         $emailConf = $this->_input->post('users/email_confirm');
         if ($emailConf) {
             $form->addElement('users/email', $user['email'], t('Email'), array(new Validator_Email(), new Validator_Confirm($emailConf)));
         } else {
             throw new Exception();
         }
     } catch (Exception $e) {
         $form->assign(array('USERS' => array('EMAIL' => $user['email'])));
     }
     if ($form->hasInput() && $form->isValid()) {
         try {
             $fd = $form->getValues('users');
             if (empty($fd['theme'])) {
                 $fd['theme'] = null;
             }
             $fd['password'] = $fd['passwd']['new'];
             unset($fd['passwd']);
             $this->_ugmanager->editUser($this->_session->getUserId(), $fd);
             $this->_event->success(t('Updated Profile'));
             return zula_redirect($this->_router->makeUrl('users', 'profile', 'settings'));
         } catch (Exception $e) {
             $this->_event->error($e->getMessage());
         }
     }
     return $form->getOutput();
 }
 public function gestionThemes()
 {
     $this->load->model("Theme");
     $data['themes'] = Theme::getAll();
     $this->load->view("gestionThemes", $data);
 }