mirror of
https://github.com/Karaka-Management/Build.git
synced 2026-01-11 19:58:41 +00:00
542 lines
20 KiB
PHP
542 lines
20 KiB
PHP
<?php
|
|
/**
|
|
* Remove old install and setup database.
|
|
*
|
|
* This script is usefull when you want to manually install the app without resetting an old database/app or new empty database.
|
|
*/
|
|
ini_set('memory_limit', '2048M');
|
|
ini_set('display_errors', 1);
|
|
ini_set('display_startup_errors', 1);
|
|
error_reporting(E_ALL);
|
|
|
|
require_once __DIR__ . '/../phpOMS/Autoloader.php';
|
|
|
|
use Install\WebApplication;
|
|
use Model\CoreSettings;
|
|
use phpOMS\ApplicationAbstract;
|
|
use phpOMS\Dispatcher\Dispatcher;
|
|
use phpOMS\Account\Account;
|
|
use phpOMS\Account\AccountManager;
|
|
use phpOMS\Account\PermissionType;
|
|
use phpOMS\DataStorage\Database\DatabasePool;
|
|
use phpOMS\DataStorage\Session\HttpSession;
|
|
use Modules\Admin\Models\AccountPermission;
|
|
use phpOMS\Message\Http\Request;
|
|
use phpOMS\Event\EventManager;
|
|
use phpOMS\Message\Http\RequestMethod;
|
|
use phpOMS\Message\Http\Response;
|
|
use phpOMS\Module\ModuleManager;
|
|
use phpOMS\Router\WebRouter;
|
|
use phpOMS\Uri\Http;
|
|
use phpOMS\Utils\TestUtils;
|
|
use Model\Settings;
|
|
|
|
$config = [
|
|
'db' => [
|
|
'core' => [
|
|
'masters' => [
|
|
'admin' => [
|
|
'db' => 'mysql', /* db type */
|
|
'host' => '127.0.0.1', /* db host address */
|
|
'port' => '3306', /* db host port */
|
|
'login' => 'root', /* db login name */
|
|
'password' => 'root', /* db login password */
|
|
'database' => 'oms', /* db name */
|
|
'prefix' => 'oms_', /* db table prefix */
|
|
'weight' => 1000, /* db table prefix */
|
|
],
|
|
'insert' => [
|
|
'db' => 'mysql', /* db type */
|
|
'host' => '127.0.0.1', /* db host address */
|
|
'port' => '3306', /* db host port */
|
|
'login' => 'root', /* db login name */
|
|
'password' => 'root', /* db login password */
|
|
'database' => 'oms', /* db name */
|
|
'prefix' => 'oms_', /* db table prefix */
|
|
'weight' => 1000, /* db table prefix */
|
|
],
|
|
'select' => [
|
|
'db' => 'mysql', /* db type */
|
|
'host' => '127.0.0.1', /* db host address */
|
|
'port' => '3306', /* db host port */
|
|
'login' => 'root', /* db login name */
|
|
'password' => 'root', /* db login password */
|
|
'database' => 'oms', /* db name */
|
|
'prefix' => 'oms_', /* db table prefix */
|
|
'weight' => 1000, /* db table prefix */
|
|
],
|
|
'update' => [
|
|
'db' => 'mysql', /* db type */
|
|
'host' => '127.0.0.1', /* db host address */
|
|
'port' => '3306', /* db host port */
|
|
'login' => 'root', /* db login name */
|
|
'password' => 'root', /* db login password */
|
|
'database' => 'oms', /* db name */
|
|
'prefix' => 'oms_', /* db table prefix */
|
|
'weight' => 1000, /* db table prefix */
|
|
],
|
|
'delete' => [
|
|
'db' => 'mysql', /* db type */
|
|
'host' => '127.0.0.1', /* db host address */
|
|
'port' => '3306', /* db host port */
|
|
'login' => 'root', /* db login name */
|
|
'password' => 'root', /* db login password */
|
|
'database' => 'oms', /* db name */
|
|
'prefix' => 'oms_', /* db table prefix */
|
|
'weight' => 1000, /* db table prefix */
|
|
],
|
|
'schema' => [
|
|
'db' => 'mysql', /* db type */
|
|
'host' => '127.0.0.1', /* db host address */
|
|
'port' => '3306', /* db host port */
|
|
'login' => 'root', /* db login name */
|
|
'password' => 'root', /* db login password */
|
|
'database' => 'oms', /* db name */
|
|
'prefix' => 'oms_', /* db table prefix */
|
|
'weight' => 1000, /* db table prefix */
|
|
],
|
|
],
|
|
],
|
|
],
|
|
'cache' => [
|
|
'redis' => [
|
|
'db' => 1,
|
|
'host' => '127.0.0.1',
|
|
'port' => 6379,
|
|
],
|
|
'memcached' => [
|
|
'host' => '127.0.0.1',
|
|
'port' => 11211,
|
|
],
|
|
],
|
|
'log' => [
|
|
'file' => [
|
|
'path' => __DIR__ . '/Logs',
|
|
],
|
|
],
|
|
'page' => [
|
|
'root' => '/',
|
|
'https' => false,
|
|
],
|
|
'app' => [
|
|
'path' => __DIR__,
|
|
],
|
|
'socket' => [
|
|
'master' => [
|
|
'host' => '127.0.0.1',
|
|
'limit' => 300,
|
|
'port' => 4310,
|
|
],
|
|
],
|
|
'language' => [
|
|
'en',
|
|
],
|
|
'apis' => [
|
|
]
|
|
];
|
|
|
|
// Reset database
|
|
$db = new \PDO($config['db']['core']['masters']['admin']['db'] . ':host=' .
|
|
$config['db']['core']['masters']['admin']['host'],
|
|
$config['db']['core']['masters']['admin']['login'],
|
|
$config['db']['core']['masters']['admin']['password']
|
|
);
|
|
$db->exec('DROP DATABASE IF EXISTS ' . $config['db']['core']['masters']['admin']['database']);
|
|
$db->exec('CREATE DATABASE IF NOT EXISTS ' . $config['db']['core']['masters']['admin']['database']);
|
|
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
$request->setMethod(RequestMethod::POST);
|
|
|
|
$request->setData('dbhost', $config['db']['core']['masters']['admin']['host']);
|
|
$request->setData('dbtype', $config['db']['core']['masters']['admin']['db']);
|
|
$request->setData('dbport', $config['db']['core']['masters']['admin']['port']);
|
|
$request->setData('dbprefix', $config['db']['core']['masters']['admin']['prefix']);
|
|
$request->setData('dbname', $config['db']['core']['masters']['admin']['database']);
|
|
$request->setData('schemauser', $config['db']['core']['masters']['admin']['login']);
|
|
$request->setData('schemapassword', $config['db']['core']['masters']['admin']['password']);
|
|
$request->setData('createuser', $config['db']['core']['masters']['admin']['login']);
|
|
$request->setData('createpassword', $config['db']['core']['masters']['admin']['password']);
|
|
$request->setData('selectuser', $config['db']['core']['masters']['admin']['login']);
|
|
$request->setData('selectpassword', $config['db']['core']['masters']['admin']['password']);
|
|
$request->setData('updateuser', $config['db']['core']['masters']['admin']['login']);
|
|
$request->setData('updatepassword', $config['db']['core']['masters']['admin']['password']);
|
|
$request->setData('deleteuser', $config['db']['core']['masters']['admin']['login']);
|
|
$request->setData('deletepassword', $config['db']['core']['masters']['admin']['password']);
|
|
|
|
$request->setData('orgname', 'MANI Inc.');
|
|
$request->setData('adminname', 'admin');
|
|
$request->setData('adminpassword', 'orange');
|
|
$request->setData('adminemail', 'admin@oms.com');
|
|
$request->setData('domain', '127.0.0.1');
|
|
$request->setData('websubdir', $config['page']['root']);
|
|
$request->setData('defaultlang', 'en');
|
|
|
|
WebApplication::installRequest($request, $response);
|
|
|
|
// Setup for api calls
|
|
$app = new class() extends ApplicationAbstract
|
|
{
|
|
protected string $appName = 'Api';
|
|
};
|
|
|
|
$app->dbPool = new DatabasePool();
|
|
$app->dbPool->create('admin', $config['db']['core']['masters']['admin']);
|
|
$app->dbPool->create('select', $config['db']['core']['masters']['select']);
|
|
$app->dbPool->create('update', $config['db']['core']['masters']['update']);
|
|
$app->dbPool->create('insert', $config['db']['core']['masters']['insert']);
|
|
$app->dbPool->create('schema', $config['db']['core']['masters']['schema']);
|
|
|
|
$app->orgId = 1;
|
|
$app->appName = 'Backend';
|
|
$app->accountManager = new AccountManager(new HttpSession());
|
|
$app->appSettings = new CoreSettings($app->dbPool->get());
|
|
$app->moduleManager = new ModuleManager($app, __DIR__ . '/../Modules');
|
|
$app->dispatcher = new Dispatcher($app);
|
|
$app->eventManager = new EventManager($app->dispatcher);
|
|
$app->eventManager->importFromFile(__DIR__ . '/../Web/Api/Hooks.php');
|
|
|
|
$account = new Account();
|
|
TestUtils::setMember($account, 'id', 1);
|
|
|
|
$permission = new AccountPermission();
|
|
$permission->setUnit(2);
|
|
$permission->setApp('backend');
|
|
$permission->setPermission(
|
|
PermissionType::READ
|
|
| PermissionType::CREATE
|
|
| PermissionType::MODIFY
|
|
| PermissionType::DELETE
|
|
| PermissionType::PERMISSION
|
|
);
|
|
|
|
$account->addPermission($permission);
|
|
|
|
$app->accountManager->add($account);
|
|
$app->router = new WebRouter();
|
|
|
|
/**
|
|
* Setup additional units
|
|
*/
|
|
$module = $app->moduleManager->get('Organization');
|
|
TestUtils::setMember($module, 'app', $app);
|
|
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
|
|
$request->getHeader()->setAccount(1);
|
|
$request->setData('name', 'GDF GmbH');
|
|
$request->setData('parent', 1);
|
|
$request->setData('status', 1);
|
|
|
|
$module->apiUnitCreate($request, $response);
|
|
|
|
/**
|
|
* Change app settings
|
|
*/
|
|
$module = $app->moduleManager->get('Admin');
|
|
TestUtils::setMember($module, 'app', $app);
|
|
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
|
|
$request->getHeader()->setAccount(1);
|
|
$request->setData('settings', \json_encode([Settings::DEFAULT_ORGANIZATION => '2']));
|
|
|
|
$module->apiSettingsSet($request, $response);
|
|
|
|
/**
|
|
* Install modules
|
|
*/
|
|
$module = $app->moduleManager->get('Admin');
|
|
TestUtils::setMember($module, 'app', $app);
|
|
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
$request->getHeader()->setAccount(1);
|
|
$request->setData('status', 3);
|
|
|
|
// Helper
|
|
$request->setData('module', 'Helper');
|
|
$module->apiModuleStatusUpdate($request, $response);
|
|
|
|
// Search
|
|
$request->setData('module', 'Search');
|
|
$module->apiModuleStatusUpdate($request, $response);
|
|
|
|
// Dashboard
|
|
$request->setData('module', 'Dashboard');
|
|
$module->apiModuleStatusUpdate($request, $response);
|
|
|
|
|
|
/**
|
|
* Setup groups
|
|
*/
|
|
$module = $app->moduleManager->get('Admin');
|
|
TestUtils::setMember($module, 'app', $app);
|
|
|
|
use Modules\Admin\Models\GroupMapper;
|
|
use phpOMS\Account\GroupStatus;
|
|
|
|
$groups = [
|
|
['name' => 'Management', 'permissions' => []],
|
|
['name' => 'Executive', 'permissions' => []],
|
|
['name' => 'R&D', 'permissions' => []],
|
|
['name' => 'Sales', 'permissions' => []],
|
|
['name' => 'Production', 'permissions' => []],
|
|
['name' => 'Secretariat', 'permissions' => []],
|
|
['name' => 'HR', 'permissions' => []],
|
|
['name' => 'Purchasing', 'permissions' => []],
|
|
['name' => 'QA', 'permissions' => []],
|
|
['name' => 'QM', 'permissions' => []],
|
|
['name' => 'Finance', 'permissions' => []],
|
|
['name' => 'Employee', 'permissions' => [
|
|
'Help' => [
|
|
'permissionowner' => 1,
|
|
'permissionunit' => 2,
|
|
'permissionapp' => 'backend',
|
|
'permissiontype' => null,
|
|
'permissionelement' => null,
|
|
'permissioncomponent' => null,
|
|
'permissioncreate' => 0,
|
|
'permissionread' => 2,
|
|
'permissionupdate' => 0,
|
|
'permissiondelete' => 0,
|
|
'permissionpermission' => 0
|
|
],
|
|
'Profile' => [
|
|
'permissionowner' => 1,
|
|
'permissionunit' => 2,
|
|
'permissionapp' => 'backend',
|
|
'permissiontype' => null,
|
|
'permissionelement' => null,
|
|
'permissioncomponent' => null,
|
|
'permissioncreate' => 0,
|
|
'permissionread' => 2,
|
|
'permissionupdate' => 0,
|
|
'permissiondelete' => 0,
|
|
'permissionpermission' => 0
|
|
],
|
|
'Helper' => [
|
|
'permissionowner' => 1,
|
|
'permissionunit' => 2,
|
|
'permissionapp' => 'backend',
|
|
'permissiontype' => null,
|
|
'permissionelement' => null,
|
|
'permissioncomponent' => null,
|
|
'permissioncreate' => 0,
|
|
'permissionread' => 2,
|
|
'permissionupdate' => 0,
|
|
'permissiondelete' => 0,
|
|
'permissionpermission' => 0
|
|
],
|
|
]],
|
|
['name' => 'Controlling', 'permissions' => [
|
|
'Helper' => [
|
|
'permissionowner' => 1,
|
|
'permissionunit' => 2,
|
|
'permissionapp' => 'backend',
|
|
'permissiontype' => null,
|
|
'permissionelement' => null,
|
|
'permissioncomponent' => null,
|
|
'permissioncreate' => 4,
|
|
'permissionread' => 2,
|
|
'permissionupdate' => 8,
|
|
'permissiondelete' => 16,
|
|
'permissionpermission' => 32
|
|
],
|
|
]],
|
|
];
|
|
|
|
foreach ($groups as $group) {
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
|
|
$request->getHeader()->setAccount(1);
|
|
$request->setData('name', $group['name']);
|
|
$request->setData('status', GroupStatus::ACTIVE);
|
|
|
|
$module->apiGroupCreate($request, $response);
|
|
|
|
if (!empty($group['permissions'])) {
|
|
$g = $response->get('')['response'];
|
|
foreach ($group['permissions'] as $key => $p) {
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
|
|
$request->getHeader()->setAccount(1);
|
|
$request->setData('permissionowner', $p['permissionowner']);
|
|
$request->setData('permissionref', $g->getId());
|
|
$request->setData('permissionunit', $p['permissionunit']);
|
|
$request->setData('permissionapp', $p['permissionapp']);
|
|
$request->setData('permissionmodule', $key);
|
|
$request->setData('permissiontype', $p['permissiontype']);
|
|
$request->setData('permissionelement', $p['permissionelement']);
|
|
$request->setData('permissioncomponent', $p['permissioncomponent']);
|
|
$request->setData('permissioncreate', $p['permissioncreate']);
|
|
$request->setData('permissionread', $p['permissionread']);
|
|
$request->setData('permissionupdate', $p['permissionupdate']);
|
|
$request->setData('permissiondelete', $p['permissiondelete']);
|
|
$request->setData('permissionpermission', $p['permissionpermission']);
|
|
|
|
$module->apiAddGroupPermission($request, $response);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Setup departments
|
|
*/
|
|
$module = $app->moduleManager->get('Organization');
|
|
TestUtils::setMember($module, 'app', $app);
|
|
|
|
use Modules\Organization\Models\Status;
|
|
|
|
$departments = [
|
|
['name' => 'Management', 'parent' => null],
|
|
['name' => 'R&D', 'parent' => 'Management'],
|
|
['name' => 'Sales', 'parent' => 'Management'],
|
|
['name' => 'Production', 'parent' => 'Management'],
|
|
['name' => 'Warehouse', 'parent' => 'Production'],
|
|
['name' => 'Secretariat', 'parent' => 'Management'],
|
|
['name' => 'Registration', 'parent' => 'Management'],
|
|
['name' => 'HR', 'parent' => 'Management'],
|
|
['name' => 'Purchasing', 'parent' => 'Management'],
|
|
['name' => 'QA', 'parent' => 'Management'],
|
|
['name' => 'QM', 'parent' => 'Management'],
|
|
['name' => 'Finance', 'parent' => 'Management'],
|
|
['name' => 'IT', 'parent' => 'Management'],
|
|
];
|
|
$departmentIds = [];
|
|
|
|
foreach ($departments as $department) {
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
|
|
$request->getHeader()->setAccount(1);
|
|
$request->setData('name', $department['name']);
|
|
$request->setData('status', Status::ACTIVE);
|
|
$request->setData('unit', 2);
|
|
$request->setData('parent', $departmentIds[$department['parent']] ?? null);
|
|
|
|
$module->apiDepartmentCreate($request, $response);
|
|
$departmentIds[$department['name']] = $response->get('')['response']->getId();
|
|
}
|
|
|
|
/**
|
|
* Setup positions
|
|
*/
|
|
$module = $app->moduleManager->get('Organization');
|
|
TestUtils::setMember($module, 'app', $app);
|
|
|
|
use Modules\Organization\Models\DepartmentMapper;
|
|
|
|
$positions = [
|
|
['name' => 'Chairman', 'department' => 'Management', 'parent' => null],
|
|
['name' => 'CEO', 'department' => 'Management', 'parent' => 'Chairman'],
|
|
['name' => 'Executive Member', 'department' => null, 'parent' => 'Chairman'],
|
|
['name' => 'COO', 'department' => 'Management', 'parent' => 'CEO'],
|
|
['name' => 'CTO', 'department' => 'R&D', 'parent' => 'CEO'],
|
|
['name' => 'R&D Employee', 'department' => 'R&D', 'parent' => 'CTO'],
|
|
['name' => 'CFO', 'department' => 'Finance', 'parent' => 'CEO'],
|
|
['name' => 'Accountant', 'department' => 'Finance', 'parent' => 'CFO'],
|
|
['name' => 'CSO', 'department' => 'Sales', 'parent' => 'CEO'],
|
|
['name' => 'Export Controle Officer', 'department' => 'Sales', 'parent' => 'CEO'],
|
|
['name' => 'Back Office Sales', 'department' => 'Sales', 'parent' => 'CSO'],
|
|
['name' => 'Head of Secretariat', 'department' => 'Secretariat', 'parent' => 'CEO'],
|
|
['name' => 'Secretary', 'department' => 'Secretariat', 'parent' => 'Head of Secretariat'],
|
|
['name' => 'Head of Production', 'department' => 'Production', 'parent' => 'CEO'],
|
|
['name' => 'Production Leader', 'department' => 'Production', 'parent' => 'Head of Production'],
|
|
['name' => 'Production Section Leader', 'department' => 'Production', 'parent' => 'Head of Production'],
|
|
['name' => 'Warehouse Section Leader', 'department' => 'Warehouse', 'parent' => 'Head of Production'],
|
|
['name' => 'Production Employee', 'department' => 'Production', 'parent' => 'Production Section Leader'],
|
|
['name' => 'Warehouse Employee', 'department' => 'Warehouse', 'parent' => 'Warehouse Section Leader'],
|
|
['name' => 'Head of Purchasing', 'department' => 'Purchasing', 'parent' => 'CEO'],
|
|
['name' => 'Back Office Purchasing', 'department' => 'Purchasing', 'parent' => 'Head of Purchasing'],
|
|
['name' => 'Head of QM', 'department' => 'QM', 'parent' => 'CEO'],
|
|
['name' => 'QM Employee', 'department' => 'QM', 'parent' => 'Head of QM'],
|
|
['name' => 'Head of QA', 'department' => 'QA', 'parent' => 'CEO'],
|
|
['name' => 'QA Employee', 'department' => 'QA', 'parent' => 'Head of QA'],
|
|
['name' => 'Head of HR', 'department' => 'HR', 'parent' => 'CEO'],
|
|
['name' => 'HR Employee', 'department' => 'HR', 'parent' => 'Head of HR'],
|
|
['name' => 'Head of IT', 'department' => 'IT', 'parent' => 'CEO'],
|
|
];
|
|
|
|
$departments = DepartmentMapper::getAll();
|
|
$postionIds = [];
|
|
foreach ($positions as $position) {
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
|
|
$request->getHeader()->setAccount(1);
|
|
$request->setData('name', $position['name']);
|
|
$request->setData('status', Status::ACTIVE);
|
|
$request->setData('parent', $positionIds[$position['parent']] ?? null);
|
|
|
|
foreach ($departments as $d) {
|
|
if (!isset($position['department']) || $d->getName() === $position['department']) {
|
|
$request->setData('department', $d->getId());
|
|
$module->apiPositionCreate($request, $response);
|
|
|
|
$positionIds[$position['name']] = $response->get('')['response']->getId();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Setup accounts
|
|
*/
|
|
$module = $app->moduleManager->get('Admin');
|
|
TestUtils::setMember($module, 'app', $app);
|
|
|
|
use Modules\Admin\Models\AccountMapper;
|
|
use phpOMS\Account\AccountStatus;
|
|
use phpOMS\Account\AccountType;
|
|
|
|
$accounts = [
|
|
[
|
|
'login' => 'deichhorn',
|
|
'pass' => 'deichhorn',
|
|
'name1' => 'Dennis',
|
|
'name2' => 'Eichhorn',
|
|
'email' => 'dennis.eichhorn@gdfmbh.com',
|
|
'groups' => ['Executive', 'Finance', 'Controlling', 'Employee']
|
|
]
|
|
];
|
|
|
|
$groups = GroupMapper::getAll();
|
|
foreach ($accounts as $account) {
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
|
|
$request->getHeader()->setAccount(1);
|
|
$request->setData('login', $account['login']);
|
|
$request->setData('password', $account['pass']);
|
|
$request->setData('name1', $account['name1']);
|
|
$request->setData('name2', $account['name2']);
|
|
$request->setData('email', $account['email']);
|
|
$request->setData('type', AccountType::USER);
|
|
$request->setData('status', AccountStatus::INACTIVE);
|
|
|
|
$module->apiAccountCreate($request, $response);
|
|
|
|
$a = $response->get('')['response'];
|
|
foreach ($groups as $g) {
|
|
if (\in_array($g->getName(), $account['groups'])) {
|
|
$response = new Response();
|
|
$request = new Request(new Http(''));
|
|
|
|
$request->getHeader()->setAccount($a->getId());
|
|
$request->setData('account', $a->getId());
|
|
$request->setData('igroup-idlist', (string) $g->getId());
|
|
|
|
$module->apiAddGroupToAccount($request, $response);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Setup helper module
|
|
*/
|