Пример #1
0
 public function submitAction()
 {
     $installer = new ModuleInstaller();
     $ret = $installer->install('system');
     if (!$ret) {
         $this->hasForm = true;
         $this->content = '<p class="alert alert-danger">' . _s('System module installation is failed. Please continue to try again.') . '</p>' . $installer->renderMessage() . '<input type="hidden" name="page" value="admin" />' . '<input type="hidden" name="retry" value="1" />' . '<input type="hidden" name="action" value="clear" />';
         return;
     }
     $vars = $this->vars;
     $vars['adminusername'] = $this->request->getPost('adminusername');
     $vars['adminmail'] = $this->request->getPost('adminmail');
     $vars['adminpass'] = $this->request->getPost('adminpass');
     $vars['adminpass2'] = $this->request->getPost('adminpass2');
     $vars['adminname'] = $this->request->getPost('adminname');
     $this->setPersist(static::PERSIST_SITE, $vars);
     $error = array();
     if (empty($vars['adminusername'])) {
         $error['name'][] = _s('Username is required.');
     }
     if (empty($vars['adminname'])) {
         $error['name'][] = _s('Name is required.');
     }
     if (empty($vars['adminmail'])) {
         $error['email'][] = _s('Email is required.');
     }
     if (empty($vars['adminpass'])) {
         $error['pass'][] = _s('Password is required.');
     }
     if (!filter_var($vars['adminmail'], FILTER_VALIDATE_EMAIL)) {
         $error['email'][] = _s('Invalid Email.');
     }
     if ($vars['adminpass'] != $vars['adminpass2']) {
         $error['pass'][] = _s('The two passwords do not match');
     }
     if (!$error) {
         // Update site generic settings
         $configModel = Pi::model('config');
         $configModel->update(array('value' => $vars['adminmail']), array('name' => 'adminmail'));
         $configModel->update(array('value' => $vars['adminname']), array('name' => 'adminname'));
         $config = $this->getPersist(static::PERSIST_ENGINE);
         if (!empty($config['sitename'])) {
             $configModel->update(array('value' => $config['sitename']), array('name' => 'sitename'));
         }
         if (!empty($config['slogan'])) {
             $configModel->update(array('value' => $config['slogan']), array('name' => 'slogan'));
         }
         if (!empty($config['environment'])) {
             $configModel->update(array('value' => $config['environment']), array('name' => 'environment'));
         }
         $locale = $this->wizard->getLocale();
         if ($locale) {
             $configModel->update(array('value' => $locale), array('name' => 'locale'));
         }
         $charset = $this->wizard->getCharset();
         if ($charset) {
             $configModel->update(array('value' => $charset), array('name' => 'charset'));
         }
         $location = Pi::service('geo_ip')->get($_SERVER['REMOTE_ADDR'], 'location');
         if ($location && !empty($location['timezone'])) {
             $configModel->update(array('value' => $location['timezone']), array('name' => 'timezone'));
         }
         // Create root admin user
         $adminData = array('identity' => $vars['adminusername'], 'credential' => $vars['adminpass'], 'email' => $vars['adminmail'], 'name' => $vars['adminname']);
         $uid = Pi::api('user', 'system')->addUser($adminData);
         $this->status = $uid ? true : false;
         Pi::api('user', 'system')->activateUser($uid);
         Pi::api('user', 'system')->setRole($uid, array('webmaster', 'admin'));
         // Create system accounts
         $accounts = array('manager' => array('name' => __('Manager'), 'role' => array()), 'moderator' => array('name' => __('Moderator'), 'role' => array()), 'editor' => array('name' => __('Editor'), 'role' => array()), 'staff' => array('name' => __('Staff'), 'role' => array('staff')), 'member' => array('name' => __('Member')));
         foreach ($accounts as $identity => $data) {
             $userData = array('identity' => $identity, 'email' => $identity . '@pialog.org', 'credential' => $adminData['credential'], 'name' => $data['name']);
             $uid = Pi::api('user', 'system')->addUser($userData);
             Pi::api('user', 'system')->activateUser($uid);
             if (!empty($data['role'])) {
                 Pi::api('user', 'system')->setRole($uid, $data['role']);
             }
         }
     }
     if ($this->status < 1) {
         $this->loadForm();
     }
 }
Пример #2
0
 /**
  * Install a module and publish its asset
  */
 public function installAction()
 {
     $directory = _get('directory', 'regexp', array('regexp' => '/^[a-z0-9_]+$/i'));
     $name = _get('name', 'regexp', array('regexp' => '/^[a-z0-9_]+$/i')) ?: $directory;
     $title = _get('title');
     $result = false;
     $error = '';
     $message = '';
     $details = array();
     if (empty($directory) && $name) {
         $directory = $name;
     }
     if (!$directory) {
         $error = _a('Directory is not specified.');
     }
     if (!$error) {
         $meta = Pi::service('module')->loadMeta($directory, 'meta');
         if (!$meta) {
             $error = sprintf(_a('Meta data are not loaded for "%s".'), $directory);
         }
     }
     if (!$error) {
         $installed = Pi::registry('module')->read($name) ? true : false;
         if (!$installed) {
             $installedModules = $this->installedModules();
             if (in_array($directory, $installedModules) && empty($meta['clonable'])) {
                 $installed = false;
             }
         }
         if ($installed) {
             $error = _a('The module has already been installed.');
         }
     }
     if (!$error) {
         $args = array('directory' => $directory, 'title' => $title ?: $meta['title']);
         $installer = new ModuleInstaller();
         $result = $installer->install($name, $args);
         $details = $installer->getResult();
     }
     if ($result) {
         $message = sprintf(_a('Module "%s" is installed successfully.'), $name ?: $directory);
         Pi::service('event')->trigger('module_install', $name ?: $directory);
     } elseif ($directory) {
         $message = sprintf(_a('Module "%s" is not installed.'), $name ?: $directory);
     } else {
         $message = _a('Module is not installed.');
     }
     $data = array('title' => _a('Module installation'), 'result' => $result, 'error' => $error, 'message' => $message, 'details' => $details, 'url' => $this->url('', array('action' => 'available')));
     $this->view()->assign($data);
     $this->view()->setTemplate('module-operation');
 }
Пример #3
0
 /**
  * Install modules automatically
  *
  * @param Event $e
  * @return bool
  */
 public function installApplication(Event $e)
 {
     $apps = $this->preInstalledModules;
     //$installer = new ModuleInstaller;
     foreach ($apps as $app) {
         $installer = new ModuleInstaller();
         $ret = $installer->install($app);
     }
     $categories = array(array('title' => _a('Application'), 'order' => 1, 'modules' => array('user', 'uclient', 'article', 'document', 'solution', 'video', 'forum', 'page', 'demo')), array('title' => _a('Service'), 'order' => 2, 'modules' => array('uclient', 'message', 'tag', 'comment', 'search', 'widget', 'media', 'saml')));
     $model = Pi::model('category', 'system');
     foreach ($categories as $category) {
         $row = $model->createRow($category);
         $row->save();
     }
     return true;
 }