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(); } }
/** * 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'); }
/** * 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; }