diff --git a/Engine/Auth/.meta/.phpstorm.meta.php b/Engine/Auth/.meta/.phpstorm.meta.php
index 69d4186..acdc239 100644
--- a/Engine/Auth/.meta/.phpstorm.meta.php
+++ b/Engine/Auth/.meta/.phpstorm.meta.php
@@ -3,7 +3,7 @@
namespace PHPSTORM_META {
if (function_exists('override')) {
- override(\Oforge\Engine\Core\Manager\Services\ServiceManager::get(0), map([
+ override(\Oforge\Engine\Core\Managers\Services\ServiceManager::get(0), map([
'auth' => \Oforge\Engine\Auth\Services\AuthService::class,
'backend.login' => \Oforge\Engine\Auth\Services\BackendLoginService::class,
'password' => \Oforge\Engine\Auth\Services\PasswordService::class,
diff --git a/Engine/Auth/Controller/SecureController.php b/Engine/Auth/Controllers/SecureController.php
similarity index 93%
rename from Engine/Auth/Controller/SecureController.php
rename to Engine/Auth/Controllers/SecureController.php
index 9f0f48d..6132fee 100644
--- a/Engine/Auth/Controller/SecureController.php
+++ b/Engine/Auth/Controllers/SecureController.php
@@ -1,6 +1,6 @@
'Engine',
+ 'name' => 'Cache',
+ 'version' => '20201009',
+ 'updateUrl' => '',
+];
diff --git a/Engine/Cache/Helper/Cache.php b/Engine/Cache/Managers/CacheManager.php
similarity index 77%
rename from Engine/Cache/Helper/Cache.php
rename to Engine/Cache/Managers/CacheManager.php
index af7e170..c22339d 100644
--- a/Engine/Cache/Helper/Cache.php
+++ b/Engine/Cache/Managers/CacheManager.php
@@ -1,11 +1,16 @@
\Oforge\Engine\Console\Services\ConsoleService::class,
]));
}
diff --git a/Engine/Core/.meta/.phpstorm.meta.php b/Engine/Core/.meta/.phpstorm.meta.php
index 3946af5..dddd5d8 100644
--- a/Engine/Core/.meta/.phpstorm.meta.php
+++ b/Engine/Core/.meta/.phpstorm.meta.php
@@ -3,18 +3,18 @@
namespace PHPSTORM_META {
if (function_exists('override')) {
- override(\Oforge\Engine\Core\Manager\Services\ServiceManager::get(0), map([
- 'config' => \Oforge\Engine\Core\Services\ConfigService::class,
- 'encryption' => \Oforge\Engine\Core\Services\EncryptionService::class,
- 'endpoint' => \Oforge\Engine\Core\Services\EndpointService::class,
- 'middleware' => \Oforge\Engine\Core\Services\MiddlewareService::class,
- 'ping' => \Oforge\Engine\Core\Services\PingService::class,
- 'plugin.access' => \Oforge\Engine\Core\Services\PluginAccessService::class,
- 'plugin.state' => \Oforge\Engine\Core\Services\PluginStateService::class,
- 'redirect' => \Oforge\Engine\Core\Services\RedirectService::class,
- 'session.management' => \Oforge\Engine\Core\Services\Session\SessionManagementService::class,
- 'store.keyvalue' => \Oforge\Engine\Core\Services\KeyValueStoreService::class,
- 'token' => \Oforge\Engine\Core\Services\TokenService::class,
+ override(\Oforge\Engine\Core\Managers\Services\ServiceManager::get(0), map([
+ 'config' => \Oforge\Engine\Core\Services\ConfigService::class,
+ 'encryption' => \Oforge\Engine\Core\Services\EncryptionService::class,
+ 'endpoint' => \Oforge\Engine\Core\Services\EndpointService::class,
+ 'middleware' => \Oforge\Engine\Core\Services\MiddlewareService::class,
+ 'ping' => \Oforge\Engine\Core\Services\PingService::class,
+ 'plugin.access' => \Oforge\Engine\Core\Services\PluginAccessService::class,
+ 'plugin.state' => \Oforge\Engine\Core\Services\PluginStateService::class,
+ 'redirect' => \Oforge\Engine\Core\Services\RedirectService::class,
+ 'session' => \Oforge\Engine\Core\Services\Session\SessionService::class,
+ 'store.keyvalue' => \Oforge\Engine\Core\Services\KeyValueStoreService::class,
+ 'token' => \Oforge\Engine\Core\Services\TokenService::class,
]));
registerArgumentsSet('oforge_flash_message_types', 'success', 'error', 'warning', 'info');
diff --git a/Engine/Core/Annotation/Cache/Cache.php b/Engine/Core/Annotations/Cache/Cache.php
similarity index 76%
rename from Engine/Core/Annotation/Cache/Cache.php
rename to Engine/Core/Annotations/Cache/Cache.php
index aee9664..3561960 100644
--- a/Engine/Core/Annotation/Cache/Cache.php
+++ b/Engine/Core/Annotations/Cache/Cache.php
@@ -1,29 +1,20 @@
slot = $config['slot'] ?? 'default';
+ $this->slot = $config['slot'] ?? 'default';
}
/**
diff --git a/Engine/Core/Annotation/Endpoint/AssetBundlesMode.php b/Engine/Core/Annotations/Endpoint/AssetBundleMode.php
similarity index 54%
rename from Engine/Core/Annotation/Endpoint/AssetBundlesMode.php
rename to Engine/Core/Annotations/Endpoint/AssetBundleMode.php
index 3fcd45b..eabf1bd 100644
--- a/Engine/Core/Annotation/Endpoint/AssetBundlesMode.php
+++ b/Engine/Core/Annotations/Endpoint/AssetBundleMode.php
@@ -1,13 +1,13 @@
assetBundles = $config['assetBundles'] ?? null;
- $this->assetBundlesMode = $config['assetBundlesMode'] ?? null;
+ $this->assetBundles = $config['assetBundles'] ?? null;
+ $this->assetBundleMode = $config['AssetBundleMode'] ?? null;
$this->method = $config['method'] ?? EndpointMethod::ANY;
$this->name = $config['name'] ?? '';
@@ -100,8 +100,8 @@ public function getAssetBundles() {
/**
* @return string|null
*/
- public function getAssetBundlesMode() : ?string {
- return $this->assetBundlesMode;
+ public function getAssetBundleMode() : ?string {
+ return $this->assetBundleMode;
}
/**
diff --git a/Engine/Core/Annotation/Endpoint/EndpointClass.php b/Engine/Core/Annotations/Endpoint/EndpointClass.php
similarity index 83%
rename from Engine/Core/Annotation/Endpoint/EndpointClass.php
rename to Engine/Core/Annotations/Endpoint/EndpointClass.php
index f20af37..80f7090 100644
--- a/Engine/Core/Annotation/Endpoint/EndpointClass.php
+++ b/Engine/Core/Annotations/Endpoint/EndpointClass.php
@@ -1,6 +1,6 @@
assetBundles = $config['assetBundles'] ?? null;
- $this->assetBundlesMode = $config['assetBundlesMode'] ?? null;
+ $this->assetBundles = $config['assetBundles'] ?? null;
+ $this->assetBundleMode = $config['AssetBundleMode'] ?? null;
$this->name = $config['name'] ?? '';
$this->order = $config['order'] ?? null;
@@ -95,8 +95,8 @@ public function getAssetBundles() {
/**
* @return string|null
*/
- public function getAssetBundlesMode() : ?string {
- return $this->assetBundlesMode;
+ public function getAssetBundleMode() : ?string {
+ return $this->assetBundleMode;
}
/**
diff --git a/Engine/Core/BlackSmith.php b/Engine/Core/BlackSmith.php
index 43db959..956ad1d 100644
--- a/Engine/Core/BlackSmith.php
+++ b/Engine/Core/BlackSmith.php
@@ -7,14 +7,15 @@
use Oforge\Engine\Core\Forge\ForgeDatabase;
use Oforge\Engine\Core\Forge\ForgeSettings;
use Oforge\Engine\Core\Forge\ForgeSlimApp;
-use Oforge\Engine\Core\Manager\Bootstrap\BootstrapManager;
-use Oforge\Engine\Core\Manager\Cache\CacheManager;
-use Oforge\Engine\Core\Manager\Events\EventManager;
-use Oforge\Engine\Core\Manager\Logger\LoggerManager;
-use Oforge\Engine\Core\Manager\Modules\ModuleManager;
-use Oforge\Engine\Core\Manager\Plugins\PluginManager;
-use Oforge\Engine\Core\Manager\Services\ServiceManager;
-use Oforge\Engine\Core\Manager\Slim\SlimRouteManager;
+use Oforge\Engine\Core\Managers\Bootstrap\BootstrapManager;
+use Oforge\Engine\Core\Managers\Cache\CacheManager;
+use Oforge\Engine\Core\Managers\Events\EventManager;
+use Oforge\Engine\Core\Managers\Logger\LoggerManager;
+use Oforge\Engine\Core\Managers\Modules\ModuleManager;
+use Oforge\Engine\Core\Managers\Plugins\PluginManager;
+use Oforge\Engine\Core\Managers\Services\ServiceManager;
+use Oforge\Engine\Core\Managers\Slim\SlimRouteManager;
+use Oforge\Engine\Core\Services\Session\SessionService;
use Slim\Container;
use Slim\Exception\MethodNotAllowedException;
use Slim\Exception\NotFoundException;
@@ -32,23 +33,11 @@ class BlackSmith {
* @var BlackSmith
*/
protected static $instance = null;
- /**
- * BootstrapManager
- *
- * @var BootstrapManager $bootstrapManager
- */
+ /** @var BootstrapManager $bootstrapManager */
private $bootstrapManager = null;
- /**
- * Container
- *
- * @var Container $container
- */
+ /** @var Container $container Container */
private $container = null;
- /**
- * DataBase
- *
- * @var ForgeDatabase $db
- */
+ /** @var ForgeDatabase $db DataBase */
private $db = null;
/** @var EventManager $eventManager */
private $eventManager = null;
@@ -119,7 +108,7 @@ class BlackSmith {
*/
protected function __construct() {
Oforge($this);
- $this->viewManager = \Oforge\Engine\Core\Manager\View\DefaultViewManager::getInstance();
+ $this->viewManager = \Oforge\Engine\Core\Managers\View\DefaultViewManager::getInstance();
}
/**
@@ -297,10 +286,6 @@ public function forge($start = true, $test = false) {
$this->forgeSlimApp = ForgeSlimApp::getInstance();
$this->container = $this->App()->getContainer();
- if ($start) {
- $this->forgeSlimApp->sessionStart();
- }
-
// Init modules and plugins
$this->bootstrapManager = BootstrapManager::getInstance();
$this->bootstrapManager->init();
@@ -309,6 +294,12 @@ public function forge($start = true, $test = false) {
$this->moduleManager = ModuleManager::getInstance();
$this->moduleManager->init();
+ if ($start) {
+ /** @var SessionService $sessionService */
+ $sessionService = Oforge()->Services()->get('session');
+ $sessionService->start();
+ }
+
// Init and load plugins
$this->pluginManager = PluginManager::getInstance();
$this->pluginManager->init();
diff --git a/Engine/Core/Bootstrap.php b/Engine/Core/Bootstrap.php
index fc27649..97d20d6 100644
--- a/Engine/Core/Bootstrap.php
+++ b/Engine/Core/Bootstrap.php
@@ -5,9 +5,6 @@
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Oforge\Engine\Core\Abstracts\AbstractBootstrap;
-use Oforge\Engine\Core\Controller\Api\PingController;
-use Oforge\Engine\Core\Controller\Frontend\NotFoundController;
-use Oforge\Engine\Core\Controller\Frontend\ServerErrorController;
use Oforge\Engine\Core\Models\Config\Config;
use Oforge\Engine\Core\Models\Config\ConfigType;
use Oforge\Engine\Core\Models\Config\Value;
@@ -26,7 +23,7 @@
use Oforge\Engine\Core\Services\PluginAccessService;
use Oforge\Engine\Core\Services\PluginStateService;
use Oforge\Engine\Core\Services\RedirectService;
-use Oforge\Engine\Core\Services\Session\SessionManagementService;
+use Oforge\Engine\Core\Services\Session\SessionService;
use Oforge\Engine\Core\Services\TokenService;
/**
@@ -38,9 +35,9 @@ class Bootstrap extends AbstractBootstrap {
public function __construct() {
$this->endpoints = [
- PingController::class,
- NotFoundController::class,
- ServerErrorController::class,
+ Controllers\Api\PingController::class,
+ Controllers\Frontend\NotFoundController::class,
+ Controllers\Frontend\ServerErrorController::class,
];
$this->models = [
@@ -55,17 +52,17 @@ public function __construct() {
];
$this->services = [
- 'config' => ConfigService::class,
- 'encryption' => EncryptionService::class,
- 'endpoint' => EndpointService::class,
- 'middleware' => MiddlewareService::class,
- 'ping' => PingService::class,
- 'plugin.access' => PluginAccessService::class,
- 'plugin.state' => PluginStateService::class,
- 'redirect' => RedirectService::class,
- 'session.management' => SessionManagementService::class,
- 'store.keyvalue' => KeyValueStoreService::class,
- 'token' => TokenService::class,
+ 'config' => ConfigService::class,
+ 'encryption' => EncryptionService::class,
+ 'endpoint' => EndpointService::class,
+ 'middleware' => MiddlewareService::class,
+ 'ping' => PingService::class,
+ 'plugin.access' => PluginAccessService::class,
+ 'plugin.state' => PluginStateService::class,
+ 'redirect' => RedirectService::class,
+ 'session' => SessionService::class,
+ 'store.keyvalue' => KeyValueStoreService::class,
+ 'token' => TokenService::class,
];
$this->order = 0;
@@ -147,7 +144,7 @@ public function install() {
'name' => 'system_format_datetime',
'type' => ConfigType::STRING,
'group' => 'date_format',
- 'default' => 'd.m.Y H:i:s',
+ 'default' => 'Y-m-d H:i:s',
'label' => 'config_system_format_datetime',
'required' => true,
]);
@@ -155,7 +152,7 @@ public function install() {
'name' => 'system_format_date',
'type' => ConfigType::STRING,
'group' => 'date_format',
- 'default' => 'd.m.Y',
+ 'default' => 'Y-m-d',
'label' => 'config_system_format_date',
'required' => true,
]);
diff --git a/Engine/Core/Controller/Api/PingController.php b/Engine/Core/Controllers/Api/PingController.php
similarity index 53%
rename from Engine/Core/Controller/Api/PingController.php
rename to Engine/Core/Controllers/Api/PingController.php
index dfb65a7..d10b633 100644
--- a/Engine/Core/Controller/Api/PingController.php
+++ b/Engine/Core/Controllers/Api/PingController.php
@@ -1,18 +1,19 @@
'Ping']);
+ /** @var PingService $pingService */
+ $pingService = Oforge()->Services()->get('ping');
+
+ return ResponseHelper::json($response, ['message' => $pingService->me()]);
}
}
diff --git a/Engine/Core/Controller/Frontend/NotFoundController.php b/Engine/Core/Controllers/Frontend/NotFoundController.php
similarity index 70%
rename from Engine/Core/Controller/Frontend/NotFoundController.php
rename to Engine/Core/Controllers/Frontend/NotFoundController.php
index 09481e3..1cb9277 100644
--- a/Engine/Core/Controller/Frontend/NotFoundController.php
+++ b/Engine/Core/Controllers/Frontend/NotFoundController.php
@@ -1,17 +1,17 @@
settings = $settings;
@@ -104,17 +101,19 @@ public function init(array $settings) {
$this->configuration->setMetadataDriverImpl($annotationDriver);
// $this->configuration->setMetadataCacheImpl($filesystemCache);
$this->configuration->setQueryCacheImpl($filesystemCache);
- // proxy classes: true in dev | false in production
-
- if(!$isDevMode) {
+ if (!$isDevMode) {
$this->configuration->setAutoGenerateProxyClasses(false);
}
-
$this->configuration->setProxyDir(ROOT_PATH . Statics::DIR_CACHE_PROXY);
- $this->configuration->addCustomStringFunction('ST_Distance_Sphere', ST_Distance_Sphere::class);
- $this->configuration->addCustomStringFunction('POINT', POINT::class);
- $this->configuration->addCustomStringFunction('DATEDIFF', DateDiffFunction::class);
+ $customStringFunctions = [
+ 'DATEDIFF' => DateDiffFunction::class,
+ 'POINT' => Point::class,
+ 'ST_Distance_Sphere' => ST_Distance_Sphere::class,
+ ];
+ foreach ($customStringFunctions as $name => $className) {
+ $this->configuration->addCustomStringFunction($name, $className);
+ }
}
/**
@@ -200,7 +199,7 @@ private function loadLoadedModelSchemata() {
*
* @param string[] $schema
*/
- private function saveAddedModelSchemata($schema) {
+ private function saveAddedModelSchemata(array $schema) {
$content = implode("\n", $schema);
file_put_contents(self::PATH_CACHE_FILE, $content . "\n", FILE_APPEND);
}
diff --git a/Engine/Core/Forge/ForgeEntityManager.php b/Engine/Core/Forge/ForgeEntityManager.php
index 4599790..28ad7b1 100644
--- a/Engine/Core/Forge/ForgeEntityManager.php
+++ b/Engine/Core/Forge/ForgeEntityManager.php
@@ -2,7 +2,6 @@
namespace Oforge\Engine\Core\Forge;
-use Doctrine\Common\Persistence\Mapping\MappingException;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NativeQuery;
@@ -10,6 +9,7 @@
use Doctrine\ORM\ORMException;
use Doctrine\ORM\Query\ResultSetMapping;
use Doctrine\ORM\QueryBuilder;
+use Doctrine\Persistence\Mapping\MappingException;
/**
* Class ForgeEntityManager
@@ -47,7 +47,7 @@ public function clear(?string $className = null) {
* @return ForgeEntityManager
* @throws ORMException
*/
- public function create($entity, $flush = true) : ForgeEntityManager {
+ public function create(object $entity, bool $flush = true) : ForgeEntityManager {
$this->entityManager->persist($entity);
if ($flush) {
$this->entityManager->flush($entity);
@@ -65,7 +65,7 @@ public function create($entity, $flush = true) : ForgeEntityManager {
* @return ForgeEntityManager
* @throws ORMException
*/
- public function update(&$entity, $flush = true) : ForgeEntityManager {
+ public function update(object &$entity, bool $flush = true) : ForgeEntityManager {
if (!$this->entityManager->contains($entity)) {
$entity = $this->entityManager->merge($entity);
}
@@ -83,7 +83,7 @@ public function update(&$entity, $flush = true) : ForgeEntityManager {
* @throws ORMException
* @throws OptimisticLockException
*/
- public function remove($entity, $flush = true) {
+ public function remove(object $entity, bool $flush = true) {
$this->entityManager->remove($entity);
if ($flush) {
$this->entityManager->flush($entity);
@@ -96,7 +96,7 @@ public function remove($entity, $flush = true) {
* @throws ORMException
* @throws OptimisticLockException
*/
- public function flush($entity = null) {
+ public function flush(?object $entity = null) {
$this->entityManager->flush($entity);
}
diff --git a/Engine/Core/Forge/ForgeSlimApp.php b/Engine/Core/Forge/ForgeSlimApp.php
index 7fcdcd5..275156f 100644
--- a/Engine/Core/Forge/ForgeSlimApp.php
+++ b/Engine/Core/Forge/ForgeSlimApp.php
@@ -36,18 +36,26 @@ public function __construct() {
$message = $exception->getMessage();
Oforge()->Logger()->get()->error($message, $exception->getTrace());
- echo $message, "
", $exception->getTraceAsString();
- die;
-
+ $trace = str_replace("\n", "
\n", $exception->getTraceAsString());
+ $file = $exception->getFile();
+ $line = $exception->getLine();
+ $html = <<Exception: $message
+
+ - File
- $file
+ - Line
- $line
+ - Trace
- $trace
+
+TAG;
if (Oforge()->Settings()->isDevelopmentMode()) {
- return $response->withStatus(500);
+ return $response->write($html)->withStatus(500);
} else {
- Oforge()->Logger()->get()->error($message, $exception->getTrace());
+ // TODO something to do???
+ return $response;
}
};
};
-
$container['errorHandler'] = $errorHandler;
$container['phpErrorHandler'] = $errorHandler;
@@ -56,9 +64,7 @@ public function __construct() {
};
}
- /**
- * @return ForgeSlimApp
- */
+ /** @return ForgeSlimApp */
public static function getInstance() : ForgeSlimApp {
if (!isset(self::$instance)) {
self::$instance = new ForgeSlimApp();
@@ -68,44 +74,15 @@ public static function getInstance() : ForgeSlimApp {
}
/**
- * Start the session
+ * @param bool $silent
*
- * @param int $lifetimeSeconds
- * @param string $path
- * @param null $domain
- * @param null $secure
+ * @return ResponseInterface
+ * @throws \Throwable
*/
- public function sessionStart($lifetimeSeconds = 0, $path = '/', $domain = null, $secure = null) {
- $sessionStatus = session_status();
-
- if ($sessionStatus != PHP_SESSION_ACTIVE) {
- session_name("oforge_session");
- if (!empty($_SESSION['deleted_time'])
- && $_SESSION['deleted_time'] < time() - 180) {
- session_destroy();
- }
- // Set the domain to default to the current domain.
- $domain = isset($domain) ? $domain : $_SERVER['SERVER_NAME'];
-
- // Set the default secure value to whether the site is being accessed with SSL
- $secure = isset($secure) ? $secure : isset($_SERVER['HTTPS']) ? true : false;
-
- // Set the cookie settings and start the session
- session_set_cookie_params($lifetimeSeconds, $path, $domain, $secure, true);
- session_start();
- $_SESSION['created_time'] = time();
- }
- }
-
public function run($silent = false) {
- /**
- * @var $response ResponseInterface
- */
+ /** @var ResponseInterface $response */
$response = $this->getContainer()->get('response');
-
- /**
- * @var $request ServerRequestInterface
- */
+ /** @var ServerRequestInterface $request */
$request = $this->getContainer()->get('request');
try {
@@ -119,6 +96,7 @@ public function run($silent = false) {
if (!$silent) {
$this->respond($response);
}
+
return $response;
}
@@ -134,7 +112,7 @@ private function createLog(array $data, string $keyPrefix = '') {
if (is_array($value)) {
$message .= $this->createLog($value, ltrim($keyPrefix . '.' . $key, '.'));
} else {
- $message .= (empty($keyPrefix) ? '' : ($keyPrefix . '.')) . $key . ' => ' . $value . "\n";;
+ $message .= ltrim($keyPrefix . '.' . $key, '.') . ' => ' . $value . "\n";;
}
}
diff --git a/Engine/Core/Annotation/ORM/Discriminator/DiscriminatorEntry.php b/Engine/Core/Forge/ORM/Annotations/Discriminator/DiscriminatorEntry.php
similarity index 86%
rename from Engine/Core/Annotation/ORM/Discriminator/DiscriminatorEntry.php
rename to Engine/Core/Forge/ORM/Annotations/Discriminator/DiscriminatorEntry.php
index 05a9244..e9925bd 100644
--- a/Engine/Core/Annotation/ORM/Discriminator/DiscriminatorEntry.php
+++ b/Engine/Core/Forge/ORM/Annotations/Discriminator/DiscriminatorEntry.php
@@ -1,6 +1,6 @@
getEventManager()->addEventSubscriber(new static());
}
@@ -47,9 +52,9 @@ public function getSubscribedEvents() : array {
/**
* @param LoadClassMetadataEventArgs $eventArgs
*
- * @throws \Doctrine\ORM\ORMException
- * @throws \ReflectionException
- * @throws \Doctrine\Common\Annotations\AnnotationException
+ * @throws ORMException
+ * @throws ReflectionException
+ * @throws AnnotationException
*/
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) {
$class = $eventArgs->getClassMetadata()->getName();
@@ -95,15 +100,15 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) {
* @param string $annotationName
*
* @return Annotation|null
- * @throws \Doctrine\Common\Annotations\AnnotationException
- * @throws \ReflectionException
+ * @throws ReflectionException
*/
protected function getAnnotationForCass(string $class, string $annotationName) {
- $reflectionClass = new \ReflectionClass($class);
+ $reflectionClass = new ReflectionClass($class);
if (isset($this->annotations[$reflectionClass->getName()][$annotationName])) {
return $this->annotations[$reflectionClass->getName()][$annotationName];
}
- $reader = new AnnotationReader();
+ $reader = new AnnotationReader();
+ /** @var Annotation|null $annotation */
$annotation = $reader->getClassAnnotation($reflectionClass, $annotationName);
if (isset($annotation)) {
$this->annotations[$reflectionClass->getName()][$annotationName] = $annotation;
@@ -116,10 +121,9 @@ protected function getAnnotationForCass(string $class, string $annotationName) {
* @param string $class
*
* @return bool
- * @throws \ReflectionException
- * @throws \Doctrine\Common\Annotations\AnnotationException
+ * @throws ReflectionException
*/
- protected function isDiscriminatorParent($class) {
+ protected function isDiscriminatorParent(string $class) {
if (!$this->getAnnotationForCass($class, self::ANNOTATION_PARENT)) {
return false;
}
@@ -142,11 +146,11 @@ protected function getDiscriminatorValue(string $class, ?DiscriminatorEntry $dis
* @param string $currentClass
*
* @return bool
- * @throws \ReflectionException
- * @throws \Doctrine\Common\Annotations\AnnotationException
+ * @throws ReflectionException
+ * @throws AnnotationException
*/
- private function isDiscriminatorChild($parentClass, $currentClass) {
- $reflectionClass = new \ReflectionClass($currentClass);
+ private function isDiscriminatorChild(string $parentClass, string $currentClass) {
+ $reflectionClass = new ReflectionClass($currentClass);
$parentReflectionClass = $reflectionClass->getParentClass();
if ($parentReflectionClass === false) {
return false;
diff --git a/Engine/Core/Forge/Doctrine/Point.php b/Engine/Core/Forge/ORM/CustomStringFunctions/Point.php
similarity index 71%
rename from Engine/Core/Forge/Doctrine/Point.php
rename to Engine/Core/Forge/ORM/CustomStringFunctions/Point.php
index cd115eb..41512eb 100644
--- a/Engine/Core/Forge/Doctrine/Point.php
+++ b/Engine/Core/Forge/ORM/CustomStringFunctions/Point.php
@@ -8,16 +8,42 @@
/* This file is auto-generated. Don't edit directly! */
-namespace Oforge\Engine\Core\Forge\Doctrine;
+namespace Oforge\Engine\Core\Forge\ORM\CustomStringFunctions;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\Parser;
+use Doctrine\ORM\Query\QueryException;
use Doctrine\ORM\Query\SqlWalker;
+/**
+ * Class Point
+ *
+ * @package Oforge\Engine\Core\Forge\ORM\CustomStringFunctions
+ */
class Point extends FunctionNode {
+ /** @var array $expressions */
protected $expressions = [];
+ /**
+ * @param SqlWalker $sqlWalker
+ *
+ * @return string
+ */
+ public function getSql(SqlWalker $sqlWalker) {
+ $arguments = [];
+ foreach ($this->expressions as $expression) {
+ $arguments[] = $expression->dispatch($sqlWalker);
+ }
+
+ return 'Point(' . implode(', ', $arguments) . ')';
+ }
+
+ /**
+ * @param Parser $parser
+ *
+ * @throws QueryException
+ */
public function parse(Parser $parser) {
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
@@ -27,12 +53,4 @@ public function parse(Parser $parser) {
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
- public function getSql(SqlWalker $sqlWalker) {
- $arguments = [];
- foreach ($this->expressions as $expression) {
- $arguments[] = $expression->dispatch($sqlWalker);
- }
-
- return 'Point(' . implode(', ', $arguments) . ')';
- }
}
diff --git a/Engine/Core/Forge/Doctrine/ST_Distance_Sphere.php b/Engine/Core/Forge/ORM/CustomStringFunctions/ST_Distance_Sphere.php
similarity index 61%
rename from Engine/Core/Forge/Doctrine/ST_Distance_Sphere.php
rename to Engine/Core/Forge/ORM/CustomStringFunctions/ST_Distance_Sphere.php
index 4808ae4..b9fd2c3 100644
--- a/Engine/Core/Forge/Doctrine/ST_Distance_Sphere.php
+++ b/Engine/Core/Forge/ORM/CustomStringFunctions/ST_Distance_Sphere.php
@@ -6,20 +6,45 @@
* Time: 09:13
*/
-
/* This file is auto-generated. Don't edit directly! */
-namespace Oforge\Engine\Core\Forge\Doctrine;
+
+namespace Oforge\Engine\Core\Forge\ORM\CustomStringFunctions;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\Parser;
+use Doctrine\ORM\Query\QueryException;
use Doctrine\ORM\Query\SqlWalker;
-class ST_Distance_Sphere extends FunctionNode
-{
+/**
+ * Class ST_Distance_Sphere
+ *
+ * @package Oforge\Engine\Core\Forge\ORM\CustomStringFunctions
+ */
+class ST_Distance_Sphere extends FunctionNode {
+ /** @var array $expressions */
protected $expressions = [];
- public function parse(Parser $parser)
- {
+
+ /**
+ * @param SqlWalker $sqlWalker
+ *
+ * @return string
+ */
+ public function getSql(SqlWalker $sqlWalker) {
+ $arguments = [];
+ foreach ($this->expressions as $expression) {
+ $arguments[] = $expression->dispatch($sqlWalker);
+ }
+
+ return 'ST_Distance_Sphere(' . implode(', ', $arguments) . ')';
+ }
+
+ /**
+ * @param Parser $parser
+ *
+ * @throws QueryException
+ */
+ public function parse(Parser $parser) {
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->expressions[] = $parser->ArithmeticFactor();
@@ -27,12 +52,5 @@ public function parse(Parser $parser)
$this->expressions[] = $parser->ArithmeticFactor();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
- public function getSql(SqlWalker $sqlWalker)
- {
- $arguments = [];
- foreach ($this->expressions as $expression) {
- $arguments[] = $expression->dispatch($sqlWalker);
- }
- return 'ST_Distance_Sphere(' . implode(', ', $arguments) . ')';
- }
+
}
diff --git a/Engine/Core/Helper/Cookie.php b/Engine/Core/Helper/CookieHelper.php
similarity index 53%
rename from Engine/Core/Helper/Cookie.php
rename to Engine/Core/Helper/CookieHelper.php
index e4dad98..d591b5f 100644
--- a/Engine/Core/Helper/Cookie.php
+++ b/Engine/Core/Helper/CookieHelper.php
@@ -8,16 +8,22 @@
namespace Oforge\Engine\Core\Helper;
+use DateTime;
+use DateTimeImmutable;
use Exception;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
/**
- * Class Cookie
+ * Class CookieHelper
*
* @package Oforge\Engine\Core\Helper
*/
-class Cookie {
+class CookieHelper {
+
+ /** Prevent instance. */
+ private function __construct() {
+ }
/**
* Delete the cookie by putting the expiration date in the past.
@@ -27,11 +33,11 @@ class Cookie {
*
* @return Response
*/
- public function deleteCookie(Response $response, string $cookieName) : Response {
- $cookie = urlencode($cookieName) . '=' . urlencode('deleted') . '; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; secure; httponly';
- $response = $response->withAddedHeader('Set-Cookie', $cookie);
+ public static function deleteCookie(Response $response, string $cookieName) : Response {
+ $cookie = urlencode($cookieName) . '=' . urlencode('deleted')#
+ . '; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; secure; httponly';
- return $response;
+ return $response->withAddedHeader('Set-Cookie', $cookie);
}
/**
@@ -45,16 +51,17 @@ public function deleteCookie(Response $response, string $cookieName) : Response
* @return Response
* @throws Exception If an error occurs while creating the expiration date (DateTimeImmutable).
*/
- public function addCookie(Response $response, string $cookieName, $cookieValue, int $expirationMinutes = 300) : Response {
+ public static function addCookie(Response $response, string $cookieName, $cookieValue, int $expirationMinutes = 300) : Response {
if ($expirationMinutes < 0) {
$expirationMinutes = 0;
}
- $expiry = new \DateTimeImmutable('now + ' . $expirationMinutes . 'minutes');
- $cookie = urlencode($cookieName) . '=' . urlencode($cookieValue) . '; expires=' . $expiry->format(\DateTime::COOKIE) . '; Max-Age='
- . $expirationMinutes * 60 . '; path=/; secure; httponly';
- $response = $response->withAddedHeader('Set-Cookie', $cookie);
+ $expiry = new DateTimeImmutable('now + ' . $expirationMinutes . 'minutes');
+ $cookie = urlencode($cookieName) . '=' . urlencode($cookieValue)#
+ . '; expires=' . $expiry->format(DateTime::COOKIE)#
+ . '; Max-Age=' . $expirationMinutes#
+ . '; path=/; secure; httponly';
- return $response;
+ return $response->withAddedHeader('Set-Cookie', $cookie);
}
/**
@@ -64,7 +71,7 @@ public function addCookie(Response $response, string $cookieName, $cookieValue,
*
* @return mixed|null
*/
- public function getCookieValue(Request $request, string $cookieName, $default = null) {
+ public static function getCookieValue(Request $request, string $cookieName, $default = null) {
$cookies = $request->getCookieParams();
return isset($cookies[$cookieName]) ? urldecode($cookies[$cookieName]) : $default;
diff --git a/Engine/Core/Helper/DateTimeFormatter.php b/Engine/Core/Helper/DateTimeFormatter.php
index 8a606b2..94e4166 100644
--- a/Engine/Core/Helper/DateTimeFormatter.php
+++ b/Engine/Core/Helper/DateTimeFormatter.php
@@ -2,6 +2,7 @@
namespace Oforge\Engine\Core\Helper;
+use DateTimeImmutable;
use DateTimeInterface;
use Exception;
use Oforge\Engine\Core\Services\ConfigService;
@@ -46,6 +47,58 @@ public static function time(?DateTimeInterface $dateTimeObject) : string {
return self::format($dateTimeObject, 'system_format_time', 'H:i:s');
}
+ /**
+ * @param string $input
+ *
+ * @return DateTimeImmutable|null
+ */
+ public static function parseDate(string $input) : ?DateTimeImmutable {
+ return self::parse($input, 'system_format_date', 'Y-m-d');
+ }
+
+ /**
+ * @param string $input
+ *
+ * @return DateTimeImmutable|null
+ */
+ public static function parseDatetime(string $input) : ?DateTimeImmutable {
+ return self::parse($input, 'system_format_datetime', 'Y-m-d H:i:s');
+ }
+
+ /**
+ * @param string $input
+ *
+ * @return DateTimeImmutable|null
+ */
+ public static function parseTime(string $input) : ?DateTimeImmutable {
+ return self::parse($input, 'system_format_time', 'H:i:s');
+ }
+
+ /**
+ * @param string|null $input
+ * @param string $configKey
+ * @param string $defaultFormat
+ *
+ * @return DateTimeImmutable|null
+ */
+ protected static function parse(?string $input, string $configKey, string $defaultFormat) : ?DateTimeImmutable {
+ if (empty($input)) {
+ return null;
+ }
+ try {
+ if (!isset(self::$configService)) {
+ self::$configService = Oforge()->Services()->get('config');
+ }
+ $format = self::$configService->get($configKey);
+
+ } catch (Exception $exception) {
+ $format = $defaultFormat;
+ }
+ $result = DateTimeImmutable::createFromFormat($format, $input);
+
+ return ($result === false ? null : $result);
+ }
+
/**
* Format DateTimeObjects.
*
diff --git a/Engine/Core/Manager/Bootstrap/BootstrapManager.php b/Engine/Core/Managers/Bootstrap/BootstrapManager.php
similarity index 98%
rename from Engine/Core/Manager/Bootstrap/BootstrapManager.php
rename to Engine/Core/Managers/Bootstrap/BootstrapManager.php
index e3aef70..52fad71 100644
--- a/Engine/Core/Manager/Bootstrap/BootstrapManager.php
+++ b/Engine/Core/Managers/Bootstrap/BootstrapManager.php
@@ -1,6 +1,6 @@
Services()->get('config');
- $debugMode = $configService->get('debug_mode');
- if ($debugMode) {
- $debugData = [];
- $debugConsole = $configService->get('debug_console');
- if ($debugConsole) {
- $debugData['console'] = true;
- }
- Oforge()->View()->assign(['debug' => $debugData]);
- }
-
- return $next($request, $response);
- }
-
-}
diff --git a/Engine/Core/Middlewares/DebugModeMiddleware.php b/Engine/Core/Middlewares/DebugModeMiddleware.php
new file mode 100644
index 0000000..34098ae
--- /dev/null
+++ b/Engine/Core/Middlewares/DebugModeMiddleware.php
@@ -0,0 +1,43 @@
+Services()->get('config');
+ $debugMode = $configService->get('debug_mode');
+ if ($debugMode) {
+ $debugData = [];
+ $debugConsole = $configService->get('debug_console');
+ if ($debugConsole) {
+ $debugData['console'] = true;
+ }
+ Oforge()->View()->assign(['debug' => $debugData]);
+ }
+
+ return $next($request, $response);
+ }
+
+}
diff --git a/Engine/Core/Middleware/SessionMiddleware.php b/Engine/Core/Middlewares/SessionMiddleware.php
similarity index 50%
rename from Engine/Core/Middleware/SessionMiddleware.php
rename to Engine/Core/Middlewares/SessionMiddleware.php
index d2f43f6..4fd132b 100644
--- a/Engine/Core/Middleware/SessionMiddleware.php
+++ b/Engine/Core/Middlewares/SessionMiddleware.php
@@ -1,42 +1,39 @@
Services()->get('session.management');
- $sessionManager->sessionStart();
+ public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next) {
+ /** @var SessionService $sessionService */
+ $sessionService = Oforge()->Services()->get('session');
+ $sessionService->start();
/** @var ConfigService $configService */
$configService = Oforge()->Services()->get('config');
- $debugMode = $configService->get('debug_mode');
-
- if ($debugMode) {
- /** for debugging purposes */
- $debugSession = $configService->get('debug_session');
- if ($debugSession) {
+ if ($configService->get('debug_mode')) {
+ // for debugging purposes
+ if ($configService->get('debug_session')) {
Oforge()->View()->assign(['debug.session' => $_SESSION]);
}
}
diff --git a/Engine/Core/Models/Endpoint/EndpointMethod.php b/Engine/Core/Models/Endpoint/EndpointMethod.php
index 18ca02c..0506814 100644
--- a/Engine/Core/Models/Endpoint/EndpointMethod.php
+++ b/Engine/Core/Models/Endpoint/EndpointMethod.php
@@ -5,7 +5,7 @@
/**
* Class EndpointMethod
*
- * @package Oforge\Engine\Core\Annotation\Endpoint
+ * @package Oforge\Engine\Core\Models\Endpoint
*/
class EndpointMethod {
public const ANY = 'any';
diff --git a/Engine/Core/Services/EndpointService.php b/Engine/Core/Services/EndpointService.php
index 5f584d4..c426052 100644
--- a/Engine/Core/Services/EndpointService.php
+++ b/Engine/Core/Services/EndpointService.php
@@ -9,9 +9,9 @@
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Oforge\Engine\Core\Abstracts\AbstractDatabaseAccess;
-use Oforge\Engine\Core\Annotation\Endpoint\AssetBundlesMode;
-use Oforge\Engine\Core\Annotation\Endpoint\EndpointAction;
-use Oforge\Engine\Core\Annotation\Endpoint\EndpointClass;
+use Oforge\Engine\Core\Annotations\Endpoint\AssetBundleMode;
+use Oforge\Engine\Core\Annotations\Endpoint\EndpointAction;
+use Oforge\Engine\Core\Annotations\Endpoint\EndpointClass;
use Oforge\Engine\Core\Helper\FileSystemHelper;
use Oforge\Engine\Core\Helper\Statics;
use Oforge\Engine\Core\Helper\StringHelper;
@@ -291,7 +291,7 @@ protected function buildEndpointConfig(
$order = null;
$httpMethod = EndpointMethod::ANY;
- $assetBundlesMode = $classAnnotation->getAssetBundlesMode();
+ $AssetBundleMode = $classAnnotation->getAssetBundleMode();
$classAssetBundles = $classAnnotation->getAssetBundles();
$methodAssetBundles = null;
@@ -306,7 +306,7 @@ protected function buildEndpointConfig(
if (isset($methodAnnotation)) {
$order = $methodAnnotation->getOrder();
$methodAssetBundles = $methodAnnotation->getAssetBundles();
- $assetBundlesMode = $methodAnnotation->getAssetBundlesMode() ?? $assetBundlesMode;
+ $AssetBundleMode = $methodAnnotation->getAssetBundleMode() ?? $AssetBundleMode;
if (EndpointMethod::isValid($methodAnnotation->getMethod())) {
$httpMethod = $methodAnnotation->getMethod();
}
@@ -326,8 +326,8 @@ protected function buildEndpointConfig(
$path = StringHelper::leading($path, '/');
$order = $order ?? $classAnnotation->getOrder() ?? Statics::DEFAULT_ORDER;
- $assetBundlesMode = $assetBundlesMode ?? AssetBundlesMode::OVERRIDE;
- $assetBundles = $this->prepareEndpointAssetBundles($assetBundlesMode, $classAssetBundles, $methodAssetBundles);
+ $AssetBundleMode = $AssetBundleMode ?? AssetBundleMode::OVERRIDE;
+ $assetBundles = $this->prepareEndpointAssetBundles($AssetBundleMode, $classAssetBundles, $methodAssetBundles);
return [
'name' => $name,
@@ -344,13 +344,13 @@ protected function buildEndpointConfig(
}
/**
- * @param string $assetBundlesMode
+ * @param string $AssetBundleMode
* @param string|string[]|null $classAssetBundles
* @param string|string[]|null $methodAssetBundles
*
* @return string[]
*/
- private function prepareEndpointAssetBundles(string $assetBundlesMode, $classAssetBundles, $methodAssetBundles) {
+ private function prepareEndpointAssetBundles(string $AssetBundleMode, $classAssetBundles, $methodAssetBundles) {
/**
* @param string|string[]|null $values
*
@@ -367,14 +367,14 @@ private function prepareEndpointAssetBundles(string $assetBundlesMode, $classAss
return $values;
};
- switch ($assetBundlesMode) {
- case AssetBundlesMode::MERGE:
+ switch ($AssetBundleMode) {
+ case AssetBundleMode::MERGE:
$assetBundles = array_unique(array_merge($convert($classAssetBundles), $convert($methodAssetBundles)));
break;
- case AssetBundlesMode::NONE:
+ case AssetBundleMode::NONE:
$assetBundles = [];
break;
- case AssetBundlesMode::OVERRIDE:
+ case AssetBundleMode::OVERRIDE:
default:
$assetBundles = $convert($methodAssetBundles);
if (empty($assetBundles)) {
diff --git a/Engine/Core/Services/PingService.php b/Engine/Core/Services/PingService.php
index 52d84ec..dfa01b1 100644
--- a/Engine/Core/Services/PingService.php
+++ b/Engine/Core/Services/PingService.php
@@ -16,7 +16,7 @@ class PingService {
*
* @return string
*/
- public function me($echo = false) {
+ public function me(bool $echo = false) {
$text = "Hail to the Oforge King! When you see this, everything looks good";
if ($echo) {
echo $text, "\n";
diff --git a/Engine/Core/Services/Session/SessionManagementService.php b/Engine/Core/Services/Session/SessionManagementService.php
deleted file mode 100644
index 4f6cf6e..0000000
--- a/Engine/Core/Services/Session/SessionManagementService.php
+++ /dev/null
@@ -1,71 +0,0 @@
-sessionDestroy();
- $this->sessionStart(0);
- $_SESSION = array_merge($_SESSION, $oldSessionData);
- $_SESSION['created_time'] = time();
- }
-
- /**
- * Destroy the session an the corresponding cookie
- */
- public function sessionDestroy() {
- $_SESSION = [];
- session_destroy();
- session_id(session_create_id());
- }
-}
diff --git a/Engine/Core/Services/Session/SessionService.php b/Engine/Core/Services/Session/SessionService.php
new file mode 100644
index 0000000..145e683
--- /dev/null
+++ b/Engine/Core/Services/Session/SessionService.php
@@ -0,0 +1,71 @@
+sessionDestroy();
+ $this->start(0);
+ $_SESSION = array_merge($_SESSION, $oldSessionData);
+
+ $_SESSION['session_created'] = time();
+ }
+
+ /**
+ * Destroy the session an the corresponding cookie
+ */
+ public function sessionDestroy() {
+ // $oldCookieParams = session_get_cookie_params();
+ // setcookie(session_name(), '', time() - 3600, $oldCookieParams['path'], $oldCookieParams['domain'], $oldCookieParams['secure'], isset($oldCookieParams['httponly']));
+ // TODO destroyen des alten cookies testen
+
+ $_SESSION = [];
+ session_destroy();
+ session_id(session_create_id());
+ }
+
+}
diff --git a/Engine/Core/Controller/Traits/TraitInitializer.php b/Engine/Core/Traits/Controller/TraitInitializer.php
similarity index 87%
rename from Engine/Core/Controller/Traits/TraitInitializer.php
rename to Engine/Core/Traits/Controller/TraitInitializer.php
index 0829669..b35b60c 100644
--- a/Engine/Core/Controller/Traits/TraitInitializer.php
+++ b/Engine/Core/Traits/Controller/TraitInitializer.php
@@ -1,11 +1,11 @@
\Oforge\Engine\Crud\Service\GenericCrudService::class,
+ override(\Oforge\Engine\Core\Managers\Services\ServiceManager::get(0), map([
+ 'crud' => \Oforge\Engine\Crud\Services\GenericCrudService::class,
]));
}
diff --git a/Engine/Crud/Bootstrap.php b/Engine/Crud/Bootstrap.php
index 418b6c3..77a6768 100644
--- a/Engine/Crud/Bootstrap.php
+++ b/Engine/Crud/Bootstrap.php
@@ -4,7 +4,7 @@
use Oforge\Engine\Core\Abstracts\AbstractBootstrap;
use Oforge\Engine\Core\Exceptions\LoggerAlreadyExistException;
-use Oforge\Engine\Crud\Service\GenericCrudService;
+use Oforge\Engine\Crud\Services\GenericCrudService;
/**
* Class Bootstrap
diff --git a/Engine/Crud/Enum/CrudDataAccessLevel.php b/Engine/Crud/Enums/CrudDataAccessLevel.php
similarity index 78%
rename from Engine/Crud/Enum/CrudDataAccessLevel.php
rename to Engine/Crud/Enums/CrudDataAccessLevel.php
index cf8be7d..fcb7e8a 100644
--- a/Engine/Crud/Enum/CrudDataAccessLevel.php
+++ b/Engine/Crud/Enums/CrudDataAccessLevel.php
@@ -1,11 +1,11 @@
'parseDate',
+ CrudDataType::DATETIME => 'parseDatetime',
+ CrudDataType::TIME => 'parseTime',
+ ];
+ $this->iterateModelProperties(function ($property, $propertyConfig) use (&$data, $map) {
+ if (ArrayHelper::dotExist($data, $property) && isset($map[$propertyConfig['type']])) {
+ $method = $map[$propertyConfig['type']];
+ $value = DateTimeFormatter::$method(ArrayHelper::dotGet($data, $property));
+ $data = ArrayHelper::dotSet($data, $property, $value);
+ }
+ });
+ }
+
+ /**
+ * @param array $data
+ */
+ protected function prepareOutputDataConvertDateTime2String(array &$data) {
+ $map = [
+ CrudDataType::DATE => 'date',
+ CrudDataType::DATETIME => 'datetime',
+ CrudDataType::TIME => 'time',
+ ];
+ $this->iterateModelProperties(function ($property, $propertyConfig) use (&$data, $map) {
+ if (ArrayHelper::dotExist($data, $property) && isset($map[$propertyConfig['type']])) {
+ $method = $map[$propertyConfig['type']];
+ $value = DateTimeFormatter::$method(ArrayHelper::dotGet($data, $property));
+ $data = ArrayHelper::dotSet($data, $property, $value);
+ }
+ });
+ }
+
+}
diff --git a/Engine/Crud/Controller/Traits/CrudBaseTrait.php b/Engine/Crud/Traits/Controller/CrudBaseTrait.php
similarity index 81%
rename from Engine/Crud/Controller/Traits/CrudBaseTrait.php
rename to Engine/Crud/Traits/Controller/CrudBaseTrait.php
index fd39769..756611f 100644
--- a/Engine/Crud/Controller/Traits/CrudBaseTrait.php
+++ b/Engine/Crud/Traits/Controller/CrudBaseTrait.php
@@ -1,18 +1,18 @@
filterArrayByModelPropertyMode($data, $this->strictWriteMode, $accessLevel, $context);
+ $data = $this->filterArrayByModelPropertyMode($data, $this->strictWriteMode, $accessLevel, $context);
+ if (method_exists($this, 'processInputDataConvertDateTimeFromString')) {
+ $this->processInputDataConvertDateTimeFromString($data);
+ }
+
+ return $data;
+ }
+
+ /**
+ * Prepare item data for output, e.G. DateTime to string or additional custom data.
+ *
+ * @param AbstractModel|null $entity
+ * @param string $context Crud action or custom contexts.
+ *
+ * @return array
+ * @throws Exception
+ */
+ protected function prepareOutputData(?AbstractModel $entity, string $context) : array {
+ $data = $entity === null ? [] : $entity->toArray();
+
+ $data = $this->filterArrayByModelPropertyMode($data, $this->strictReadMode, CrudDataAccessLevel::READ, $context);
+ if (method_exists($this, 'prepareOutputDataConvertDateTime2String')) {
+ $this->prepareOutputDataConvertDateTime2String($data);
+ }
+
+ return $data;
}
/**
@@ -130,31 +155,17 @@ protected function filterArrayByModelPropertyMode(array $array, bool $strictMode
if (ArrayHelper::get($propertyConfig, 'mode', CrudDataAccessLevel::OFF) < $accessLevel) {
continue;
}
- $value = ArrayHelper::dotGet($array, $property, null);
- if ($value !== null || ArrayHelper::dotGet($array, $property, false) !== false) {
- $result = ArrayHelper::dotSet($result, $property, $value);
+ if (!ArrayHelper::dotExist($array, $property)) {
+ continue;
}
+ $value = ArrayHelper::dotGet($array, $property, null);
+ $result = ArrayHelper::dotSet($result, $property, $value);
}
}
return $result;
}
- /**
- * Prepare Item data for view, e.G. DateTime to string or custom column data.
- *
- * @param AbstractModel|null $entity
- * @param string $context Crud action or custom contexts.
- *
- * @return array
- * @throws Exception
- */
- protected function prepareEntityDataArray(?AbstractModel $entity, string $context) : array {
- $data = $entity === null ? [] : $entity->toArray();
-
- return $this->filterArrayByModelPropertyMode($data, $this->strictReadMode, CrudDataAccessLevel::READ, $context);
- }
-
/**
* Adjustments of modelProperties config at runtime, e.g. for adding options by configs.
*
@@ -218,4 +229,16 @@ protected function replaceI18NConfig(array &$array, $keys) {
}
}
+ /**
+ * @param callable $callable With params $property, $propertyConfig
+ */
+ protected function iterateModelProperties(callable $callable) {
+ $modelProperties = $this->modelProperties;
+ if (empty(!$modelProperties)) {
+ foreach ($modelProperties as $property => $propertyConfig) {
+ $callable($property, $propertyConfig);
+ }
+ }
+ }
+
}
diff --git a/Engine/Crud/Controller/Traits/CrudBundleCrudActionsTrait.php b/Engine/Crud/Traits/Controller/CrudBundleCrudActionsTrait.php
similarity index 68%
rename from Engine/Crud/Controller/Traits/CrudBundleCrudActionsTrait.php
rename to Engine/Crud/Traits/Controller/CrudBundleCrudActionsTrait.php
index b499eab..ed3cb35 100644
--- a/Engine/Crud/Controller/Traits/CrudBundleCrudActionsTrait.php
+++ b/Engine/Crud/Traits/Controller/CrudBundleCrudActionsTrait.php
@@ -1,11 +1,11 @@
getParsedBody())) {
@@ -36,10 +36,10 @@ public function createAction(Request $request, Response $response) {
if (method_exists($this, 'handleFileUploads')) {
$this->handleFileUploads($data, $request, 'create');
}
- $data = $this->convertData($data, 'create');
+ $data = $this->processInputData($data, 'create');
$entity = $this->crudService->create($this->model, $data);
- return ResponseHelper::json($response, $this->prepareEntityDataArray($entity, 'create'))->withStatus(201);
+ return ResponseHelper::json($response, $this->prepareOutputData($entity, 'create'))->withStatus(201);
} catch (EntityAlreadyExistException | UniqueConstraintViolationException $exception) {
Oforge()->Logger()->logException($exception, 'crud', Logger::WARNING);
diff --git a/Engine/Crud/Controller/Traits/CrudDeleteActionTrait.php b/Engine/Crud/Traits/Controller/CrudDeleteActionTrait.php
similarity index 82%
rename from Engine/Crud/Controller/Traits/CrudDeleteActionTrait.php
rename to Engine/Crud/Traits/Controller/CrudDeleteActionTrait.php
index 68d9883..e393431 100644
--- a/Engine/Crud/Controller/Traits/CrudDeleteActionTrait.php
+++ b/Engine/Crud/Traits/Controller/CrudDeleteActionTrait.php
@@ -1,10 +1,10 @@
getQueryParams();
@@ -91,7 +91,7 @@ public function indexAction(Request $request, Response $response) {
}
foreach ($entities as $index => $entity) {
try {
- $entities[$index] = $this->prepareEntityDataArray($entity, 'index');
+ $entities[$index] = $this->prepareOutputData($entity, 'index');
} catch (Exception $exception) {
Oforge()->Logger()->logException($exception, 'crud');
}
diff --git a/Engine/Crud/Controller/Traits/CrudReadActionTrait.php b/Engine/Crud/Traits/Controller/CrudReadActionTrait.php
similarity index 80%
rename from Engine/Crud/Controller/Traits/CrudReadActionTrait.php
rename to Engine/Crud/Traits/Controller/CrudReadActionTrait.php
index 8b964d7..137f7f5 100644
--- a/Engine/Crud/Controller/Traits/CrudReadActionTrait.php
+++ b/Engine/Crud/Traits/Controller/CrudReadActionTrait.php
@@ -1,11 +1,11 @@
model, $args['id']);
}
- return ResponseHelper::json($response, $this->prepareEntityDataArray($entity, 'get'));
+ return ResponseHelper::json($response, $this->prepareOutputData($entity, 'get'));
} catch (EntityNotFoundException $exception) {
Oforge()->Logger()->logException($exception, 'crud', Logger::WARNING);
diff --git a/Engine/Crud/Controller/Traits/CrudUpdateActionTrait.php b/Engine/Crud/Traits/Controller/CrudUpdateActionTrait.php
similarity index 81%
rename from Engine/Crud/Controller/Traits/CrudUpdateActionTrait.php
rename to Engine/Crud/Traits/Controller/CrudUpdateActionTrait.php
index 7d396d8..a6d6e2d 100644
--- a/Engine/Crud/Controller/Traits/CrudUpdateActionTrait.php
+++ b/Engine/Crud/Traits/Controller/CrudUpdateActionTrait.php
@@ -1,10 +1,10 @@
getParsedBody())) {
@@ -33,10 +33,10 @@ public function updateAction(Request $request, Response $response, array $args)
if (method_exists($this, 'handleFileUploads')) {
$this->handleFileUploads($data, $request, 'update');
}
- $data = $this->convertData($data, 'update');
+ $data = $this->processInputData($data, 'update');
$entity = $this->crudService->update($this->model, $args['id'], $data);
- return ResponseHelper::json($response, $this->prepareEntityDataArray($entity, 'update'));
+ return ResponseHelper::json($response, $this->prepareOutputData($entity, 'update'));
} catch (EntityNotFoundException $exception) {
Oforge()->Logger()->logException($exception, 'crud', Logger::WARNING);
diff --git a/Engine/Crud/Controller/Traits/CrudValidateAndSanitizeTrait.php b/Engine/Crud/Traits/Controller/CrudValidateAndSanitizeTrait.php
similarity index 96%
rename from Engine/Crud/Controller/Traits/CrudValidateAndSanitizeTrait.php
rename to Engine/Crud/Traits/Controller/CrudValidateAndSanitizeTrait.php
index ca98b5e..2568e4a 100644
--- a/Engine/Crud/Controller/Traits/CrudValidateAndSanitizeTrait.php
+++ b/Engine/Crud/Traits/Controller/CrudValidateAndSanitizeTrait.php
@@ -1,15 +1,15 @@
\Oforge\Engine\File\Services\FileAccessService::class,
'file.management' => \Oforge\Engine\File\Services\FileManagementService::class,
'file.mimeType' => \Oforge\Engine\File\Services\AllowedFileMimeTypeService::class,
@@ -15,11 +15,11 @@
/**
* Events
*/
- override(\Oforge\Engine\Core\Manager\Events\Event::create(0), map([
+ override(\Oforge\Engine\Core\Managers\Events\Event::create(0), map([
\Oforge\Engine\File\Models\File::class . '::created' => '',
\Oforge\Engine\File\Models\File::class . '::removed' => '',
]));
- override(\Oforge\Engine\Core\Manager\Events\EventManager::attach(0), map([
+ override(\Oforge\Engine\Core\Managers\Events\EventManager::attach(0), map([
\Oforge\Engine\File\Models\File::class . '::created' => '',
\Oforge\Engine\File\Models\File::class . '::removed' => '',
]));
diff --git a/Engine/File/.meta/plugin.meta.php b/Engine/File/.meta/plugin.meta.php
new file mode 100644
index 0000000..ba141e1
--- /dev/null
+++ b/Engine/File/.meta/plugin.meta.php
@@ -0,0 +1,8 @@
+ 'Engine',
+ 'name' => 'File',
+ 'version' => '20201012',
+ 'updateUrl' => '',
+];
diff --git a/Engine/File/Bootstrap.php b/Engine/File/Bootstrap.php
index 7bf82f7..dcc77db 100644
--- a/Engine/File/Bootstrap.php
+++ b/Engine/File/Bootstrap.php
@@ -15,9 +15,9 @@ class Bootstrap extends AbstractBootstrap {
/** Bootstrap constructor. */
public function __construct() {
- // $this->endpoints = [
- // Controllers\Api\FileController::class,
- // ];
+ $this->endpoints = [
+ Controllers\Api\FileController::class,
+ ];
$this->services = [
'file.access' => Services\FileAccessService::class,
diff --git a/Engine/File/Controllers/Api/FileController.php b/Engine/File/Controllers/Api/FileController.php
index 2ea0b6d..5703074 100644
--- a/Engine/File/Controllers/Api/FileController.php
+++ b/Engine/File/Controllers/Api/FileController.php
@@ -3,18 +3,18 @@
namespace Oforge\Engine\File\Controllers\Api;
use Exception;
-use Oforge\Engine\Core\Annotation\Endpoint\AssetBundlesMode;
-use Oforge\Engine\Core\Annotation\Endpoint\EndpointAction;
-use Oforge\Engine\Core\Annotation\Endpoint\EndpointClass;
-use Oforge\Engine\Core\Controller\Traits\TraitInitializer;
+use Oforge\Engine\Core\Annotations\Endpoint\AssetBundleMode;
+use Oforge\Engine\Core\Annotations\Endpoint\EndpointAction;
+use Oforge\Engine\Core\Annotations\Endpoint\EndpointClass;
+use Oforge\Engine\Core\Traits\Controller\TraitInitializer;
use Oforge\Engine\Core\Exceptions\ServiceNotFoundException;
use Oforge\Engine\Core\Helper\ArrayHelper;
use Oforge\Engine\Core\Helper\ResponseHelper;
use Oforge\Engine\Core\Models\Endpoint\EndpointMethod;
-use Oforge\Engine\Crud\Controller\Traits\CrudBaseTrait;
-use Oforge\Engine\Crud\Controller\Traits\CrudBundleReadActionsTrait;
-use Oforge\Engine\Crud\Enum\CrudDataAccessLevel;
-use Oforge\Engine\Crud\Enum\CrudDataType;
+use Oforge\Engine\Crud\Traits\Controller\CrudBaseTrait;
+use Oforge\Engine\Crud\Traits\Controller\CrudBundleReadActionsTrait;
+use Oforge\Engine\Crud\Enums\CrudDataAccessLevel;
+use Oforge\Engine\Crud\Enums\CrudDataType;
use Oforge\Engine\File\Exceptions\FileEntryNotFoundException;
use Oforge\Engine\File\Exceptions\FileInUsageException;
use Oforge\Engine\File\Models\File;
@@ -26,14 +26,14 @@
* Class FileController
*
* @package Oforge\Engine\File\Controllers\Api
- * @EndpointClass(path="/api/file", name="api_file", assetBundles=null, assetBundlesMode=AssetBundlesMode::NONE)
+ * @EndpointClass(path="/api/file", name="api_file", assetBundles=null, AssetBundleMode=AssetBundleMode::NONE)
*/
class FileController {
use TraitInitializer, CrudBaseTrait, CrudBundleReadActionsTrait;
/** FileController constructor. */
public function __construct() {
- [AssetBundlesMode::class, EndpointAction::class, EndpointMethod::class];// Required for imports in nested traits
+ [AssetBundleMode::class, EndpointAction::class, EndpointMethod::class];// Required for imports in nested traits
$this->model = File::class;
@@ -83,7 +83,7 @@ public function __construct() {
* @param Response $response
*
* @return Response
- * @EndpointAction(path="[/]", method=EndpointMethod::POST, assetBundles="", assetBundlesMode=AssetBundlesMode::NONE)
+ * @EndpointAction(path="[/]", method=EndpointMethod::POST, assetBundles="", AssetBundleMode=AssetBundleMode::NONE)
*/
public function uploadAction(Request $request, Response $response) {
/** @var FileManagementService $fileManagementService */
@@ -111,7 +111,7 @@ public function uploadAction(Request $request, Response $response) {
foreach ($uploadedFiles as $uploadedFile) {
try {
$file = $fileManagementService->importUploadedFile($uploadedFile, $options);
- $result[] = $this->prepareEntityDataArray($file, 'create');
+ $result[] = $this->prepareOutputData($file, 'create');
} catch (Exception $exception) {
$result[] = ['error' => $exception->getMessage()];
}
@@ -127,7 +127,7 @@ public function uploadAction(Request $request, Response $response) {
* @param array $args
*
* @return Response
- * @EndpointAction(path="/{id}", method=EndpointMethod::DELETE, assetBundles="", assetBundlesMode=AssetBundlesMode::NONE)
+ * @EndpointAction(path="/{id}", method=EndpointMethod::DELETE, assetBundles="", AssetBundleMode=AssetBundleMode::NONE)
*/
public function deleteAction(Request $request, Response $response, array $args) {
try {
diff --git a/Engine/File/Services/AllowedFileMimeTypeService.php b/Engine/File/Services/AllowedFileMimeTypeService.php
index 9f36362..b9dbf33 100644
--- a/Engine/File/Services/AllowedFileMimeTypeService.php
+++ b/Engine/File/Services/AllowedFileMimeTypeService.php
@@ -5,7 +5,7 @@
use Doctrine\ORM\ORMException;
use Exception;
use InvalidArgumentException;
-use Oforge\Engine\Cache\Helper\Cache;
+use Oforge\Engine\Cache\Managers\CacheManager;
use Oforge\Engine\Cache\Lib\ArrayCache;
use Oforge\Engine\Core\Abstracts\AbstractDatabaseAccess;
use Oforge\Engine\Core\Exceptions\ConfigOptionKeyNotExistException;
@@ -26,7 +26,7 @@ class AllowedFileMimeTypeService extends AbstractDatabaseAccess {
/** AllowedFileMimeTypeService constructor. */
public function __construct() {
parent::__construct(FileMimeType::class);
- $this->cache = Cache::initArrayCache();
+ $this->cache = CacheManager::initArrayCache();
}
/**
diff --git a/Engine/File/Services/FileAccessService.php b/Engine/File/Services/FileAccessService.php
index 8e96ef9..85ab5c3 100644
--- a/Engine/File/Services/FileAccessService.php
+++ b/Engine/File/Services/FileAccessService.php
@@ -3,7 +3,7 @@
namespace Oforge\Engine\File\Services;
use Oforge\Engine\Core\Abstracts\AbstractDatabaseAccess;
-use Oforge\Engine\Crud\Service\GenericCrudService;
+use Oforge\Engine\Crud\Services\GenericCrudService;
use Oforge\Engine\File\Models\File;
/**
diff --git a/Engine/File/Services/FileManagementService.php b/Engine/File/Services/FileManagementService.php
index 61a5d24..57743e3 100644
--- a/Engine/File/Services/FileManagementService.php
+++ b/Engine/File/Services/FileManagementService.php
@@ -10,7 +10,7 @@
use Oforge\Engine\Core\Helper\FileSystemHelper;
use Oforge\Engine\Core\Helper\Statics;
use Oforge\Engine\Core\Helper\StringHelper;
-use Oforge\Engine\Core\Manager\Events\Event;
+use Oforge\Engine\Core\Managers\Events\Event;
use Oforge\Engine\File\Enums\FileTypeGroup;
use Oforge\Engine\File\Exceptions\FileEntryNotFoundException;
use Oforge\Engine\File\Exceptions\FileImportException;
diff --git a/Engine/Image/.meta/.phpstorm.meta.php b/Engine/Image/.meta/.phpstorm.meta.php
index 246e0d0..32629df 100644
--- a/Engine/Image/.meta/.phpstorm.meta.php
+++ b/Engine/Image/.meta/.phpstorm.meta.php
@@ -3,7 +3,7 @@
namespace PHPSTORM_META {
if (function_exists('override')) {
- override(\Oforge\Engine\Core\Manager\Services\ServiceManager::get(0), map([
+ override(\Oforge\Engine\Core\Managers\Services\ServiceManager::get(0), map([
'image' => \Oforge\Engine\Image\Services\ImageService::class,
'image.cleanup' => \Oforge\Engine\Image\Services\ImageCleanupService::class,
]));
diff --git a/Engine/Image/.meta/plugin.meta.php b/Engine/Image/.meta/plugin.meta.php
new file mode 100644
index 0000000..35494e4
--- /dev/null
+++ b/Engine/Image/.meta/plugin.meta.php
@@ -0,0 +1,8 @@
+ 'Engine',
+ 'name' => 'Image',
+ 'version' => '20201015',
+ 'updateUrl' => '',
+];
diff --git a/Engine/Image/Services/ImageCleanupService.php b/Engine/Image/Services/ImageCleanupService.php
index 914f7d3..c1b49b5 100644
--- a/Engine/Image/Services/ImageCleanupService.php
+++ b/Engine/Image/Services/ImageCleanupService.php
@@ -3,7 +3,7 @@
namespace Oforge\Engine\Image\Services;
use Oforge\Engine\Core\Helper\Statics;
-use Oforge\Engine\Core\Manager\Events\Event;
+use Oforge\Engine\Core\Managers\Events\Event;
use Oforge\Engine\File\Enums\FileTypeGroup;
use Oforge\Engine\File\Exceptions\FileEntryNotFoundException;
use Oforge\Engine\File\Models\File;
diff --git a/Engine/Image/Services/ImageService.php b/Engine/Image/Services/ImageService.php
index 3f94a8d..9c3fb32 100644
--- a/Engine/Image/Services/ImageService.php
+++ b/Engine/Image/Services/ImageService.php
@@ -5,7 +5,7 @@
use Exception;
use Oforge\Engine\Core\Exceptions\InvalidClassException;
use Oforge\Engine\Core\Helper\FileHelper;
-use Oforge\Engine\Core\Manager\Events\Event;
+use Oforge\Engine\Core\Managers\Events\Event;
use Oforge\Engine\Core\Services\ConfigService;
use Oforge\Engine\File\Enums\FileTypeGroup;
use Oforge\Engine\File\Enums\MimeType;
diff --git a/Modules/CoreApi/Bootstrap.php b/Modules/CoreApi/Bootstrap.php
index c6b791d..ffbeb76 100644
--- a/Modules/CoreApi/Bootstrap.php
+++ b/Modules/CoreApi/Bootstrap.php
@@ -16,7 +16,7 @@ class Bootstrap extends AbstractBootstrap {
*/
public function __construct() {
$this->endpoints = [
- Controller\Api\KeyValueController::class,
+ Controllers\Api\KeyValueController::class,
];
}
diff --git a/Modules/CoreApi/Controller/Api/KeyValueController.php b/Modules/CoreApi/Controllers/Api/KeyValueController.php
similarity index 57%
rename from Modules/CoreApi/Controller/Api/KeyValueController.php
rename to Modules/CoreApi/Controllers/Api/KeyValueController.php
index 375b73f..5daa94a 100644
--- a/Modules/CoreApi/Controller/Api/KeyValueController.php
+++ b/Modules/CoreApi/Controllers/Api/KeyValueController.php
@@ -1,30 +1,30 @@
model = KeyValue::class;
diff --git a/doc/development/backend_crud_model.md b/doc/development/backend_crud_model.md
index 86ea995..c431f26 100644
--- a/doc/development/backend_crud_model.md
+++ b/doc/development/backend_crud_model.md
@@ -4,7 +4,7 @@
The model **muss contains id property**.
## ViewController
-Create a ViewController class that inherits from **Oforge\Engine\Modules\CRUD\Controller\Backend\BaseCrudController** and register it in Bootstrap.
+Create a ViewController class that inherits from **Oforge\Engine\CRUD\Controller\Backend\BaseCrudController** and register it in Bootstrap.
Now the properties **model** and **modelProperties** of the class have to be overwritten: