示例#1
0
 /**
  * Customize the current selected theme
  */
 public function customize()
 {
     $theme = Theme::getSelected();
     $variables = $theme->getEditableVariables();
     $options = $theme->getVariablesCustomValues();
     $param = array('id' => 'custom-theme-form', 'upload' => true, 'action' => App::router()->getUri('customize-theme'), 'fieldsets' => array('form' => array(new HiddenInput(array('name' => 'compiled'))), '_submits' => array(new SubmitInput(array('name' => 'valid', 'value' => Lang::get('main.valid-button'))), new ButtonInput(array('name' => 'reset', 'value' => Lang::get($this->_plugin . '.theme-custom-reset'), 'class' => 'btn-default', 'attributes' => array('e-click' => 'reset'))))));
     foreach ($variables as $var) {
         switch ($var['type']) {
             case 'color':
                 $input = new ColorInput(array('name' => $var['name'], 'label' => View::makeFromString($var['description']), 'value' => !empty($options[$var['name']]) ? $options[$var['name']] : $var['default']));
                 break;
             case 'file':
                 $input = new FileInput(array('name' => $var['name'], 'label' => View::makeFromString($var['description'])));
                 break;
             default:
                 $input = new TextInput(array('name' => $var['name'], 'label' => View::makeFromString($var['description']), 'value' => !empty($options[$var['name']]) ? $options[$var['name']] : $var['default']));
                 break;
         }
         $input->attributes = array('e-value' => 'vars["' . $input->name . '"]');
         $input->labelWidth = '25em';
         $param['fieldsets']['form'][] = $input;
     }
     $form = new Form($param);
     $submitted = $form->submitted();
     if (!$submitted) {
         return '<link rel="stylesheet/less" type="text/css" href="' . Theme::getSelected()->getBaseLessUrl() . '" title="custom-base-theme"/>' . $form->display();
     } else {
         try {
             $options = array();
             foreach ($variables as $var) {
                 if ($var['type'] == 'file') {
                     $upload = Upload::getInstance($var['name']);
                     if ($upload) {
                         $dir = $theme->getStaticDir() . 'medias/';
                         if (!is_dir($dir)) {
                             mkdir($dir, 0755);
                         }
                         $file = $upload->getFile();
                         $upload->move($file, $dir);
                         $options[$var['name']] = $theme->getMediasUrl($filename);
                     }
                 } else {
                     $options[$var['name']] = $form->getData($var['name']);
                 }
             }
             $theme->setVariablesCustomValues($options);
             // Save the compiled CSS to avaoid to parse it again
             file_put_contents($theme->getStaticCssFile(), $form->getData('compiled'));
             $form->addReturn('href', $theme->getBaseCssUrl());
             return $form->response(Form::STATUS_SUCCESS);
         } catch (Exception $e) {
             return $form->response(Form::STATUS_ERROR, DEBUG_MODE ? $e->getMessage() : '');
         }
     }
 }
示例#2
0
 /**
  * Display a new tab
  */
 public function newTab()
 {
     $type = Option::get($this->_plugin . '.home-page-type');
     // Display a page of the application
     if ($type == 'page') {
         $page = Option::get($this->_plugin . '.home-page-item');
         $route = App::router()->getRouteByAction($page);
         if ($route && $route->isAccessible()) {
             App::response()->redirectToAction($page);
             return;
         } else {
             // The route is not accessible
             if (Option::get($this->_plugin . '.home-page-html')) {
                 // Display a custom page
                 $type = 'custom';
             } else {
                 $type = 'default';
             }
         }
     }
     // Display a custom page
     if ($type == 'custom') {
         $page = View::makeFromString(Option::get($this->_plugin . '.home-page-html'));
     } else {
         // Display the default new tab page
         $page = '';
     }
     return View::make(Theme::getSelected()->getView('new-tab.tpl'), array('custom' => $page));
 }
