Ivan - Add installation service backend [skip ci]
This commit is contained in:
parent
a183d1ed79
commit
46e3e65a0b
|
@ -22,11 +22,11 @@ class InstallLayout extends React.Component {
|
|||
|
||||
componentDidMount() {
|
||||
API.call({
|
||||
path: '/system/installation-step',
|
||||
path: '/system/installation-done',
|
||||
data: {}
|
||||
}).then((result) => {
|
||||
if(result.data != this.getCurrentStep()) {
|
||||
browserHistory.push('/install/step-' + (result.data + 1));
|
||||
if(result.data == 1) {
|
||||
browserHistory.push('/install/step-6');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import React from 'react';
|
||||
import {browserHistory} from 'react-router';
|
||||
import { connect } from 'react-redux'
|
||||
|
||||
import i18n from 'lib-app/i18n';
|
||||
import API from 'lib-app/api-call';
|
||||
|
@ -54,6 +55,7 @@ class InstallStep4UserSystem extends React.Component {
|
|||
API.call({
|
||||
path: '/system/init-settings',
|
||||
data: {
|
||||
'language': this.props.language,
|
||||
'user-system-enabled': form['user-system-enabled'],
|
||||
'registration': form['registration']
|
||||
}
|
||||
|
@ -65,4 +67,9 @@ class InstallStep4UserSystem extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
export default InstallStep4UserSystem;
|
||||
|
||||
export default connect((store) => {
|
||||
return {
|
||||
language: store.config.language
|
||||
};
|
||||
})(InstallStep4UserSystem);
|
|
@ -1,10 +0,0 @@
|
|||
<?php
|
||||
$env['MYSQL_SERVER'] = getenv('MYSQL_SERVER');
|
||||
$env['MYSQL_USER'] = getenv('MYSQL_USER');
|
||||
$env['MYSQL_PASSWORD'] = getenv('MYSQL_PASSWORD');
|
||||
$env['MYSQL_DATABASE'] = getenv('MYSQL_DATABASE');
|
||||
|
||||
$mysql_host = ($env['MYSQL_SERVER']) ? $env['MYSQL_SERVER'] : 'localhost';
|
||||
$mysql_user = ($env['MYSQL_USER']) ? $env['MYSQL_USER'] : 'root';
|
||||
$mysql_password = ($env['MYSQL_PASSWORD']) ? $env['MYSQL_PASSWORD'] : '';
|
||||
$mysql_database = ($env['MYSQL_DATABASE']) ? $env['MYSQL_DATABASE'] : 'development';
|
|
@ -1,5 +1,9 @@
|
|||
<?php
|
||||
require_once 'system/check-requirements.php';
|
||||
require_once 'system/init-database.php';
|
||||
require_once 'system/init-settings.php';
|
||||
require_once 'system/init-admin.php';
|
||||
require_once 'system/installation-done.php';
|
||||
require_once 'system/get-settings.php';
|
||||
require_once 'system/edit-settings.php';
|
||||
require_once 'system/add-department.php';
|
||||
|
@ -25,7 +29,11 @@ require_once 'system/download.php';
|
|||
$systemControllerGroup = new ControllerGroup();
|
||||
$systemControllerGroup->setGroupPath('/system');
|
||||
|
||||
$systemControllerGroup->addController(new CheckRequirementsController);
|
||||
$systemControllerGroup->addController(new InitDatabaseController);
|
||||
$systemControllerGroup->addController(new InitSettingsController);
|
||||
$systemControllerGroup->addController(new InitAdminController);
|
||||
$systemControllerGroup->addController(new InstallationDoneController);
|
||||
$systemControllerGroup->addController(new GetSettingsController);
|
||||
$systemControllerGroup->addController(new EditSettingsController);
|
||||
$systemControllerGroup->addController(new AddDepartmentController);
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
class CheckRequirementsController extends Controller {
|
||||
const PATH = '/check-requirements';
|
||||
const METHOD = 'POST';
|
||||
|
||||
const requiredPHPVersion = '5.6';
|
||||
|
||||
public function validations() {
|
||||
return [
|
||||
'permission' => 'any',
|
||||
'requestData' => []
|
||||
];
|
||||
}
|
||||
|
||||
public function handler() {
|
||||
Response::respondSuccess([
|
||||
'phpVersion' => [
|
||||
'name' => 'PHP Version',
|
||||
'value' => phpversion(),
|
||||
'ok' => $this->checkVersion()
|
||||
],
|
||||
'PDO' => [
|
||||
'name' => 'PDO Module',
|
||||
'value' => class_exists('PDO') ? 'Available' : 'Not available',
|
||||
'ok' => class_exists('PDO')
|
||||
],
|
||||
'configFile' => [
|
||||
'name' => 'File: /api/config.php',
|
||||
'value' => is_writable('config.php') ? 'Writable' : 'Not writable',
|
||||
'ok' => is_writable('config.php')
|
||||
],
|
||||
'files' => [
|
||||
'name' => 'Folder: /api/files',
|
||||
'value' => is_writable('files/') ? 'Writable' : 'Not writable',
|
||||
'ok' => is_writable('files/')
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
private function checkVersion() {
|
||||
$requiredVersion = explode('.', CheckRequirementsController::requiredPHPVersion);
|
||||
$currentVersion = explode('.', phpversion());
|
||||
|
||||
if($currentVersion[0] > $requiredVersion[0]) return true;
|
||||
else if($currentVersion[0] < $requiredVersion[0]) return false;
|
||||
else return $currentVersion[1] >= $requiredVersion[1];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
use Respect\Validation\Validator as DataValidator;
|
||||
DataValidator::with('CustomValidations', true);
|
||||
|
||||
class InitAdminController extends Controller {
|
||||
const PATH = '/init-admin';
|
||||
const METHOD = 'POST';
|
||||
|
||||
public function validations() {
|
||||
return [
|
||||
'permission' => 'any',
|
||||
'requestData' => [
|
||||
'name' => [
|
||||
'validation' => DataValidator::length(2, 55),
|
||||
'error' => ERRORS::INVALID_NAME
|
||||
],
|
||||
'email' => [
|
||||
'validation' => DataValidator::email(),
|
||||
'error' => ERRORS::INVALID_EMAIL
|
||||
],
|
||||
'password' => [
|
||||
'validation' => DataValidator::length(5, 200),
|
||||
'error' => ERRORS::INVALID_PASSWORD
|
||||
],
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function handler() {
|
||||
if(!Staff::isTableEmpty()) {
|
||||
throw new Exception(ERRORS::INIT_SETTINGS_DONE);
|
||||
}
|
||||
|
||||
$staff = new Staff();
|
||||
$staff->setProperties([
|
||||
'name' => Controller::request('name'),
|
||||
'email' => Controller::request('email'),
|
||||
'password' => Controller::request('password'),
|
||||
'profilePic' => '',
|
||||
'level' => 3,
|
||||
'sharedDepartmentList' => Department::getAll(),
|
||||
'sharedTicketList' => []
|
||||
]);
|
||||
|
||||
foreach(Department::getAll() as $department) {
|
||||
$department->owners++;
|
||||
$department->store();
|
||||
}
|
||||
|
||||
$staff->store();
|
||||
|
||||
Response::respondSuccess();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
//include '../../config.php';
|
||||
use RedBeanPHP\Facade as RedBean;
|
||||
|
||||
class InitDatabaseController extends Controller {
|
||||
const PATH = '/init-database';
|
||||
const METHOD = 'POST';
|
||||
|
||||
public function validations() {
|
||||
return [
|
||||
'permission' => 'any',
|
||||
'requestData' => []
|
||||
];
|
||||
}
|
||||
|
||||
public function handler() {
|
||||
if(defined('MYSQL_HOST')) {
|
||||
throw new Exception(ERRORS::INIT_SETTINGS_DONE);
|
||||
return;
|
||||
}
|
||||
|
||||
$configFile = fopen('config.php', 'w+') or die(ERRORS::INVALID_FILE);
|
||||
$content = '<?php' . PHP_EOL;
|
||||
$content .= 'define(\'MYSQL_HOST\', \'' . Controller::request('dbHost') . '\');' . PHP_EOL;
|
||||
$content .= 'define(\'MYSQL_USER\', \'' . Controller::request('dbUser') . '\');' . PHP_EOL;
|
||||
$content .= 'define(\'MYSQL_PASSWORD\', \'' . Controller::request('dbPassword') . '\');' . PHP_EOL;
|
||||
$content .= 'define(\'MYSQL_DATABASE\', \'' . Controller::request('dbName') . '\');' . PHP_EOL;
|
||||
|
||||
fwrite($configFile, $content);
|
||||
fclose($configFile);
|
||||
Response::respondSuccess();
|
||||
}
|
||||
}
|
|
@ -1,4 +1,6 @@
|
|||
<?php
|
||||
use Respect\Validation\Validator as DataValidator;
|
||||
DataValidator::with('CustomValidations', true);
|
||||
|
||||
class InitSettingsController extends Controller {
|
||||
const PATH = '/init-settings';
|
||||
|
@ -7,7 +9,12 @@ class InitSettingsController extends Controller {
|
|||
public function validations() {
|
||||
return [
|
||||
'permission' => 'any',
|
||||
'requestData' => []
|
||||
'requestData' => [
|
||||
'language' => [
|
||||
'validation' => DataValidator::validLanguage(),
|
||||
'error' => ERRORS::INVALID_LANGUAGE
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -17,7 +24,6 @@ class InitSettingsController extends Controller {
|
|||
$this->storeMailTemplates();
|
||||
$this->storeLanguages();
|
||||
$this->storeMockedDepartments();
|
||||
$this->createMockedStaff();
|
||||
|
||||
Response::respondSuccess();
|
||||
} else {
|
||||
|
@ -27,12 +33,12 @@ class InitSettingsController extends Controller {
|
|||
|
||||
private function storeGlobalSettings() {
|
||||
$this->storeSettings([
|
||||
'language' => 'en',
|
||||
'language' => Controller::request('language'),
|
||||
'recaptcha-public' => '',
|
||||
'recaptcha-private' => '',
|
||||
'no-reply-email' => 'noreply@opensupports.com',
|
||||
'smtp-host' => 'localhost',
|
||||
'smtp-port' => 7070,
|
||||
'smtp-port' => 25,
|
||||
'smtp-user' => '',
|
||||
'smtp-pass' => '',
|
||||
'time-zone' => 0,
|
||||
|
@ -42,9 +48,9 @@ class InitSettingsController extends Controller {
|
|||
'max-size' => 1024,
|
||||
'title' => 'Support Center',
|
||||
'url' => 'http://www.opensupports.com/support',
|
||||
'registration' => true,
|
||||
'user-system-enabled' => true,
|
||||
'last-stat-day' => date('YmdHi', strtotime(' -12 day ')), //TODO: get current date
|
||||
'registration' => Controller::request('registration'),
|
||||
'user-system-enabled' => Controller::request('user-system-enabled'),
|
||||
'last-stat-day' => date('YmdHi', strtotime(' -12 day ')),
|
||||
'ticket-gap' => Hashing::generateRandomPrime(100000, 999999),
|
||||
'file-gap' => Hashing::generateRandomPrime(100000, 999999),
|
||||
'file-first-number' => Hashing::generateRandomNumber(100000, 999999),
|
||||
|
@ -98,9 +104,7 @@ class InitSettingsController extends Controller {
|
|||
|
||||
private function storeMockedDepartments() {
|
||||
$departments = [
|
||||
'Tech Support',
|
||||
'Suggestions',
|
||||
'Sales and Subscriptions'
|
||||
'Help and Support'
|
||||
];
|
||||
|
||||
foreach ($departments as $departmentName) {
|
||||
|
@ -109,22 +113,4 @@ class InitSettingsController extends Controller {
|
|||
$department->store();
|
||||
}
|
||||
}
|
||||
|
||||
private function createMockedStaff() {
|
||||
$staff = new Staff();
|
||||
$staff->setProperties([
|
||||
'name' => 'Emilia Clarke',
|
||||
'email' => 'staff@opensupports.com',
|
||||
'password' => Hashing::hashPassword('staff'),
|
||||
'profilePic' => '',
|
||||
'level' => 3,
|
||||
'sharedDepartmentList' => Department::getAll(),
|
||||
'sharedTicketList' => []
|
||||
]);
|
||||
foreach(Department::getAll() as $department) {
|
||||
$department->owners++;
|
||||
$department->store();
|
||||
}
|
||||
$staff->store();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
use RedBeanPHP\Facade as RedBean;
|
||||
|
||||
class InstallationDoneController extends Controller {
|
||||
const PATH = '/installation-done';
|
||||
const METHOD = 'POST';
|
||||
|
||||
public function validations() {
|
||||
return [
|
||||
'permission' => 'any',
|
||||
'requestData' => []
|
||||
];
|
||||
}
|
||||
|
||||
public function handler() {
|
||||
if(RedBean::testConnection() && !Setting::isTableEmpty() && !Staff::isTableEmpty()) {
|
||||
Response::respondSuccess(1);
|
||||
} else {
|
||||
Response::respondSuccess(0);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +1,14 @@
|
|||
<?php
|
||||
require_once 'config.php';
|
||||
include 'config.php';
|
||||
require_once 'vendor/autoload.php';
|
||||
|
||||
// REDBEAN CONFIGURATION
|
||||
use RedBeanPHP\Facade as RedBean;
|
||||
RedBean::setup('mysql:host='. $mysql_host .';dbname=' . $mysql_database, $mysql_user, $mysql_password);
|
||||
RedBean::setAutoResolve(true);
|
||||
|
||||
if(defined('MYSQL_HOST') && defined('MYSQL_DATABASE') && defined('MYSQL_USER') && defined('MYSQL_PASSWORD')) {
|
||||
RedBean::setup('mysql:host='. MYSQL_HOST .';dbname=' . MYSQL_DATABASE , MYSQL_USER, MYSQL_PASSWORD);
|
||||
RedBean::setAutoResolve(true);
|
||||
}
|
||||
|
||||
// SLIM FRAMEWORK
|
||||
\Slim\Slim::registerAutoLoader();
|
||||
|
|
|
@ -6,7 +6,7 @@ use Respect\Validation\Rules\AbstractRule;
|
|||
|
||||
class ValidLanguage extends AbstractRule {
|
||||
|
||||
public function validate($ticketNumber) {
|
||||
return in_array($ticketNumber, \Language::LANGUAGES);
|
||||
public function validate($language) {
|
||||
return in_array($language, \Language::LANGUAGES);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue