Open Journal Systems  3.3.0
InstallForm.inc.php
1 <?php
2 
17 import('classes.install.Install');
18 import('lib.pkp.classes.install.form.MaintenanceForm');
19 
21 
24 
27 
30 
33 
36 
39 
44  function __construct($request) {
45  parent::__construct($request, 'install/install.tpl');
46 
47  // FIXME Move the below options to an external configuration file?
48  $this->supportedLocales = AppLocale::getAllLocales();
49  $this->localesComplete = array();
50  foreach ($this->supportedLocales as $key => $name) {
51  $this->localesComplete[$key] = AppLocale::isLocaleComplete($key);
52  }
53 
54  $this->supportedClientCharsets = array (
55  'utf-8' => 'Unicode (UTF-8)',
56  'iso-8859-1' => 'Western (ISO-8859-1)'
57  );
58 
59  $this->supportedConnectionCharsets = array (
60  '' => __('common.notApplicable'),
61  'utf8' => 'Unicode (UTF-8)'
62  );
63 
64  $this->supportedDatabaseCharsets = array (
65  '' => __('common.notApplicable'),
66  'utf8' => 'Unicode (UTF-8)'
67  );
68 
69  $this->supportedDatabaseDrivers = array (
70  // <adodb-driver> => array(<php-module>, <name>)
71  'mysql' => array('mysql', 'MySQL'),
72  'mysqli' => array('mysqli', 'MySQLi'),
73  'postgres9' => array('pgsql', 'PostgreSQL'),
74  'oracle' => array('oci8', 'Oracle'),
75  'mssql' => array('mssql', 'MS SQL Server'),
76  'fbsql' => array('fbsql', 'FrontBase'),
77  'ibase' => array('ibase', 'Interbase'),
78  'firebird' => array('ibase', 'Firebird'),
79  'informix' => array('ifx', 'Informix'),
80  'sybase' => array('sybase', 'Sybase'),
81  'odbc' => array('odbc', 'ODBC'),
82  );
83 
84  // Validation checks for this form
85  $form = $this;
86  $this->addCheck(new FormValidatorInSet($this, 'locale', 'required', 'installer.form.localeRequired', array_keys($this->supportedLocales)));
87  $this->addCheck(new FormValidatorCustom($this, 'locale', 'required', 'installer.form.localeRequired', array('AppLocale', 'isLocaleValid')));
88  $this->addCheck(new FormValidatorInSet($this, 'clientCharset', 'required', 'installer.form.clientCharsetRequired', array_keys($this->supportedClientCharsets)));
89  $this->addCheck(new FormValidator($this, 'filesDir', 'required', 'installer.form.filesDirRequired'));
90  $this->addCheck(new FormValidator($this, 'adminUsername', 'required', 'installer.form.usernameRequired'));
91  $this->addCheck(new FormValidatorUsername($this, 'adminUsername', 'required', 'installer.form.usernameAlphaNumeric'));
92  $this->addCheck(new FormValidator($this, 'adminPassword', 'required', 'installer.form.passwordRequired'));
93  $this->addCheck(new FormValidatorCustom($this, 'adminPassword', 'required', 'installer.form.passwordsDoNotMatch', function($password) use ($form) {
94  return $password == $form->getData('adminPassword2');
95  }));
96  $this->addCheck(new FormValidatorEmail($this, 'adminEmail', 'required', 'installer.form.emailRequired'));
97  $this->addCheck(new FormValidatorInSet($this, 'databaseDriver', 'required', 'installer.form.databaseDriverRequired', array_keys($this->supportedDatabaseDrivers)));
98  $this->addCheck(new FormValidator($this, 'databaseName', 'required', 'installer.form.databaseNameRequired'));
99  }
100 
104  function display($request = null, $template = null) {
105  import('lib.pkp.classes.xslt.XSLTransformer');
106  $templateMgr = TemplateManager::getManager($request);
107  $templateMgr->assign(array(
108  'localeOptions' => $this->supportedLocales,
109  'localesComplete' => $this->localesComplete,
110  'clientCharsetOptions' => $this->supportedClientCharsets,
111  'connectionCharsetOptions' => $this->supportedConnectionCharsets,
112  'allowFileUploads' => get_cfg_var('file_uploads') ? __('common.yes') : __('common.no'),
113  'maxFileUploadSize' => get_cfg_var('upload_max_filesize'),
114  'databaseDriverOptions' => $this->checkDBDrivers(),
115  'supportsMBString' => PKPString::hasMBString() ? __('common.yes') : __('common.no'),
116  'phpIsSupportedVersion' => version_compare(PHP_REQUIRED_VERSION, PHP_VERSION) != 1,
117  'xslEnabled' => XSLTransformer::checkSupport(),
118  'xslRequired' => REQUIRES_XSL,
119  'phpRequiredVersion' => PHP_REQUIRED_VERSION,
120  'phpVersion' => PHP_VERSION,
121  ));
122 
123  parent::display($request, $template);
124  }
125 
129  function initData() {
130  $docRoot = dirname($_SERVER['DOCUMENT_ROOT']);
131  if (Core::isWindows()) {
132  // Replace backslashes with slashes for the default files directory.
133  $docRoot = str_replace('\\', '/', $docRoot);
134  }
135 
136  // Add a trailing slash for paths that aren't filesystem root
137  if ($docRoot !== '/') $docRoot .= '/';
138 
139  $this->_data = array(
140  'locale' => AppLocale::getLocale(),
141  'additionalLocales' => array(),
142  'clientCharset' => 'utf-8',
143  'connectionCharset' => 'utf8',
144  'filesDir' => $docRoot . 'files',
145  'databaseDriver' => 'mysql',
146  'databaseHost' => 'localhost',
147  'databaseUsername' => Application::getName(),
148  'databasePassword' => '',
149  'databaseName' => Application::getName(),
150  'createDatabase' => 1,
151  'oaiRepositoryId' => Application::getName() . '.' . $this->_request->getServerHost(),
152  'enableBeacon' => true,
153  );
154  }
155 
159  function readInputData() {
160  $this->readUserVars(array(
161  'locale',
162  'additionalLocales',
163  'clientCharset',
164  'connectionCharset',
165  'filesDir',
166  'adminUsername',
167  'adminPassword',
168  'adminPassword2',
169  'adminEmail',
170  'databaseDriver',
171  'databaseHost',
172  'databaseUsername',
173  'databasePassword',
174  'databaseName',
175  'createDatabase',
176  'oaiRepositoryId',
177  'enableBeacon',
178  ));
179 
180  if ($this->getData('additionalLocales') == null || !is_array($this->getData('additionalLocales'))) {
181  $this->setData('additionalLocales', array());
182  }
183  }
184 
190  function execute(...$functionArgs) {
191  parent::execute(...$functionArgs);
192 
193  $templateMgr = TemplateManager::getManager($this->_request);
194  $installer = new Install($this->_data);
195 
196  if ($installer->execute()) {
197  if (!$installer->wroteConfig()) {
198  // Display config file contents for manual replacement
199  $templateMgr->assign(array('writeConfigFailed' => true, 'configFileContents' => $installer->getConfigContents()));
200  }
201 
202  $templateMgr->display('install/installComplete.tpl');
203 
204  } else {
205  switch ($installer->getErrorType()) {
206  case INSTALLER_ERROR_DB:
207  $this->dbInstallError($installer->getErrorMsg());
208  break;
209  default:
210  $this->installError($installer->getErrorMsg());
211  break;
212  }
213  }
214 
215  $installer->destroy();
216  }
217 
223  function checkDBDrivers() {
224  $dbDrivers = array();
225  foreach ($this->supportedDatabaseDrivers as $driver => $info) {
226  list($module, $name) = $info;
227  if (!extension_loaded($module)) {
228  $name = '[ ' . $name . ' ]';
229  }
230  $dbDrivers[$driver] = $name;
231  }
232  return $dbDrivers;
233  }
234 }
235 
236 
XSLTransformer\checkSupport
static checkSupport()
Definition: XSLTransformer.inc.php:78
PKPLocale\getAllLocales
static & getAllLocales()
Definition: PKPLocale.inc.php:537
InstallForm\initData
initData()
Definition: InstallForm.inc.php:147
InstallForm\$supportedLocales
$supportedLocales
Definition: InstallForm.inc.php:26
FormValidatorUsername
Form validation check for usernames (lowercase alphanumeric with interior dash/underscore.
Definition: FormValidatorUsername.inc.php:19
MaintenanceForm\installError
installError($errorMsg, $translate=true)
Definition: MaintenanceForm.inc.php:49
Core\isWindows
static isWindows()
Definition: Core.inc.php:80
Form\setData
setData($key, $value=null)
Definition: Form.inc.php:229
InstallForm\display
display($request=null, $template=null)
Definition: InstallForm.inc.php:122
InstallForm\$supportedConnectionCharsets
$supportedConnectionCharsets
Definition: InstallForm.inc.php:44
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
FormValidatorEmail
Form validation check for email addresses.
Definition: FormValidatorEmail.inc.php:20
Application\getName
static getName()
Definition: Application.inc.php:60
Form\getData
getData($key)
Definition: Form.inc.php:220
PKPLocale\isLocaleComplete
static isLocaleComplete($locale)
Definition: PKPLocale.inc.php:478
InstallForm\$supportedDatabaseCharsets
$supportedDatabaseCharsets
Definition: InstallForm.inc.php:50
InstallForm\readInputData
readInputData()
Definition: InstallForm.inc.php:177
PKPString\hasMBString
static hasMBString()
Definition: PKPString.inc.php:80
InstallForm\$localesComplete
$localesComplete
Definition: InstallForm.inc.php:32
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
MaintenanceForm
Base form for system maintenance (install/upgrade).
Definition: MaintenanceForm.inc.php:19
InstallForm\execute
execute(... $functionArgs)
Definition: InstallForm.inc.php:208
InstallForm
Form for system installation.
Definition: InstallForm.inc.php:20
FormValidator
Class to represent a form validation check.
Definition: FormValidator.inc.php:23
MaintenanceForm\dbInstallError
dbInstallError($errorMsg)
Definition: MaintenanceForm.inc.php:59
InstallForm\checkDBDrivers
checkDBDrivers()
Definition: InstallForm.inc.php:241
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
FormValidatorInSet
Form validation check that checks if value is within a certain set.
Definition: FormValidatorInSet.inc.php:18
Install
Perform system installation.
Definition: Install.inc.php:28
FormValidatorCustom
Form validation check with a custom user function performing the validation check.
Definition: FormValidatorCustom.inc.php:18
AppLocale\getLocale
static getLocale()
Definition: env1/MockAppLocale.inc.php:40
InstallForm\$supportedClientCharsets
$supportedClientCharsets
Definition: InstallForm.inc.php:38
InstallForm\__construct
__construct($request)
Definition: InstallForm.inc.php:62
InstallForm\$supportedDatabaseDrivers
$supportedDatabaseDrivers
Definition: InstallForm.inc.php:56