示例#3
0
 /**
  * Register a new user
  */
 public function register()
 {
     $param = array('id' => 'register-form', 'model' => 'User', 'reference' => array('id' => -1), 'fieldsets' => array('global' => array('legend' => Lang::get($this->_plugin . '.register-connection-legend'), new TextInput(array('name' => 'username', 'required' => true, 'unique' => true, 'pattern' => '/^\\w+$/', 'label' => Lang::get($this->_plugin . '.register-username-label'))), new EmailInput(array('name' => 'email', 'required' => true, 'unique' => true, 'label' => Lang::get($this->_plugin . '.register-email-label'))), new PasswordInput(array('name' => 'password', 'required' => true, 'encrypt' => array('\\Hawk\\Crypto', 'saltHash'), 'label' => Lang::get($this->_plugin . '.register-password-label'))), new PasswordInput(array('name' => 'passagain', 'required' => true, 'independant' => true, 'label' => Lang::get($this->_plugin . '.register-passagain-label'), 'compare' => 'password'))), 'profile' => array('legend' => Lang::get($this->_plugin . '.register-profile-legend')), 'terms' => array(Option::get($this->_plugin . '.confirm-register-terms') ? new CheckboxInput(array('name' => 'terms', 'required' => true, 'independant' => true, 'labelWidth' => 'auto', 'label' => Lang::get($this->_plugin . '.register-terms-label', array('uri' => App::router()->getUri('terms'))))) : null), '_submits' => array(new SubmitInput(array('name' => 'valid', 'value' => Lang::get($this->_plugin . '.register-button'))), new ButtonInput(array('name' => 'cancel', 'value' => Lang::get($this->_plugin . '.cancel-button'), 'href' => App::router()->getUri('login'), 'target' => 'dialog')))), 'onsuccess' => 'app.dialog(app.getUri("login"))');
     $questions = ProfileQuestion::getRegisterQuestions();
     foreach ($questions as $question) {
         $field = json_decode($question->parameters, true);
         //if(!empty($field->roles) && in_array(Option::get('roles.default-role'), $field->roles)) {
         if ($question->isAllowedForRole(Option::get('roles.default-role'))) {
             $classname = 'Hawk\\' . ucwords($question->type) . 'Input';
             $field['name'] = $question->name;
             $field['independant'] = true;
             $field['label'] = Lang::get('admin.profile-question-' . $question->name . '-label');
             // At register, no field is readonly!
             $field['readonly'] = false;
             $param['fieldsets']['profile'][] = new $classname($field);
         }
     }
     $form = new Form($param);
     if (!$form->submitted()) {
         return Dialogbox::make(array('page' => $form->__toString(), 'icon' => 'sign-in', 'title' => Lang::get($this->_plugin . '.login-form-title'), 'width' => '50rem'));
     } else {
         if ($form->check()) {
             try {
                 $user = new User(array('username' => $form->inputs['username']->dbvalue(), 'email' => $form->inputs['email']->dbvalue(), 'password' => $form->inputs['password']->dbvalue(), 'active' => Option::get($this->_plugin . '.confirm-register-email') ? 0 : 1, 'createTime' => time(), 'createIp' => App::request()->clientIp(), 'roleId' => Option::get('roles.default-role')));
                 $user->save();
                 foreach ($questions as $question) {
                     if ($question->type === 'file') {
                         $upload = Upload::getInstance($question->name);
                         if ($upload) {
                             $file = $upload->getFile(0);
                             $dir = Plugin::current()->getUserfilesDir() . 'img/';
                             $url = Plugin::current()->getUserfilesUrl() . 'img/';
                             if (!is_dir($dir)) {
                                 mkdir($dir, 0755, true);
                             }
                             $upload->move($file, $dir);
                             $user->setProfileData($question->name, $url . $file->basename);
                         }
                     } else {
                         $user->setProfileData($question->name, $form->inputs[$question->name]->dbvalue());
                     }
                 }
                 $user->saveProfile();
                 if (Option::get($this->_plugin . '.confirm-register-email')) {
                     // Send an email to validate the registration
                     $tokenData = array('username' => $user->username, 'email' => $user->email, 'createTime' => $user->createTime, 'createIp' => $user->createIp);
                     $token = Crypto::aes256Encode(json_encode($tokenData));
                     $url = App::router()->getUrl('validate-registration', array('token' => $token));
                     $data = array('themeBaseCss' => Theme::getSelected()->getBaseCssUrl(), 'themeCustomCss' => Theme::getSelected()->getCustomCssUrl(), 'logoUrl' => Option::get($this->_plugin . '.logo') ? Plugin::current()->getUserfilesUrl(Option::get($this->_plugin . '.logo')) : Plugin::current()->getStaticUrl('img/hawk-logo.png'), 'sitename' => Option::get($this->_plugin . '.sitename'), 'url' => $url);
                     if (Option::get($this->_plugin . '.confirm-email-content')) {
                         $mailContent = View::makeFromString(Option::get($this->_plugin . '.confirm-email-content'), $data);
                     } else {
                         $mailContent = View::make(Plugin::current()->getView('registration-validation-email.tpl'), $data);
                     }
                     $mail = new Mail();
                     $mail->from(Option::get($this->_plugin . '.mailer-from'))->fromName(Option::get($this->_plugin . '.mailer-from-name'))->to($user->email)->title(Lang::get('main.register-email-title', array('sitename' => Option::get('main.sitename'))))->content($mailContent)->subject(Lang::get($this->_plugin . '.register-email-title', array('sitename' => Option::get($this->_plugin . '.sitename'))))->send();
                     return $form->response(Form::STATUS_SUCCESS, Lang::get($this->_plugin . '.register-send-email-success'));
                 } else {
                     // validate the registration
                     return $form->response(Form::STATUS_SUCCESS, Lang::get($this->_plugin . '.register-success'));
                 }
             } catch (Exception $e) {
                 return $form->response(Form::STATUS_ERROR, DEBUG_MODE ? $e->getMessage() : Lang::get($this->_plugin . '.register-error'));
             }
         }
     }
 }