mirror of
https://github.com/opensupports/opensupports.git
synced 2025-07-31 01:35:15 +02:00
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() {
|
componentDidMount() {
|
||||||
API.call({
|
API.call({
|
||||||
path: '/system/installation-step',
|
path: '/system/installation-done',
|
||||||
data: {}
|
data: {}
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
if(result.data != this.getCurrentStep()) {
|
if(result.data == 1) {
|
||||||
browserHistory.push('/install/step-' + (result.data + 1));
|
browserHistory.push('/install/step-6');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {browserHistory} from 'react-router';
|
import {browserHistory} from 'react-router';
|
||||||
|
import { connect } from 'react-redux'
|
||||||
|
|
||||||
import i18n from 'lib-app/i18n';
|
import i18n from 'lib-app/i18n';
|
||||||
import API from 'lib-app/api-call';
|
import API from 'lib-app/api-call';
|
||||||
@ -54,6 +55,7 @@ class InstallStep4UserSystem extends React.Component {
|
|||||||
API.call({
|
API.call({
|
||||||
path: '/system/init-settings',
|
path: '/system/init-settings',
|
||||||
data: {
|
data: {
|
||||||
|
'language': this.props.language,
|
||||||
'user-system-enabled': form['user-system-enabled'],
|
'user-system-enabled': form['user-system-enabled'],
|
||||||
'registration': form['registration']
|
'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);
|
10
server/config.php
Normal file → Executable file
10
server/config.php
Normal file → Executable file
@ -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
|
<?php
|
||||||
|
require_once 'system/check-requirements.php';
|
||||||
|
require_once 'system/init-database.php';
|
||||||
require_once 'system/init-settings.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/get-settings.php';
|
||||||
require_once 'system/edit-settings.php';
|
require_once 'system/edit-settings.php';
|
||||||
require_once 'system/add-department.php';
|
require_once 'system/add-department.php';
|
||||||
@ -25,7 +29,11 @@ require_once 'system/download.php';
|
|||||||
$systemControllerGroup = new ControllerGroup();
|
$systemControllerGroup = new ControllerGroup();
|
||||||
$systemControllerGroup->setGroupPath('/system');
|
$systemControllerGroup->setGroupPath('/system');
|
||||||
|
|
||||||
|
$systemControllerGroup->addController(new CheckRequirementsController);
|
||||||
|
$systemControllerGroup->addController(new InitDatabaseController);
|
||||||
$systemControllerGroup->addController(new InitSettingsController);
|
$systemControllerGroup->addController(new InitSettingsController);
|
||||||
|
$systemControllerGroup->addController(new InitAdminController);
|
||||||
|
$systemControllerGroup->addController(new InstallationDoneController);
|
||||||
$systemControllerGroup->addController(new GetSettingsController);
|
$systemControllerGroup->addController(new GetSettingsController);
|
||||||
$systemControllerGroup->addController(new EditSettingsController);
|
$systemControllerGroup->addController(new EditSettingsController);
|
||||||
$systemControllerGroup->addController(new AddDepartmentController);
|
$systemControllerGroup->addController(new AddDepartmentController);
|
||||||
|
49
server/controllers/system/check-requirements.php
Normal file
49
server/controllers/system/check-requirements.php
Normal file
@ -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];
|
||||||
|
}
|
||||||
|
}
|
54
server/controllers/system/init-admin.php
Normal file
54
server/controllers/system/init-admin.php
Normal file
@ -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();
|
||||||
|
}
|
||||||
|
}
|
33
server/controllers/system/init-database.php
Normal file
33
server/controllers/system/init-database.php
Normal file
@ -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
|
<?php
|
||||||
|
use Respect\Validation\Validator as DataValidator;
|
||||||
|
DataValidator::with('CustomValidations', true);
|
||||||
|
|
||||||
class InitSettingsController extends Controller {
|
class InitSettingsController extends Controller {
|
||||||
const PATH = '/init-settings';
|
const PATH = '/init-settings';
|
||||||
@ -7,7 +9,12 @@ class InitSettingsController extends Controller {
|
|||||||
public function validations() {
|
public function validations() {
|
||||||
return [
|
return [
|
||||||
'permission' => 'any',
|
'permission' => 'any',
|
||||||
'requestData' => []
|
'requestData' => [
|
||||||
|
'language' => [
|
||||||
|
'validation' => DataValidator::validLanguage(),
|
||||||
|
'error' => ERRORS::INVALID_LANGUAGE
|
||||||
|
]
|
||||||
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17,7 +24,6 @@ class InitSettingsController extends Controller {
|
|||||||
$this->storeMailTemplates();
|
$this->storeMailTemplates();
|
||||||
$this->storeLanguages();
|
$this->storeLanguages();
|
||||||
$this->storeMockedDepartments();
|
$this->storeMockedDepartments();
|
||||||
$this->createMockedStaff();
|
|
||||||
|
|
||||||
Response::respondSuccess();
|
Response::respondSuccess();
|
||||||
} else {
|
} else {
|
||||||
@ -27,12 +33,12 @@ class InitSettingsController extends Controller {
|
|||||||
|
|
||||||
private function storeGlobalSettings() {
|
private function storeGlobalSettings() {
|
||||||
$this->storeSettings([
|
$this->storeSettings([
|
||||||
'language' => 'en',
|
'language' => Controller::request('language'),
|
||||||
'recaptcha-public' => '',
|
'recaptcha-public' => '',
|
||||||
'recaptcha-private' => '',
|
'recaptcha-private' => '',
|
||||||
'no-reply-email' => 'noreply@opensupports.com',
|
'no-reply-email' => 'noreply@opensupports.com',
|
||||||
'smtp-host' => 'localhost',
|
'smtp-host' => 'localhost',
|
||||||
'smtp-port' => 7070,
|
'smtp-port' => 25,
|
||||||
'smtp-user' => '',
|
'smtp-user' => '',
|
||||||
'smtp-pass' => '',
|
'smtp-pass' => '',
|
||||||
'time-zone' => 0,
|
'time-zone' => 0,
|
||||||
@ -42,9 +48,9 @@ class InitSettingsController extends Controller {
|
|||||||
'max-size' => 1024,
|
'max-size' => 1024,
|
||||||
'title' => 'Support Center',
|
'title' => 'Support Center',
|
||||||
'url' => 'http://www.opensupports.com/support',
|
'url' => 'http://www.opensupports.com/support',
|
||||||
'registration' => true,
|
'registration' => Controller::request('registration'),
|
||||||
'user-system-enabled' => true,
|
'user-system-enabled' => Controller::request('user-system-enabled'),
|
||||||
'last-stat-day' => date('YmdHi', strtotime(' -12 day ')), //TODO: get current date
|
'last-stat-day' => date('YmdHi', strtotime(' -12 day ')),
|
||||||
'ticket-gap' => Hashing::generateRandomPrime(100000, 999999),
|
'ticket-gap' => Hashing::generateRandomPrime(100000, 999999),
|
||||||
'file-gap' => Hashing::generateRandomPrime(100000, 999999),
|
'file-gap' => Hashing::generateRandomPrime(100000, 999999),
|
||||||
'file-first-number' => Hashing::generateRandomNumber(100000, 999999),
|
'file-first-number' => Hashing::generateRandomNumber(100000, 999999),
|
||||||
@ -98,9 +104,7 @@ class InitSettingsController extends Controller {
|
|||||||
|
|
||||||
private function storeMockedDepartments() {
|
private function storeMockedDepartments() {
|
||||||
$departments = [
|
$departments = [
|
||||||
'Tech Support',
|
'Help and Support'
|
||||||
'Suggestions',
|
|
||||||
'Sales and Subscriptions'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($departments as $departmentName) {
|
foreach ($departments as $departmentName) {
|
||||||
@ -109,22 +113,4 @@ class InitSettingsController extends Controller {
|
|||||||
$department->store();
|
$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();
|
|
||||||
}
|
|
||||||
}
|
}
|
22
server/controllers/system/installation-done.php
Normal file
22
server/controllers/system/installation-done.php
Normal file
@ -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
|
<?php
|
||||||
require_once 'config.php';
|
include 'config.php';
|
||||||
require_once 'vendor/autoload.php';
|
require_once 'vendor/autoload.php';
|
||||||
|
|
||||||
// REDBEAN CONFIGURATION
|
// REDBEAN CONFIGURATION
|
||||||
use RedBeanPHP\Facade as RedBean;
|
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 FRAMEWORK
|
||||||
\Slim\Slim::registerAutoLoader();
|
\Slim\Slim::registerAutoLoader();
|
||||||
|
@ -6,7 +6,7 @@ use Respect\Validation\Rules\AbstractRule;
|
|||||||
|
|
||||||
class ValidLanguage extends AbstractRule {
|
class ValidLanguage extends AbstractRule {
|
||||||
|
|
||||||
public function validate($ticketNumber) {
|
public function validate($language) {
|
||||||
return in_array($ticketNumber, \Language::LANGUAGES);
|
return in_array($language, \Language::LANGUAGES);
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user