mirror of
https://github.com/Karaka-Management/oms-Shop.git
synced 2026-01-11 18:48:41 +00:00
add app to installer
This commit is contained in:
parent
8fb4e0b182
commit
7135ce2d17
|
|
@ -2,9 +2,9 @@
|
|||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.4
|
||||
* PHP Version 8.0
|
||||
*
|
||||
* @package Web\Shop
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
|
|
@ -12,19 +12,16 @@
|
|||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Web\Shop;
|
||||
namespace Web\{APPNAME};
|
||||
|
||||
use Model\CoreSettings;
|
||||
use Model\Settings;
|
||||
|
||||
use Modules\Admin\Models\AccountMapper;
|
||||
use Modules\Organization\Models\UnitMapper;
|
||||
use Modules\Profile\Models\ProfileMapper;
|
||||
use Modules\Admin\Models\LocalizationMapper;
|
||||
use Modules\Admin\Models\NullAccount;
|
||||
|
||||
use phpOMS\Account\Account;
|
||||
use phpOMS\Account\AccountManager;
|
||||
use phpOMS\Account\NullAccount;
|
||||
use phpOMS\Account\PermissionType;
|
||||
use phpOMS\Asset\AssetType;
|
||||
use phpOMS\Auth\Auth;
|
||||
use phpOMS\DataStorage\Cache\CachePool;
|
||||
|
|
@ -47,14 +44,15 @@ use phpOMS\Router\RouteVerb;
|
|||
use phpOMS\Router\WebRouter;
|
||||
use phpOMS\System\File\PathException;
|
||||
use phpOMS\Uri\UriFactory;
|
||||
use phpOMS\Views\View;
|
||||
|
||||
use phpOMS\Views\View;
|
||||
use Web\WebApplication;
|
||||
use Web\{APPNAME}\ShopView;
|
||||
|
||||
/**
|
||||
* Application class.
|
||||
*
|
||||
* @package Web\Shop
|
||||
* @package Web\{APPNAME}
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
|
|
@ -73,29 +71,29 @@ final class Application
|
|||
/**
|
||||
* Temp config.
|
||||
*
|
||||
* @var array
|
||||
* @var array{db:array{core:array{masters:array{select:array{db:string, host:string, port:int, login:string, password:string, database:string}}}}, log:array{file:array{path:string}}, app:array{path:string, default:array{id:string, app:string, org:int, lang:string}, domains:array}, page:array{root:string, https:bool}, language:string[]}
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private array $config = [];
|
||||
private array $config;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param WebApplication $app WebApplication
|
||||
* @param array $config Application config
|
||||
* @param array{db:array{core:array{masters:array{select:array{db:string, host:string, port:int, login:string, password:string, database:string}}}}, log:array{file:array{path:string}}, app:array{path:string, default:array{id:string, app:string, org:int, lang:string}, domains:array}, page:array{root:string, https:bool}, language:string[]} $config Application config
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function __construct(WebApplication $app, array $config)
|
||||
{
|
||||
$this->app = $app;
|
||||
$this->app->appName = 'Shop';
|
||||
$this->app->appName = '{APPNAME}';
|
||||
$this->config = $config;
|
||||
UriFactory::setQuery('/app', \strtolower($this->app->appName));
|
||||
}
|
||||
|
||||
/**
|
||||
* Rendering Shop.
|
||||
* Rendering app.
|
||||
*
|
||||
* @param HttpRequest $request Request
|
||||
* @param HttpResponse $response Response
|
||||
|
|
@ -106,36 +104,8 @@ final class Application
|
|||
*/
|
||||
public function run(HttpRequest $request, HttpResponse $response) : void
|
||||
{
|
||||
$pageView = new ShopView($this->l11nManager, $request, $response);
|
||||
$head = new Head();
|
||||
|
||||
$pageView->setData('head', $head);
|
||||
$response->set('Content', $pageView);
|
||||
|
||||
$this->app->l11nManager = new L11nManager($this->app->appName);
|
||||
|
||||
/* Shop only allows GET */
|
||||
if ($request->getMethod() !== RequestMethod::GET) {
|
||||
$this->create406Response($response, $pageView);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$this->app->dbPool = new DatabasePool();
|
||||
$this->app->router = new WebRouter();
|
||||
$this->app->router->importFromFile(__DIR__ . '/Routes.php');
|
||||
$this->app->router->add(
|
||||
'/Shop/e403',
|
||||
function() use ($request, $response) {
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Web/Shop/Error/403_inline');
|
||||
$response->getHeader()->setStatusCode(RequestStatusCode::R_403);
|
||||
|
||||
return $view;
|
||||
},
|
||||
RouteVerb::GET
|
||||
);
|
||||
|
||||
$this->app->sessionManager = new HttpSession(36000);
|
||||
$this->app->cookieJar = new CookieJar();
|
||||
$this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../Modules');
|
||||
|
|
@ -143,18 +113,26 @@ final class Application
|
|||
|
||||
$this->app->dbPool->create('select', $this->config['db']['core']['masters']['select']);
|
||||
|
||||
/* Database OK? */
|
||||
if ($this->app->dbPool->get()->getStatus() !== DatabaseStatus::OK) {
|
||||
$this->create503Response($response, $pageView);
|
||||
$this->app->router = new WebRouter();
|
||||
$this->app->router->importFromFile(__DIR__ . '/Routes.php');
|
||||
$this->app->router->add(
|
||||
'/{APPNAME}/e403',
|
||||
function() use ($request, $response) {
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Web/{APPNAME}/Error/403_inline');
|
||||
$response->header->status = RequestStatusCode::R_403;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
return $view;
|
||||
},
|
||||
RouteVerb::GET
|
||||
);
|
||||
|
||||
/* CSRF token OK? */
|
||||
if ($request->getData('CSRF') !== null
|
||||
&& !\hash_equals($this->app->sessionManager->get('CSRF'), $request->getData('CSRF'))
|
||||
) {
|
||||
$response->getHeader()->setStatusCode(RequestStatusCode::R_403);
|
||||
$response->header->status = RequestStatusCode::R_403;
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
@ -167,69 +145,80 @@ final class Application
|
|||
$this->app->appSettings = new CoreSettings($con);
|
||||
$this->app->eventManager = new EventManager($this->app->dispatcher);
|
||||
$this->app->accountManager = new AccountManager($this->app->sessionManager);
|
||||
|
||||
$this->app->orgId = $this->getApplicationOrganization($request, $this->config);
|
||||
$pageView->setData('orgId', $this->app->orgId);
|
||||
$this->app->l11nServer = LocalizationMapper::get(1);
|
||||
$this->app->orgId = $this->getApplicationOrganization($request, $this->config['app']);
|
||||
|
||||
$aid = Auth::authenticate($this->app->sessionManager);
|
||||
$request->getHeader()->setAccount($aid);
|
||||
$response->getHeader()->setAccount($aid);
|
||||
$request->header->account = $aid;
|
||||
$response->header->account = $aid;
|
||||
|
||||
$account = $this->loadAccount($request);
|
||||
|
||||
if (!($account instanceof NullAccount)) {
|
||||
$response->getHeader()->setL11n($account->getL11n());
|
||||
$response->header->l11n = $account->l11n;
|
||||
} elseif ($this->app->sessionManager->get('language') !== null) {
|
||||
$response->getHeader()->getL11n()
|
||||
$response->header->l11n
|
||||
->loadFromLanguage(
|
||||
$this->app->sessionManager->get('language'),
|
||||
$this->app->sessionManager->get('country') ?? '*'
|
||||
);
|
||||
} elseif ($this->app->cookieJar->get('language') !== null) {
|
||||
$response->getHeader()->getL11n()
|
||||
$response->header->l11n
|
||||
->loadFromLanguage(
|
||||
$this->app->cookieJar->get('language'),
|
||||
$this->app->cookieJar->get('country') ?? '*'
|
||||
);
|
||||
}
|
||||
|
||||
UriFactory::setQuery('/lang', $response->getHeader()->getL11n()->getLanguage());
|
||||
if (!\in_array($response->getLanguage(), $this->config['language'])) {
|
||||
$response->header->l11n->setLanguage($this->app->l11nServer->getLanguage());
|
||||
}
|
||||
|
||||
$pageView = new ShopView($this->app->l11nManager, $request, $response);
|
||||
$head = new Head();
|
||||
|
||||
$pageView->setData('orgId', $this->app->orgId);
|
||||
$pageView->setData('head', $head);
|
||||
$response->set('Content', $pageView);
|
||||
|
||||
/* App only allows GET */
|
||||
if ($request->getMethod() !== RequestMethod::GET) {
|
||||
$this->create406Response($response, $pageView);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* Database OK? */
|
||||
if ($this->app->dbPool->get()->getStatus() !== DatabaseStatus::OK) {
|
||||
$this->create503Response($response, $pageView);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
UriFactory::setQuery('/lang', $response->getLanguage());
|
||||
|
||||
$this->loadLanguageFromPath(
|
||||
$response->getHeader()->getL11n()->getLanguage(),
|
||||
__DIR__ . '/lang/' . $response->getHeader()->getL11n()->getLanguage() . '.lang.php'
|
||||
$response->getLanguage(),
|
||||
__DIR__ . '/lang/' . $response->getLanguage() . '.lang.php'
|
||||
);
|
||||
|
||||
$response->getHeader()->set('content-language', $response->getHeader()->getL11n()->getLanguage(), true);
|
||||
$response->header->set('content-language', $response->getLanguage(), true);
|
||||
|
||||
/* Create html head */
|
||||
$this->initResponseHead($head, $request, $response);
|
||||
|
||||
/* Handle not logged in */
|
||||
if ($account->getId() < 1) {
|
||||
$this->createLoggedOutResponse($response, $head, $pageView);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* No reading permission */
|
||||
if (!$account->hasPermission(PermissionType::READ, $this->app->orgId, $this->app->appName, 'Dashboard')) {
|
||||
$this->create403Response($response, $pageView);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$this->app->moduleManager->initRequestModules($request);
|
||||
$this->createDefaultPageView($request, $response, $pageView);
|
||||
|
||||
$dispatched = $this->app->dispatcher->dispatch(
|
||||
$this->app->router->route(
|
||||
$request->getUri()->getRoute(),
|
||||
$request->uri->getRoute(),
|
||||
$request->getData('CSRF'),
|
||||
$request->getRouteVerb(),
|
||||
$this->app->appName,
|
||||
$this->app->orgId,
|
||||
$account
|
||||
$account,
|
||||
$request->getData()
|
||||
),
|
||||
$request,
|
||||
$response
|
||||
|
|
@ -251,9 +240,7 @@ final class Application
|
|||
{
|
||||
return (int) (
|
||||
$request->getData('u') ?? (
|
||||
$config['domains'][$request->getUri()->getHost()]['org'] ?? $this->app->appSettings->get(
|
||||
Settings::DEFAULT_ORGANIZATION
|
||||
) ?? 1
|
||||
$config['domains'][$request->uri->host]['org'] ?? $config['default']['org']
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
@ -270,11 +257,11 @@ final class Application
|
|||
*/
|
||||
private function create406Response(HttpResponse $response, View $pageView) : void
|
||||
{
|
||||
$response->getHeader()->setStatusCode(RequestStatusCode::R_406);
|
||||
$pageView->setTemplate('/Web/Shop/Error/406');
|
||||
$response->header->status = RequestStatusCode::R_406;
|
||||
$pageView->setTemplate('/Web/{APPNAME}/Error/406');
|
||||
$this->loadLanguageFromPath(
|
||||
$response->getHeader()->getL11n()->getLanguage(),
|
||||
__DIR__ . '/Error/lang/' . $response->getHeader()->getL11n()->getLanguage() . '.lang.php'
|
||||
$response->getLanguage(),
|
||||
__DIR__ . '/Error/lang/' . $response->getLanguage() . '.lang.php'
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -290,11 +277,11 @@ final class Application
|
|||
*/
|
||||
private function create503Response(HttpResponse $response, View $pageView) : void
|
||||
{
|
||||
$response->getHeader()->setStatusCode(RequestStatusCode::R_503);
|
||||
$pageView->setTemplate('/Web/Shop/Error/503');
|
||||
$response->header->status = RequestStatusCode::R_503;
|
||||
$pageView->setTemplate('/Web/{APPNAME}/Error/503');
|
||||
$this->loadLanguageFromPath(
|
||||
$response->getHeader()->getL11n()->getLanguage(),
|
||||
__DIR__ . '/Error/lang/' . $response->getHeader()->getL11n()->getLanguage() . '.lang.php'
|
||||
$response->getLanguage(),
|
||||
__DIR__ . '/Error/lang/' . $response->getLanguage() . '.lang.php'
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -331,7 +318,7 @@ final class Application
|
|||
*/
|
||||
private function loadAccount(HttpRequest $request) : Account
|
||||
{
|
||||
$account = AccountMapper::getWithPermissions($request->getHeader()->getAccount());
|
||||
$account = AccountMapper::getWithPermissions($request->header->account);
|
||||
$this->app->accountManager->add($account);
|
||||
|
||||
return $account;
|
||||
|
|
@ -349,11 +336,11 @@ final class Application
|
|||
*/
|
||||
private function create403Response(HttpResponse $response, View $pageView) : void
|
||||
{
|
||||
$response->getHeader()->setStatusCode(RequestStatusCode::R_403);
|
||||
$pageView->setTemplate('/Web/Shop/Error/403');
|
||||
$response->header->status = RequestStatusCode::R_403;
|
||||
$pageView->setTemplate('/Web/{APPNAME}/Error/403');
|
||||
$this->loadLanguageFromPath(
|
||||
$response->getHeader()->getL11n()->getLanguage(),
|
||||
__DIR__ . '/Error/lang/' . $response->getHeader()->getL11n()->getLanguage() . '.lang.php'
|
||||
$response->getLanguage(),
|
||||
__DIR__ . '/Error/lang/' . $response->getLanguage() . '.lang.php'
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -371,18 +358,18 @@ final class Application
|
|||
private function initResponseHead(Head $head, HttpRequest $request, HttpResponse $response) : void
|
||||
{
|
||||
/* Load assets */
|
||||
$head->addAsset(AssetType::CSS, 'Resources/fontawesome/css/font-awesome.min.css');
|
||||
$head->addAsset(AssetType::CSS, 'cssOMS/styles.css');
|
||||
$head->addAsset(AssetType::CSS, '../Resources/fontawesome/css/font-awesome.min.css');
|
||||
$head->addAsset(AssetType::CSS, '//fonts.googleapis.com/css?family=Roboto:100,300,300i,400,700,900');
|
||||
$head->addAsset(AssetType::CSS, '../Web/{APPNAME}/css/shop.css');
|
||||
|
||||
// Framework
|
||||
$head->addAsset(AssetType::JS, 'jsOMS/Utils/oLib.js');
|
||||
$head->addAsset(AssetType::JS, 'jsOMS/UnhandledException.js');
|
||||
$head->addAsset(AssetType::JS, 'Web/Shop/js/Shop.js', ['type' => 'module']);
|
||||
$head->addAsset(AssetType::JSLATE, 'Modules/Navigation/Controller.js', ['type' => 'module']);
|
||||
$head->addAsset(AssetType::JS, '../jsOMS/Utils/oLib.js');
|
||||
$head->addAsset(AssetType::JS, '../jsOMS/UnhandledException.js');
|
||||
$head->addAsset(AssetType::JS, '../Web/{APPNAME}/js/shop.js', ['type' => 'module']);
|
||||
$head->addAsset(AssetType::JSLATE, '../Modules/Navigation/Controller.js', ['type' => 'module']);
|
||||
|
||||
$script = '';
|
||||
$response->getHeader()->set(
|
||||
$response->header->set(
|
||||
'content-security-policy',
|
||||
'base-uri \'self\'; script-src \'self\' blob: \'sha256-'
|
||||
. \base64_encode(\hash('sha256', $script, true))
|
||||
|
|
@ -394,31 +381,14 @@ final class Application
|
|||
$head->addAsset(AssetType::CSS, 'cssOMS/debug.css');
|
||||
}
|
||||
|
||||
$css = \file_get_contents(__DIR__ . '/css/Shop-small.css');
|
||||
$css = \file_get_contents(__DIR__ . '/css/shop-small.css');
|
||||
if ($css === false) {
|
||||
$css = '';
|
||||
}
|
||||
|
||||
$css = \preg_replace('!\s+!', ' ', $css);
|
||||
$head->setStyle('core', $css ?? '');
|
||||
$head->setTitle('Orange Management Shop');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create logged out response
|
||||
*
|
||||
* @param HttpResponse $response Response
|
||||
* @param Head $head Head to fill
|
||||
* @param View $pageView View
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private function createLoggedOutResponse(HttpResponse $response, Head $head, View $pageView) : void
|
||||
{
|
||||
$response->getHeader()->setStatusCode(RequestStatusCode::R_403);
|
||||
$pageView->setTemplate('/Web/Shop/login');
|
||||
$head->title = 'Demo Shop';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -434,29 +404,6 @@ final class Application
|
|||
*/
|
||||
private function createDefaultPageView(HttpRequest $request, HttpResponse $response, ShopView $pageView) : void
|
||||
{
|
||||
$pageView->setOrganizations(UnitMapper::getAll());
|
||||
$pageView->setProfile(ProfileMapper::getFor($request->getHeader()->getAccount(), 'account'));
|
||||
$pageView->setData('nav', $this->getNavigation($request, $response));
|
||||
|
||||
$pageView->setTemplate('/Web/Shop/index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create navigation
|
||||
*
|
||||
* @param HttpRequest $request Request
|
||||
* @param HttpResponse $response Response
|
||||
*
|
||||
* @return View
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private function getNavigation(HttpRequest $request, HttpResponse $response) : View
|
||||
{
|
||||
/** @var \Modules\Navigation\Controller\ShopController $navController */
|
||||
$navController = $this->app->moduleManager->get('Navigation');
|
||||
$navController->loadLanguage($request, $response);
|
||||
|
||||
return $navController->getView($request, $response);
|
||||
$pageView->setTemplate('/Web/{APPNAME}/index');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
188
Admin/Install/Application/Shop/Controller/AppController.php
Normal file
188
Admin/Install/Application/Shop/Controller/AppController.php
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 8.0
|
||||
*
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Web\{APPNAME}\Controller;
|
||||
|
||||
use phpOMS\Contract\RenderableInterface;
|
||||
use phpOMS\Message\RequestAbstract;
|
||||
use phpOMS\Message\ResponseAbstract;
|
||||
use phpOMS\Module\ModuleAbstract;
|
||||
use phpOMS\Views\View;
|
||||
|
||||
/**
|
||||
* Calendar controller class.
|
||||
*
|
||||
* @package Web\{APPNAME}
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class AppController extends ModuleAbstract
|
||||
{
|
||||
/**
|
||||
* Providing.
|
||||
*
|
||||
* @var string[]
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $providing = [];
|
||||
|
||||
/**
|
||||
* Dependencies.
|
||||
*
|
||||
* @var string[]
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $dependencies = [];
|
||||
|
||||
/**
|
||||
* Routing end-point for application behaviour.
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param mixed $data Generic data
|
||||
*
|
||||
* @return RenderableInterface
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function viewFront(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Web/{APPNAME}/tpl/front');
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Routing end-point for application behaviour.
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param mixed $data Generic data
|
||||
*
|
||||
* @return RenderableInterface
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function viewComponents(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Web/{APPNAME}/tpl/components');
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Routing end-point for application behaviour.
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param mixed $data Generic data
|
||||
*
|
||||
* @return RenderableInterface
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function viewImprint(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Web/{APPNAME}/tpl/imprint');
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Routing end-point for application behaviour.
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param mixed $data Generic data
|
||||
*
|
||||
* @return RenderableInterface
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function viewTerms(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Web/{APPNAME}/tpl/terms');
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Routing end-point for application behaviour.
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param mixed $data Generic data
|
||||
*
|
||||
* @return RenderableInterface
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function viewDataPrivacy(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Web/{APPNAME}/tpl/privacy');
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Routing end-point for application behaviour.
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param mixed $data Generic data
|
||||
*
|
||||
* @return RenderableInterface
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function viewList(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Web/{APPNAME}/tpl/list');
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Routing end-point for application behaviour.
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param mixed $data Generic data
|
||||
*
|
||||
* @return RenderableInterface
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function viewItem(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Web/{APPNAME}/tpl/item');
|
||||
|
||||
return $view;
|
||||
}
|
||||
}
|
||||
48
Admin/Install/Application/Shop/Routes.php
Normal file
48
Admin/Install/Application/Shop/Routes.php
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
use phpOMS\Router\RouteVerb;
|
||||
|
||||
return [
|
||||
'^(\/[a-zA-Z]*\/*|\/)$' => [
|
||||
[
|
||||
'dest' => '\Web\{APPNAME}\Controller\AppController:viewFront',
|
||||
'verb' => RouteVerb::GET,
|
||||
],
|
||||
],
|
||||
'^(\/[a-zA-Z]*\/*|\/)/components(\?.*|$)$' => [
|
||||
[
|
||||
'dest' => '\Web\{APPNAME}\Controller\AppController:viewComponents',
|
||||
'verb' => RouteVerb::GET,
|
||||
],
|
||||
],
|
||||
'^(\/[a-zA-Z]*\/*|\/)/imprint(\?.*|$)$' => [
|
||||
[
|
||||
'dest' => '\Web\{APPNAME}\Controller\AppController:viewImprint',
|
||||
'verb' => RouteVerb::GET,
|
||||
],
|
||||
],
|
||||
'^(\/[a-zA-Z]*\/*|\/)/terms(\?.*|$)$' => [
|
||||
[
|
||||
'dest' => '\Web\{APPNAME}\Controller\AppController:viewTerms',
|
||||
'verb' => RouteVerb::GET,
|
||||
],
|
||||
],
|
||||
'^(\/[a-zA-Z]*\/*|\/)/privacy(\?.*|$)$' => [
|
||||
[
|
||||
'dest' => '\Web\{APPNAME}\Controller\AppController:viewDataPrivacy',
|
||||
'verb' => RouteVerb::GET,
|
||||
],
|
||||
],
|
||||
'^(\/[a-zA-Z]*\/*|\/)/list(\?.*|$)$' => [
|
||||
[
|
||||
'dest' => '\Web\{APPNAME}\Controller\AppController:viewList',
|
||||
'verb' => RouteVerb::GET,
|
||||
],
|
||||
],
|
||||
'^(\/[a-zA-Z]*\/*|\/)/item(\?.*|$)$' => [
|
||||
[
|
||||
'dest' => '\Web\{APPNAME}\Controller\AppController:viewItem',
|
||||
'verb' => RouteVerb::GET,
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* PHP Version 7.4
|
||||
*
|
||||
* @package Web\Shop
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Web\Shop;
|
||||
namespace Web\{APPNAME};
|
||||
|
||||
use Modules\Organization\Models\Unit;
|
||||
use Modules\Profile\Models\Profile;
|
||||
|
|
@ -22,95 +22,12 @@ use phpOMS\Views\View;
|
|||
/**
|
||||
* List view.
|
||||
*
|
||||
* @package Web\Shop
|
||||
* @package Web\{APPNAME}
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class ShopView extends View
|
||||
{
|
||||
/**
|
||||
* Navigation view
|
||||
*
|
||||
* @var View
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected $nav = null;
|
||||
|
||||
/**
|
||||
* User profile.
|
||||
*
|
||||
* @var Profile
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected $profile = null;
|
||||
|
||||
/**
|
||||
* Organizations.
|
||||
*
|
||||
* @var Unit[]
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected $organizations = null;
|
||||
|
||||
/**
|
||||
* Set navigation view.
|
||||
*
|
||||
* @param View $nav Navigation view
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function setNavigation(View $nav) : void
|
||||
{
|
||||
$this->nav = $nav;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set user profile.
|
||||
*
|
||||
* @param Profile $profile user account
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function setProfile(Profile $profile) : void
|
||||
{
|
||||
$this->profile = $profile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get profile image
|
||||
*
|
||||
* @return string Profile image link
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function getProfileImage() : string
|
||||
{
|
||||
if ($this->profile === null || $this->profile->getImage()->getPath() === '') {
|
||||
return UriFactory::build('Web/Shop/img/user_default_' . \mt_rand(1, 6) . '.png');
|
||||
}
|
||||
|
||||
return UriFactory::build($this->profile->getImage()->getPath());
|
||||
}
|
||||
|
||||
/**
|
||||
* Set organizations
|
||||
*
|
||||
* @param Unit[] $organizations Organizations
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function setOrganizations(array $organizations) : void
|
||||
{
|
||||
$this->organizations = $organizations;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
137
Admin/Install/Application/Shop/Themes/Default/css/shop-small.css
Normal file
137
Admin/Install/Application/Shop/Themes/Default/css/shop-small.css
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
html, body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
max-height: 100%;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
color: #242424;
|
||||
}
|
||||
|
||||
header {
|
||||
margin-bottom: 1rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 1rem;
|
||||
text-align: right;
|
||||
padding: 2rem 0 2rem 0;
|
||||
}
|
||||
|
||||
footer hr {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
header hr, footer hr {
|
||||
border: 0;
|
||||
border-bottom: 1px solid #e6e6e6;
|
||||
}
|
||||
|
||||
header img {
|
||||
max-width: 300px;
|
||||
min-width: 100px;
|
||||
width: 25%;
|
||||
margin: 3rem 0 0 0;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 3rem;
|
||||
font-weight: 300;
|
||||
margin: 3rem 0 1rem 0;
|
||||
}
|
||||
|
||||
header h2 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 300;
|
||||
margin: 0rem 0 3rem 0;
|
||||
color: #777;
|
||||
}
|
||||
|
||||
nav {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
color: #e6e6e6;
|
||||
}
|
||||
|
||||
nav a {
|
||||
color: #25acff;
|
||||
}
|
||||
|
||||
main {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
nav ul, footer ul {
|
||||
display: inline-block;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
nav li, footer li {
|
||||
display: inline-block;
|
||||
padding: .5rem 1rem .5rem 1rem;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #25acff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.floater {
|
||||
width: 80%;
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.content ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.content li:before {
|
||||
content: "\2022";
|
||||
color: #25acff;
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
width: 1rem;
|
||||
margin-left: -1rem;
|
||||
}
|
||||
|
||||
footer a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
footer a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.content p, .content ul {
|
||||
line-height: 1.7rem;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
color: #fff;
|
||||
background: #25acff;
|
||||
border: 1px solid #0480ce;
|
||||
padding: 1rem;
|
||||
border-radius: 5px;
|
||||
margin: 1.5rem;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 1rem;
|
||||
background: #eee;
|
||||
display: block;
|
||||
border-left: 3px solid #25acff;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
code pre {
|
||||
margin: 0;
|
||||
}
|
||||
134
Admin/Install/Application/Shop/Themes/Default/css/shop.css
Normal file
134
Admin/Install/Application/Shop/Themes/Default/css/shop.css
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
#front-header {
|
||||
box-sizing: border-box;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.front-header-columns {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
height: 450px;
|
||||
}
|
||||
|
||||
.front-columns {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
height: 250px;
|
||||
margin-top: .5rem;
|
||||
}
|
||||
|
||||
.front-shop-portlet {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #ccc;
|
||||
}
|
||||
|
||||
.left, .right {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.left {
|
||||
margin-right: .5rem;
|
||||
flex-grow: 3;
|
||||
}
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 2;
|
||||
}
|
||||
|
||||
.right > a+a {
|
||||
margin-top: .5rem;
|
||||
}
|
||||
|
||||
#front-small {
|
||||
display: flex;
|
||||
height: 250px;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
#front-small .front-shop-portlet+.front-shop-portlet {
|
||||
margin-left: .5rem;
|
||||
}
|
||||
|
||||
#front-small-header {
|
||||
margin-top: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#front-small-header h1, #front-small-header h2 {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#front-small-header h1 {
|
||||
font-weight: 400;
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
#front-small-header h2 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.front-shop-portlet {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.front-shop-portlet > div {
|
||||
margin-top: auto;
|
||||
text-align: center;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.front-shop-portlet h1, .front-shop-portlet h2 {
|
||||
font-size: 1rem;
|
||||
font-weight: 300;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#list-content {
|
||||
display: flex;
|
||||
flex-direction: row
|
||||
}
|
||||
|
||||
#side {
|
||||
background: #ccc;
|
||||
flex: 1;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
#list {
|
||||
flex: 3;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.list-shop-portlet {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #ccc;
|
||||
min-width: 150px;
|
||||
max-width: 250px;
|
||||
height: 200px;
|
||||
margin: .5rem 0 0 .5rem;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.list-shop-portlet > div {
|
||||
margin-top: auto;
|
||||
text-align: center;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.list-shop-portlet h1, .list-shop-portlet h2 {
|
||||
font-size: 1rem;
|
||||
font-weight: 300;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
use phpOMS\Uri\UriFactory;
|
||||
|
||||
?>
|
||||
<footer>
|
||||
<div class="floater">
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="<?= UriFactory::build('{/app}/terms'); ?>">Terms</a>
|
||||
<li><a href="<?= UriFactory::build('{/app}/privacy'); ?>">Data Protection</a>
|
||||
<li><a href="<?= UriFactory::build('{/app}/imprint'); ?>">Imprint</a>
|
||||
</ul>
|
||||
</div>
|
||||
</footer>
|
||||
104
Admin/Install/Application/Shop/Themes/Default/tpl/front.tpl.php
Normal file
104
Admin/Install/Application/Shop/Themes/Default/tpl/front.tpl.php
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 8.0
|
||||
*
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
use phpOMS\Uri\UriFactory;
|
||||
|
||||
?>
|
||||
|
||||
<div class="content">
|
||||
<div class="floater">
|
||||
<div id="front-header">
|
||||
<div class="front-header-columns">
|
||||
<div class="left">
|
||||
<a class="front-shop-portlet" href="shop/list">
|
||||
</a>
|
||||
</div>
|
||||
<div class="right">
|
||||
<a class="front-shop-portlet" href="shop/list">
|
||||
</a>
|
||||
|
||||
<a class="front-shop-portlet" href="shop/list">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="front-columns">
|
||||
<div class="left">
|
||||
<a class="front-shop-portlet" href="shop/list">
|
||||
</a>
|
||||
</div>
|
||||
<div class="right">
|
||||
<a class="front-shop-portlet" href="shop/list">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="front-small-header">
|
||||
<h1>Arcticles for you</h1>
|
||||
<h2>Special offers you may be interested in</h2>
|
||||
</div>
|
||||
|
||||
<div id="front-small">
|
||||
<a class="front-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="front-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="front-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="front-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="front-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="front-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="front-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 8.0
|
||||
*
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
use phpOMS\Uri\UriFactory;
|
||||
|
||||
?>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="<?= UriFactory::build('{/app}'); ?>">Main</a>
|
||||
<li>|
|
||||
<li><a href="<?= UriFactory::build('{/app}/components'); ?>">Components</a>
|
||||
</ul>
|
||||
</nav>
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 8.0
|
||||
*
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
?>
|
||||
|
||||
<div class="content">
|
||||
<div class="floater">
|
||||
<h1>Imprint</h1>
|
||||
<p>Orange-Management</p>
|
||||
|
||||
<h2>Vertreten durch</h2>
|
||||
<p>Dennis Eichhorn</p>
|
||||
|
||||
<h2>Kontakt</h2>
|
||||
<p>spl1nes.com@googlemail.com</p>
|
||||
|
||||
<h2>Registereintrag</h2>
|
||||
<p>Nicht vorhanden</p>
|
||||
|
||||
<h2>Umsatzsteuer-ID gemäß §27 a Umsatzsteuergesetz</h2>
|
||||
<p>Nicht vorhanden</p>
|
||||
|
||||
<h2>Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV</h2>
|
||||
<p>Orange-Management</p>
|
||||
<p>Dennis Eichhorn</p>
|
||||
|
||||
<h2>Datenschutzbeauftragter</h2>
|
||||
<p>spl1nes.com@googlemail.com<p>
|
||||
</div>
|
||||
</div>
|
||||
204
Admin/Install/Application/Shop/Themes/Default/tpl/list.tpl.php
Normal file
204
Admin/Install/Application/Shop/Themes/Default/tpl/list.tpl.php
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
<div class="content">
|
||||
<div class="floater">
|
||||
<div id="list-content">
|
||||
<div id="side">a</div>
|
||||
<div id="list">
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="list-shop-portlet" href="shop/item">
|
||||
<div>
|
||||
<h1>Item name</h1>
|
||||
<h2>Description</h2>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 8.0
|
||||
*
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
?>
|
||||
|
||||
<div class="content">
|
||||
<div class="floater">
|
||||
<h1>Privacy Policy</h1>
|
||||
<p>This privacy policy ("POLICY") will help you understand how [name] ("us", "we", "our") uses and protects the data you provide to us when you visit and use Orange-Management ("website", "service" and "application").</p>
|
||||
|
||||
<h2>Definitions</h2>
|
||||
<p>For the purposes of these POLICIES:<p>
|
||||
|
||||
<ul>
|
||||
<li>AFFILIATED means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.</li>
|
||||
<li>COUNTRY refers to Germany</li>
|
||||
<li>COMPANY (referred to as either "the Company", "We", "Us" or "Our" in this AGREEMENT) refers to Orange Management, Gartenstr. 26, 61206 Woellstadt.</li>
|
||||
<li>DEVICE means any device that can access the SERVICE such as a computer, a cellphone or a digital tablet.</li>
|
||||
<li>SERVICE refers to the Website</li>
|
||||
<li>POLICY or AGREEMENT mean these policies that form the entire agreement between You and the COMPANY regarding the use of the SERVICE.</li>
|
||||
<li>Third-party Social Media SERVICE means any services or content (including data, information, products or services) provided by a third-party that may be displayed, included or made available by the SERVICE.</li>
|
||||
<li>WEBSITE refers to orange-management.org (.net, .app, .service, .support, .email, .de, .solutions)</li>
|
||||
<li>APPLICATION refers to all downloadable or installable content which can therfore be used on an a given DEVICE.</li>
|
||||
<li>You means the individual accessing or using the SERVICE, or the company, or other legal entity on behalf of which such individual is accessing or using the SERVICE, as applicable.</li>
|
||||
</ul>
|
||||
|
||||
<h2>What User Data we Collect</h2>
|
||||
<p>When you visit the WEBSITE or APPLICATION, we may collect the following data:</p>
|
||||
|
||||
<ul>
|
||||
<li>Your IP address.</li>
|
||||
<li>Your contact information and email address.</li>
|
||||
<li>Data profile regarding your online behavior on our WEBSITE.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Why We Collect Your Data</h2>
|
||||
<p>We are collecting your data for several reasons:</p>
|
||||
|
||||
<ul>
|
||||
<li>To better understand your needs.</li>
|
||||
<li>To improve our SERVICES and products.</li>
|
||||
<li>To send you promotional emails containing the information we think you will find interesting.</li>
|
||||
<li>To contact you to fill out surveys and participate in other types of market research.</li>
|
||||
<li>To customize our WEBSITE according to your online behavior and personal preferences.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Safeguarding and Securing the Data</h2>
|
||||
<p>Orange-Management is committed to securing your data and keeping it confidential. Orange-Management has done all in its power to prevent data theft, unauthorized access, and disclosure by implementing the latest technologies and software, which help us safeguard all the information we collect online.</p>
|
||||
|
||||
<h2>Our Cookie Policy</h2>
|
||||
<p>Once you agree to allow our WEBSITE or APPLICATION to use cookies, you also agree to these POLICIES.</p>
|
||||
<p>Please note that cookies don't allow us to gain control of your computer in any way.</p>
|
||||
<p>If you want to disable cookies, you can do it by accessing the settings of your internet browser.</p>
|
||||
<p>Please note that some functionality cannot be made available to you if you don't accept cookies</p>
|
||||
|
||||
<h2>Links</h2>
|
||||
<p>Our SERVICE may contain links to third-party web sites or services that are not owned or controlled by the COMPANY.</p>
|
||||
<p>The COMPANY has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party websites or services. You further acknowledge and agree that the COMPANY shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods or services available on or through any such websites or services.</p>
|
||||
<p>We strongly advise You to read the terms and conditions and privacy policies of any third-party web sites or services that You visit.</p>
|
||||
|
||||
<h2>Restricting the Collection of your Personal Data</h2>
|
||||
<p>At some point, you might wish to restrict the use and collection of your personal data. You can achieve this by doing the following:</p>
|
||||
|
||||
<ul>
|
||||
<li>Don't accept cookies from our WEBSITE and APPLICATION</li>
|
||||
<li>If you have already agreed to share your information with us, feel free to contact us via email and we will be more than happy to change this for you.</li>
|
||||
</ul>
|
||||
|
||||
<p>Orange-Management will not lease, sell or distribute your personal information to any third parties, unless we have your permission. We might do so if the law forces us. Your personal information will be used when we need to send you promotional materials if you agree to this privacy policy.</p>
|
||||
|
||||
<h2>Governing Law</h2>
|
||||
<p>The laws of the COUNTRY, excluding its conflicts of law rules, shall govern this POLICY and Your use of the SERVICE. Your use of the APPLICATION may also be subject to other local, state, national, or international laws.</p>
|
||||
<p>The ineffectiveness of one or more provisions of this agreement does not affect the validity of the others. Each party to these TERMS can in this case demand that a new valid provision be agreed which best achieves the economic purpose of the ineffective provision.</p>
|
||||
|
||||
<h2>Dispute Resolution</h2>
|
||||
<p>If You have any concern or dispute about the SERVICE, You agree to first try to resolve the dispute informally by contacting the COMPANY.</p>
|
||||
|
||||
<h2>Changes to these Policies</h2>
|
||||
<p>We reserve the right, at Our sole discretion, to modify or replace these POLICIES at any time. If a revision is material We will make reasonable efforts to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at Our sole discretion.</p>
|
||||
<p>By continuing to access or use Our SERVICE after those revisions become effective, You agree to be bound by the revised policies. If You do not agree to the new policies, in whole or in part, please stop using the WEBSITE and the SERVICE.</p>
|
||||
|
||||
<h2>Contact</h2>
|
||||
<p>For questions regarding these POLICIES please feel free to contact us at info@orange-management.email</p>
|
||||
</div>
|
||||
</div>
|
||||
113
Admin/Install/Application/Shop/Themes/Default/tpl/terms.tpl.php
Normal file
113
Admin/Install/Application/Shop/Themes/Default/tpl/terms.tpl.php
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 8.0
|
||||
*
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
?>
|
||||
|
||||
<div class="content">
|
||||
<div class="floater">
|
||||
<h1>Terms of Service</h1>
|
||||
|
||||
<h2>Definitions</h2>
|
||||
<p>For the purposes of these TERMS:<p>
|
||||
|
||||
<ul>
|
||||
<li>AFFILIATED means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.</li>
|
||||
<li>COUNTRY refers to Germany</li>
|
||||
<li>COMPANY (referred to as either "the Company", "We", "Us" or "Our" in this AGREEMENT) refers to Orange Management, Gartenstr. 26, 61206 Woellstadt.</li>
|
||||
<li>DEVICE means any device that can access the Service such as a computer, a cellphone or a digital tablet.</li>
|
||||
<li>SERVICE refers to the Website</li>
|
||||
<li>TERMS or AGREEMENT mean these terms that form the entire agreement between You and the COMPANY regarding the use of the SERVICE.</li>
|
||||
<li>Third-party Social Media Service means any services or content (including data, information, products or services) provided by a third-party that may be displayed, included or made available by the SERVICE.</li>
|
||||
<li>WEBSITE refers to orange-management.org (.net, .app, .service, .support, .email, .de, .solutions)</li>
|
||||
<li>APPLICATION refers to all downloadable or installable content which can therfore be used on an a given DEVICE.</li>
|
||||
<li>You means the individual accessing or using the SERVICES, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Acknowledgement</h2>
|
||||
<p>These are the TERMS governing the use of this SERVICE and the agreement that operates between You and the COMPANY. These TERMS set out the rights and obligations of all users regarding the use of the SERVICE.</p>
|
||||
<p>Your access to and use of the SERVICE is conditioned on Your acceptance of and compliance with these TERMS. These TERMS apply to all visitors, users and others who access or use the SERVICE.</p>
|
||||
<p>By accessing or using the SERVICE You agree to be bound by these TERMS. If You disagree with any part of these TERMS then You may not access the SERVICE.<p>
|
||||
<p>You represent that you are at least over the age of 18 and be over the Age of Majority. The COMPANY does not permit those under 18 or the Age of Majurity to use the SERVICE.</p>
|
||||
<p>Your access to and use of the SERVICE is also conditioned on Your acceptance of and compliance with the Privacy Policy of the COMPANY. Our Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your personal information when You use the Application or the WEBSITE and tells You about Your privacy rights and how the law protects You. Please read Our Privacy Policy carefully before using Our SERVICE.</p>
|
||||
|
||||
<h2>Copyright</h2>
|
||||
<p>Unless otherwise noted, all materials including without limitation, logos, brand names, images, designs, photographs, videos, audio, source code and written and other materials that appear as part of our WEBSITE are copyrights, trademarks, service marks, trade dress and/or other intellectual property whether registered or unregistered ("Intellectual Property") owned, controlled or licensed by Orange-Management. Our WEBSITE as a whole is protected by copyright and trade dress. Nothing on our WEBSITE should be construed as granting, by implication, estoppel or otherwise, any license or right to use any Intellectual Property displayed or used on our WEBSITE, without the prior written permission of the Intellectual Property owner. Orange-Management aggressively enforces its intellectual property rights to the fullest extent of the law. The names and logos of Orange-Management, may not be used in any way, including in advertising or publicity pertaining to distribution of materials on our WEBSITE, without prior, written permission from Orange-Management. Orange-Management prohibits use of any logo of Orange-Management or any of its affiliates as part of a link to or from any WEBSITE unless Orange-Management approves such link in advance and in writing. Fair use of Orange-Management Intellectual Property requires proper acknowledgment. Other product and company names mentioned in our Website may be the Intellectual Property of their respective owners.</p>
|
||||
|
||||
<h2>Links</h2>
|
||||
<p>Our SERVICE may contain links to third-party web sites or services that are not owned or controlled by the COMPANY.</p>
|
||||
<p>The COMPANY has no control over, and assumes no responsibility for, the contentthird-party web sites or services that You visit.</p>
|
||||
|
||||
<h2>Termination</h2>
|
||||
<p>We may terminate or suspend Your access immediately, without prior notice or liability, for any reason whatsoever, including without limitation if You breach these TERMS.</p>
|
||||
<p>Upon termination, Your right to use the SERVICE will cease immediately.</p>
|
||||
|
||||
<h2>Limitation of Liability</h2>
|
||||
<p>Notwithstanding any damages that You might incur, the entire liability of the COMPANY and any of its suppliers under any provision of this TERMS and Your exclusive remedy for all of the foregoing shall be limited to the amount actually paid by through the SERVICE.</p>
|
||||
<p>To the maximum extent permitted by applicable law, in no event shall the COMPANY or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits, loss of data or other information, for business interruption, for personal injury, loss of privacy arising out of or in any way related to the use of or inability to use the SERVICE, third-party software and/or third-party hardware used with the SERVICE, or otherwise in connection with any provision of this TERMS), even if the COMPANY or any supplier has been advised of the possibility of such damages and even if the remedy fails of its essential purpose.</p>
|
||||
<p>Some states or countries do not allow the exclusion of implied warranties or limitation of liability for incidental or consequential damages, which means that some of the above limitations may not apply. In these states or countries, each party's liability will be limited to the greatest extent permitted by law.</p>
|
||||
|
||||
<h2>Disclaimer</h2>
|
||||
<p>The SERVICE is provided to You "AS IS" and "AS AVAILABLE" and with all faults and defects without warranty of any kind. To the maximum extent permitted under applicable law, the COMPANY, on its own behalf and on behalf of its AFFILIATES and its and their respective licensors and service providers, expressly disclaims all warranties, whether express, implied, statutory or otherwise, with respect to the SERVICE, including all implied warranties of merchantability, fitness for a particular purpose, title and non-infringement, and warranties that may arise out of course of dealing, course of performance, usage or trade practice. Without limitation to the foregoing, the COMPANY provides no warranty or undertaking, and makes no representation of any kind that the SERVICE will meet Your requirements, achieve any intended results, be compatible or work with any other software, applications, systems or services, operate without interruption, meet any performance or reliability standards or be error free or that any errors or defects can or will be corrected.</p>
|
||||
<p>Without limiting the foregoing, neither the COMPANY nor any of the company's provider makes any representation or warranty of any kind, express or implied: (i) as to the operation or availability of the SERVICE, or the information, content, and materials or products included thereon; (ii) that the SERVICE will be uninterrupted or error-free; (iii) as to the accuracy, reliability, or currency of any information or content provided through the SERVICE; or (iv) that the SERVICE, its servers, the content, or e-mails sent from or on behalf of the COMPANY are free of viruses, scripts, trojan horses, worms, malware, timebombs or other harmful components.</p>
|
||||
<p>Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on applicable statutory rights of a consumer, so some or all of the above exclusions and limitations may not apply to You. But in such a case the exclusions and limitations set forth in this section shall be applied to the greatest extent enforceable under applicable law.</p>
|
||||
|
||||
<h2>Governing Law</h2>
|
||||
<p>The laws of the COUNTRY, excluding its conflicts of law rules, shall govern these TERMS and Your use of the SERVICE. Your use of the APPLICATION may also be subject to other local, state, national, or international laws.</p>
|
||||
<p>The ineffectiveness of one or more provisions of this agreement does not affect the validity of the others. Each party to these TERMS can in this case demand that a new valid provision be agreed which best achieves the economic purpose of the ineffective provision.</p>
|
||||
|
||||
<h2>Dispute Resolution</h2>
|
||||
<p>If You have any concern or dispute about the Service, You agree to first try to resolve the dispute informally by contacting the COMPANY.</p>
|
||||
|
||||
<h2>United States Legal Compliance</h2>
|
||||
<p>You represent and warrant that (i) You are not located in a country that is subject to the United States government embargo, or that has been designated by the United States government as a "terrorist supporting" country, and (ii) You are not listed on any United States government list of prohibited or restricted parties.</p>
|
||||
|
||||
<h2>Changes to these Terms</h2>
|
||||
<p>We reserve the right, at Our sole discretion, to modify or replace these TERMS at any time. If a revision is material We will make reasonable efforts to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at Our sole discretion.</p>
|
||||
<p>By continuing to access or use Our SERVICE after those revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, in whole or in part, please stop using the WEBSITE and the SERVICE.</p>
|
||||
|
||||
<h2>Contact</h2>
|
||||
<p>For questions regarding these TERMS please feel free to contact us at info@orange-management.email</p>, privacy policies, or practices of any third party websites or services. You further acknowledge and agree that the COMPANY shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods or services available on or through any such websites or services.</p>
|
||||
<p>We strongly advise You to read the terms and conditions and privacy policies of any third-party web sites or services that You visit.</p>
|
||||
|
||||
<h2>Termination</h2>
|
||||
<p>We may terminate or suspend Your access immediately, without prior notice or liability, for any reason whatsoever, including without limitation if You breach these TERMS.</p>
|
||||
<p>Upon termination, Your right to use the SERVICE will cease immediately.</p>
|
||||
|
||||
<h2>Limitation of Liability</h2>
|
||||
<p>Notwithstanding any damages that You might incur, the entire liability of the COMPANY and any of its suppliers under any provision of this TERMS and Your exclusive remedy for all of the foregoing shall be limited to the amount actually paid by through the SERVICE.</p>
|
||||
<p>To the maximum extent permitted by applicable law, in no event shall the COMPANY or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits, loss of data or other information, for business interruption, for personal injury, loss of privacy arising out of or in any way related to the use of or inability to use the SERVICE, third-party software and/or third-party hardware used with the SERVICE, or otherwise in connection with any provision of this TERMS), even if the COMPANY or any supplier has been advised of the possibility of such damages and even if the remedy fails of its essential purpose.</p>
|
||||
<p>Some states or countries do not allow the exclusion of implied warranties or limitation of liability for incidental or consequential damages, which means that some of the above limitations may not apply. In these states or countries, each party's liability will be limited to the greatest extent permitted by law.</p>
|
||||
|
||||
<h2>Disclaimer</h2>
|
||||
<p>The SERVICE is provided to You "AS IS" and "AS AVAILABLE" and with all faults and defects without warranty of any kind. To the maximum extent permitted under applicable law, the COMPANY, on its own behalf and on behalf of its AFFILIATES and its and their respective licensors and service providers, expressly disclaims all warranties, whether express, implied, statutory or otherwise, with respect to the SERVICE, including all implied warranties of merchantability, fitness for a particular purpose, title and non-infringement, and warranties that may arise out of course of dealing, course of performance, usage or trade practice. Without limitation to the foregoing, the COMPANY provides no warranty or undertaking, and makes no representation of any kind that the SERVICE will meet Your requirements, achieve any intended results, be compatible or work with any other software, applications, systems or services, operate without interruption, meet any performance or reliability standards or be error free or that any errors or defects can or will be corrected.</p>
|
||||
<p>Without limiting the foregoing, neither the COMPANY nor any of the company's provider makes any representation or warranty of any kind, express or implied: (i) as to the operation or availability of the SERVICE, or the information, content, and materials or products included thereon; (ii) that the SERVICE will be uninterrupted or error-free; (iii) as to the accuracy, reliability, or currency of any information or content provided through the SERVICE; or (iv) that the SERVICE, its servers, the content, or e-mails sent from or on behalf of the COMPANY are free of viruses, scripts, trojan horses, worms, malware, timebombs or other harmful components.</p>
|
||||
<p>Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on applicable statutory rights of a consumer, so some or all of the above exclusions and limitations may not apply to You. But in such a case the exclusions and limitations set forth in this section shall be applied to the greatest extent enforceable under applicable law.</p>
|
||||
|
||||
<h2>Governing Law</h2>
|
||||
<p>The laws of the COUNTRY, excluding its conflicts of law rules, shall govern these TERMS and Your use of the SERVICE. Your use of the APPLICATION may also be subject to other local, state, national, or international laws.</p>
|
||||
<p>The ineffectiveness of one or more provisions of this agreement does not affect the validity of the others. Each party to these TERMS can in this case demand that a new valid provision be agreed which best achieves the economic purpose of the ineffective provision.</p>
|
||||
|
||||
<h2>Dispute Resolution</h2>
|
||||
<p>If You have any concern or dispute about the Service, You agree to first try to resolve the dispute informally by contacting the COMPANY.</p>
|
||||
|
||||
<h2>United States Legal Compliance</h2>
|
||||
<p>You represent and warrant that (i) You are not located in a country that is subject to the United States government embargo, or that has been designated by the United States government as a "terrorist supporting" country, and (ii) You are not listed on any United States government list of prohibited or restricted parties.</p>
|
||||
|
||||
<h2>Changes to these Terms</h2>
|
||||
<p>We reserve the right, at Our sole discretion, to modify or replace these TERMS at any time. If a revision is material We will make reasonable efforts to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at Our sole discretion.</p>
|
||||
<p>By continuing to access or use Our SERVICE after those revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, in whole or in part, please stop using the WEBSITE and the SERVICE.</p>
|
||||
|
||||
<h2>Contact</h2>
|
||||
<p>For questions regarding these TERMS please feel free to contact us at info@orange-management.email</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 8.0
|
||||
*
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
*
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
use phpOMS\Uri\UriFactory;
|
||||
|
||||
/** @var phpOMS\Model\Html\Head $head */
|
||||
$head = $this->getData('head');
|
||||
|
||||
/** @var array $dispatch */
|
||||
$dispatch = $this->getData('dispatch') ?? [];
|
||||
?>
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="<?= $this->printHtml($this->response->getLanguage()); ?>">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="theme-color" content="#262626">
|
||||
<meta name="msapplication-navbutton-color" content="#262626">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="#262626">
|
||||
<meta name="description" content="<?= $this->getHtml(':meta', '0', '0'); ?>">
|
||||
<?= $head->render(); ?>
|
||||
|
||||
<base href="<?= UriFactory::build('{/base}'); ?>/">
|
||||
|
||||
<link rel="manifest" href="<?= UriFactory::build('Web/{APPNAME}/manifest.json'); ?>">
|
||||
<link rel="shortcut icon" href="<?= UriFactory::build('Web/{APPNAME}/img/favicon.ico'); ?>" type="image/x-icon">
|
||||
|
||||
<title><?= $this->printHtml($head->title); ?></title>
|
||||
|
||||
<?= $head->renderAssets(); ?>
|
||||
|
||||
<style><?= $head->renderStyle(); ?></style>
|
||||
<script><?= $head->renderScript(); ?></script>
|
||||
</head>
|
||||
<body>
|
||||
<?php include __DIR__ . '/tpl/header.tpl.php'; ?>
|
||||
<main>
|
||||
<?php
|
||||
foreach ($dispatch as $view) {
|
||||
if ($view instanceof \phpOMS\Contract\RenderableInterface) {
|
||||
echo $view->render();
|
||||
}
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
<?php include __DIR__ . '/tpl/footer.tpl.php'; ?>
|
||||
20
Admin/Install/Application/Shop/info.json
Normal file
20
Admin/Install/Application/Shop/info.json
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"name": {
|
||||
"id": 1007700001,
|
||||
"internal": "{APPNAME}",
|
||||
"external": "{APPNAME}"
|
||||
},
|
||||
"category": "Web",
|
||||
"version": "1.0.0",
|
||||
"requirements": {
|
||||
"phpOMS": "1.0.0",
|
||||
"phpOMS-db": "1.0.0"
|
||||
},
|
||||
"creator": {
|
||||
"name": "Orange Management",
|
||||
"website": "www.spl1nes.com"
|
||||
},
|
||||
"description": "The shop application.",
|
||||
"directory": "Shop",
|
||||
"dependencies": {}
|
||||
}
|
||||
5
Admin/Install/Application/Shop/js/shop.js
Normal file
5
Admin/Install/Application/Shop/js/shop.js
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
jsOMS.ready(function ()
|
||||
{
|
||||
"use strict";
|
||||
|
||||
});
|
||||
19
Admin/Install/Application/Shop/lang/en.lang.php
Normal file
19
Admin/Install/Application/Shop/lang/en.lang.php
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 8.0
|
||||
*
|
||||
* @package Web\{APPNAME}
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
*
|
||||
* @version 1.0.0
|
||||
*
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
return [[
|
||||
':meta' => 'Demo Shop.',
|
||||
]];
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
{
|
||||
"lang": "en",
|
||||
"dir": "ltr",
|
||||
"start_url": "../../{APPNAME}",
|
||||
"type": "privileged",
|
||||
"name": "Orange Management Shop",
|
||||
"description": "OMS shop application.",
|
||||
"short_name": "OMS Shop",
|
||||
"icons": [
|
||||
{
|
||||
"src": "img/maskable_icon-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-128x128.png",
|
||||
"sizes": "128x128",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-152x152.png",
|
||||
"sizes": "152x152",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-384x384.png",
|
||||
"sizes": "384x384",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
}
|
||||
],
|
||||
"scope": "/",
|
||||
"display": "standalone",
|
||||
"orientation": "any",
|
||||
"theme_color": "#343a40",
|
||||
"background_color": "white",
|
||||
"permissions": {
|
||||
"audio-capture" : {
|
||||
"description" : "Audio capture"
|
||||
},
|
||||
"video-capture": {
|
||||
"description": "Video capture"
|
||||
},
|
||||
"speech-recognition" : {
|
||||
"description" : "Speech recognition"
|
||||
}
|
||||
}
|
||||
}
|
||||
75
Admin/Install/Application/Shop/manifest.webmanifest
Normal file
75
Admin/Install/Application/Shop/manifest.webmanifest
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
{
|
||||
"lang": "en",
|
||||
"dir": "ltr",
|
||||
"start_url": "../../{APPNAME}",
|
||||
"type": "privileged",
|
||||
"name": "Orange Management Shop",
|
||||
"description": "OMS shop application.",
|
||||
"short_name": "OMS Shop",
|
||||
"icons": [
|
||||
{
|
||||
"src": "img/maskable_icon-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-128x128.png",
|
||||
"sizes": "128x128",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-152x152.png",
|
||||
"sizes": "152x152",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-384x384.png",
|
||||
"sizes": "384x384",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "img/maskable_icon-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
}
|
||||
],
|
||||
"scope": "/",
|
||||
"display": "standalone",
|
||||
"orientation": "any",
|
||||
"theme_color": "#343a40",
|
||||
"background_color": "white",
|
||||
"permissions": {
|
||||
"audio-capture" : {
|
||||
"description" : "Audio capture"
|
||||
},
|
||||
"video-capture": {
|
||||
"description": "Video capture"
|
||||
},
|
||||
"speech-recognition" : {
|
||||
"description" : "Speech recognition"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
[
|
||||
{
|
||||
"src": "Modules/Shop/Install/Application/Shop",
|
||||
"src": "Modules/Shop/Admin/Install/Application/Shop",
|
||||
"dest": "Web/Shop",
|
||||
"name": "Shop"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace Modules\Shop\Admin\Install;
|
|||
|
||||
use Model\Setting;
|
||||
use Model\SettingMapper;
|
||||
use phpOMS\DataStorage\Database\DatabasePool;
|
||||
use phpOMS\Application\ApplicationAbstract;
|
||||
|
||||
/**
|
||||
* CMS class.
|
||||
|
|
@ -32,14 +32,14 @@ class CMS
|
|||
* Install media providing
|
||||
*
|
||||
* @param string $path Module path
|
||||
* @param DatabasePool $dbPool Database pool for database interaction
|
||||
* @param ApplicationAbstract $app Application
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public static function install(string $path, DatabasePool $dbPool) : void
|
||||
public static function install(string $path, ApplicationAbstract $app) : void
|
||||
{
|
||||
$app = \Modules\CMS\Admin\Installer::installExternal($dbPool, ['path' => __DIR__ . '/CMS.install.json']);
|
||||
$app = \Modules\CMS\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/CMS.install.json']);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace Modules\Shop\Admin\Install;
|
||||
|
||||
use phpOMS\DataStorage\Database\DatabasePool;
|
||||
use phpOMS\Application\ApplicationAbstract;
|
||||
|
||||
/**
|
||||
* Navigation class.
|
||||
|
|
@ -30,14 +30,14 @@ class Navigation
|
|||
* Install navigation providing
|
||||
*
|
||||
* @param string $path Module path
|
||||
* @param DatabasePool $dbPool Database pool for database interaction
|
||||
* @param ApplicationAbstract $app Application
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public static function install(string $path, DatabasePool $dbPool) : void
|
||||
public static function install(string $path, ApplicationAbstract $app) : void
|
||||
{
|
||||
\Modules\Navigation\Admin\Installer::installExternal($dbPool, ['path' => __DIR__ . '/Navigation.install.json']);
|
||||
\Modules\Navigation\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/Navigation.install.json']);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,9 +39,6 @@ final class Installer extends InstallerAbstract
|
|||
Directory::delete(__DIR__ . '/../../../Web/Shop');
|
||||
}
|
||||
|
||||
// @todo: replace with app installation (see TimeRecording...)
|
||||
Directory::copy(__DIR__ . '/Install/Shop', __DIR__ . '/../../../Web/Shop');
|
||||
|
||||
parent::install($dbPool, $info, $cfgHandler);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user