diff --git a/Admin/Activate.php b/Admin/Activate.php new file mode 100644 index 0000000..465295f --- /dev/null +++ b/Admin/Activate.php @@ -0,0 +1,44 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Marketing\Admin; + + +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\Module\ActivateAbstract; +use phpOMS\Module\InfoManager; + +/** + * Navigation class. + * + * @category Modules + * @package Modules\Admin + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class Activate extends ActivateAbstract +{ + + /** + * {@inheritdoc} + */ + public static function activate(DatabasePool $dbPool, InfoManager $info) + { + parent::activate($dbPool, $info); + } +} diff --git a/Admin/Deactivate.php b/Admin/Deactivate.php new file mode 100644 index 0000000..3ebcd89 --- /dev/null +++ b/Admin/Deactivate.php @@ -0,0 +1,44 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Marketing\Admin; + + +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\Module\DeactivateAbstract; +use phpOMS\Module\InfoManager; + +/** + * Navigation class. + * + * @category Modules + * @package Modules\Admin + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class Deactivate extends DeactivateAbstract +{ + + /** + * {@inheritdoc} + */ + public static function deactivate(DatabasePool $dbPool, InfoManager $info) + { + parent::deactivate($dbPool, $info); + } +} diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json new file mode 100644 index 0000000..9d870f0 --- /dev/null +++ b/Admin/Install/Navigation.install.json @@ -0,0 +1,110 @@ +[ + { + "id": 1001901001, + "pid": "754a08ddf8bcb1cf22f310f09206dd783d42f7dd", + "type": 2, + "subtype": 0, + "name": "Marketing", + "uri": "/{/lang}/backend/marketing/dashboard?{?}", + "target": "self", + "icon": "fa fa-paint-brush", + "order": 60, + "from": 1001900000, + "permission": null, + "parent": 1000201001, + "children": [ + { + "id": 1001902001, + "pid": "754a08ddf8bcb1cf22f310f09206dd783d42f7dd", + "type": 2, + "subtype": 1, + "name": "Promotions", + "uri": "/{/lang}/backend/marketing/promotion/list?{?}", + "target": "self", + "icon": null, + "order": 1, + "from": 1001900000, + "permission": null, + "parent": 1001901001, + "children": [ + { + "id": 1001902101, + "pid": "5c1412dc489ced2edd20a6883bf5a394011f5235", + "type": 3, + "subtype": 1, + "name": "List", + "uri": "/{/lang}/backend/marketing/promotion/list?{?}", + "target": "self", + "icon": null, + "order": 1, + "from": 1001900000, + "permission": null, + "parent": 1001902001, + "children": [] + }, + { + "id": 1001902201, + "pid": "5c1412dc489ced2edd20a6883bf5a394011f5235", + "type": 3, + "subtype": 1, + "name": "Create", + "uri": "/{/lang}/backend/marketing/promotion/create?{?}", + "target": "self", + "icon": null, + "order": 5, + "from": 1001900000, + "permission": null, + "parent": 1001902001, + "children": [] + } + ] + }, + { + "id": 1001903001, + "pid": "754a08ddf8bcb1cf22f310f09206dd783d42f7dd", + "type": 2, + "subtype": 1, + "name": "Events", + "uri": "/{/lang}/backend/marketing/event/list?{?}", + "target": "self", + "icon": null, + "order": 5, + "from": 1001900000, + "permission": null, + "parent": 1001901001, + "children": [ + { + "id": 1001903101, + "pid": "083a414f7b324d073baab24daeab1a7d99d2bb8f", + "type": 3, + "subtype": 1, + "name": "List", + "uri": "/{/lang}/backend/marketing/event/list?{?}", + "target": "self", + "icon": null, + "order": 1, + "from": 1001900000, + "permission": null, + "parent": 1001903001, + "children": [] + }, + { + "id": 1001903201, + "pid": "083a414f7b324d073baab24daeab1a7d99d2bb8f", + "type": 3, + "subtype": 1, + "name": "Create", + "uri": "/{/lang}/backend/marketing/event/create?{?}", + "target": "self", + "icon": null, + "order": 5, + "from": 1001900000, + "permission": null, + "parent": 1001903001, + "children": [] + } + ] + } + ] + } +] diff --git a/Admin/Install/Navigation.php b/Admin/Install/Navigation.php new file mode 100644 index 0000000..eb6749a --- /dev/null +++ b/Admin/Install/Navigation.php @@ -0,0 +1,40 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Marketing\Admin\Install; +use phpOMS\DataStorage\Database\DatabasePool; + +/** + * Navigation class. + * + * @category Modules + * @package Modules\Admin + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class Navigation +{ + public static function install(string $path, DatabasePool $dbPool) + { + $navData = json_decode(file_get_contents(__DIR__ . '/Navigation.install.json'), true); + + $class = '\\Modules\\Navigation\\Admin\\Installer'; + /** @var $class \Modules\Navigation\Admin\Installer */ + $class::installExternal($dbPool, $navData); + } +} diff --git a/Admin/Installer.php b/Admin/Installer.php new file mode 100644 index 0000000..c19cb82 --- /dev/null +++ b/Admin/Installer.php @@ -0,0 +1,60 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Marketing\Admin; + +use phpOMS\DataStorage\Database\DatabaseType; +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\Module\InfoManager; +use phpOMS\Module\InstallerAbstract; + +/** + * Marketing install class. + * + * @category Modules + * @package Modules\Marketing + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class Installer extends InstallerAbstract +{ + + /** + * {@inheritdoc} + */ + public static function install(string $path, DatabasePool $dbPool, InfoManager $info) + { + parent::install($path, $dbPool, $info); + + switch ($dbPool->get('core')->getType()) { + case DatabaseType::MYSQL: + $dbPool->get('core')->con->prepare( + 'CREATE TABLE if NOT EXISTS `' . $dbPool->get('core')->prefix . 'marketing_promotion` ( + `marketing_promotion_id` int(11) NOT NULL AUTO_INCREMENT, + `marketing_promotion_name` varchar(30) NOT NULL, + `marketing_promotion_description` text DEFAULT NULL, + `marketing_promotion_start` datetime DEFAULT NULL, + `marketing_promotion_end` datetime DEFAULT NULL, + `marketing_promotion_type` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`marketing_promotion_id`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8;' + )->execute(); + break; + } + } +} diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php new file mode 100644 index 0000000..de21568 --- /dev/null +++ b/Admin/Routes/Web/Backend.php @@ -0,0 +1,30 @@ + [ + [ + 'dest' => '\Modules\Marketing\Controller:viewMarketingPromotionList', + 'verb' => RouteVerb::GET, + ], + ], + '^.*/backend/marketing/promotion/create.*$' => [ + [ + 'dest' => '\Modules\Marketing\Controller:viewMarketingPromotionCreate', + 'verb' => RouteVerb::GET, + ], + ], + '^.*/backend/marketing/event/list.*$' => [ + [ + 'dest' => '\Modules\Marketing\Controller:viewMarketingEventList', + 'verb' => RouteVerb::GET, + ], + ], + '^.*/backend/marketing/event/create.*$' => [ + [ + 'dest' => '\Modules\Marketing\Controller:viewMarketingEventCreate', + 'verb' => RouteVerb::GET, + ], + ], +]; diff --git a/Admin/Routes/console.php b/Admin/Routes/console.php new file mode 100644 index 0000000..1ecbfac --- /dev/null +++ b/Admin/Routes/console.php @@ -0,0 +1,3 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Marketing\Admin; + + +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\DataStorage\Database\Schema\Builder; +use phpOMS\Module\UninstallAbstract; + +/** + * Navigation class. + * + * @category Modules + * @package Modules\Admin + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class Uninstall extends UninstallAbstract +{ + + /** + * {@inheritdoc} + */ + public static function uninstall(DatabasePool $dbPool, InfoManager $info) + { + parent::uninstall($dbPool, $info); + + $query = new Builder($dbPool->get()); + + $query->prefix($dbPool->get('core')->getPrefix())->drop( + 'marketing_promotion' + ); + + $dbPool->get()->con->prepare($query->toSql())->execute(); + } +} diff --git a/Admin/Update.php b/Admin/Update.php new file mode 100644 index 0000000..8d29407 --- /dev/null +++ b/Admin/Update.php @@ -0,0 +1,46 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Marketing\Admin; + + +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\Module\UpdateAbstract; +use phpOMS\System\File\Directory; + +/** + * Navigation class. + * + * @category Modules + * @package Modules\Admin + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class Update extends UpdateAbstract +{ + + /** + * {@inheritdoc} + */ + public static function update(DatabasePool $dbPool, array $info) + { + Directory::deletePath(__DIR__ . '/Update'); + mkdir('Update'); + parent::update($dbPool, $info); + } +} diff --git a/Controller.php b/Controller.php new file mode 100644 index 0000000..32aecea --- /dev/null +++ b/Controller.php @@ -0,0 +1,159 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Marketing; + +use Modules\Navigation\Models\Navigation; +use Modules\Navigation\Views\NavigationView; +use phpOMS\Contract\RenderableInterface; +use phpOMS\Message\RequestAbstract; +use phpOMS\Message\ResponseAbstract; +use phpOMS\Module\ModuleAbstract; +use phpOMS\Module\WebInterface; +use phpOMS\Views\View; +use phpOMS\Views\ViewLayout; + +/** + * Marketing controller class. + * + * @category Modules + * @package Modules\Marketing + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class Controller extends ModuleAbstract implements WebInterface +{ + + /** + * Module path. + * + * @var string + * @since 1.0.0 + */ + /* public */ const MODULE_PATH = __DIR__; + + /** + * Module version. + * + * @var string + * @since 1.0.0 + */ + /* public */ const MODULE_VERSION = '1.0.0'; + + /** + * Module name. + * + * @var string + * @since 1.0.0 + */ + /* public */ const MODULE_NAME = 'Marketing'; + + /** + * Providing. + * + * @var string + * @since 1.0.0 + */ + protected static $providing = []; + + /** + * Dependencies. + * + * @var string + * @since 1.0.0 + */ + protected static $dependencies = [ + ]; + + /** + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function viewMarketingPromotionList(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable + { + $view = new View($this->app, $request, $response); + $view->setTemplate('/Modules/Marketing/Theme/Backend/promotion-list'); + $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001902001, $request, $response)); + + return $view; + } + + /** + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function viewMarketingPromotionCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable + { + $view = new View($this->app, $request, $response); + $view->setTemplate('/Modules/Marketing/Theme/Backend/promotion-create'); + $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001902001, $request, $response)); + + return $view; + } + + /** + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function viewMarketingEventList(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable + { + $view = new View($this->app, $request, $response); + $view->setTemplate('/Modules/Marketing/Theme/Backend/event-list'); + $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001903001, $request, $response)); + + return $view; + } + + /** + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function viewMarketingEventCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable + { + $view = new View($this->app, $request, $response); + $view->setTemplate('/Modules/Marketing/Theme/Backend/event-create'); + $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001903001, $request, $response)); + + return $view; + } + +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..81f4c20 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Marketing # diff --git a/Theme/Backend/Lang/Navigation.en.lang.php b/Theme/Backend/Lang/Navigation.en.lang.php new file mode 100644 index 0000000..63c9dd9 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.en.lang.php @@ -0,0 +1,22 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +return ['Navigation' => [ + 'Analysis' => 'Analysis', + 'Create' => 'Create', + 'Events' => 'Events', + 'Marketing' => 'Marketing', + 'Promotions' => 'Promotions', +]]; diff --git a/Theme/Backend/Lang/api.en.lang.php b/Theme/Backend/Lang/api.en.lang.php new file mode 100644 index 0000000..afe845f --- /dev/null +++ b/Theme/Backend/Lang/api.en.lang.php @@ -0,0 +1,17 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +$MODLANG[1] = [ +]; diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php new file mode 100644 index 0000000..38a6f00 --- /dev/null +++ b/Theme/Backend/Lang/en.lang.php @@ -0,0 +1,31 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +return ['Marketing' => [ + 'Budget' => 'Budget', + 'Description' => 'Description', + 'Expenses' => 'Expenses', + 'End' => 'End', + 'Event' => 'Event', + 'Events' => 'Events', + 'Limit' => 'Limit', + 'Location' => 'Location', + 'Promotion' => 'Promotion', + 'Sales' => 'Sales', + 'Start' => 'Start', + 'Status' => 'Status', + 'Title' => 'Title', + 'Type' => 'Type', +]]; diff --git a/Theme/Backend/event-create.tpl.php b/Theme/Backend/event-create.tpl.php new file mode 100644 index 0000000..9f20707 --- /dev/null +++ b/Theme/Backend/event-create.tpl.php @@ -0,0 +1,45 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +/** + * @var \phpOMS\Views\View $this + */ + +echo $this->getData('nav')->render(); ?> + +
+
+
+

getText('Event') ?>

+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/Theme/Backend/event-list.tpl.php b/Theme/Backend/event-list.tpl.php new file mode 100644 index 0000000..034fd7c --- /dev/null +++ b/Theme/Backend/event-list.tpl.php @@ -0,0 +1,52 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ + +$footerView = new \Web\Views\Lists\PaginationView($this->app, $this->request, $this->response); +$footerView->setTemplate('/Web/Templates/Lists/Footer/PaginationBig'); +$footerView->setPages(20); +$footerView->setPage(1); + +echo $this->getData('nav')->render(); ?> + +
+
+
+ + + + + + + + $value) : $count++; ?> + + +
getText('Events') ?>
getText('Status'); ?> + getText('Type'); ?> + getText('Title'); ?> + getText('Start'); ?> + getText('End'); ?> + getText('Location'); ?> + getText('Expenses'); ?> + getText('Sales'); ?> + getText('Budget'); ?> +
render(); ?> +
getText('Empty', 0, 0); ?> + +
+
+
+
diff --git a/Theme/Backend/event-profile.tpl.php b/Theme/Backend/event-profile.tpl.php new file mode 100644 index 0000000..e69de29 diff --git a/Theme/Backend/promotion-create.tpl.php b/Theme/Backend/promotion-create.tpl.php new file mode 100644 index 0000000..7978c56 --- /dev/null +++ b/Theme/Backend/promotion-create.tpl.php @@ -0,0 +1,48 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +/** + * @var \phpOMS\Views\View $this + */ + +echo $this->getData('nav')->render(); ?> + +
+
+
+

getText('Promotion') ?>

+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/Theme/Backend/promotion-list.tpl.php b/Theme/Backend/promotion-list.tpl.php new file mode 100644 index 0000000..f36fc53 --- /dev/null +++ b/Theme/Backend/promotion-list.tpl.php @@ -0,0 +1,50 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ + +$footerView = new \Web\Views\Lists\PaginationView($this->app, $this->request, $this->response); +$footerView->setTemplate('/Web/Templates/Lists/Footer/PaginationBig'); +$footerView->setPages(20); +$footerView->setPage(1); + +echo $this->getData('nav')->render(); ?> + +
+
+
+ + + + + + + + $value) : $count++; ?> + + +
getText('Events') ?>
getText('Status'); ?> + getText('Title'); ?> + getText('Start'); ?> + getText('End'); ?> + getText('Expenses'); ?> + getText('Sales'); ?> + getText('Budget'); ?> +
render(); ?> +
getText('Empty', 0, 0); ?> + +
+
+
+
\ No newline at end of file diff --git a/Theme/Backend/promotion-profile.tpl.php b/Theme/Backend/promotion-profile.tpl.php new file mode 100644 index 0000000..e69de29 diff --git a/img/module_teaser_small.png b/img/module_teaser_small.png new file mode 100644 index 0000000..f56e6ff Binary files /dev/null and b/img/module_teaser_small.png differ diff --git a/info.json b/info.json new file mode 100644 index 0000000..ba3f616 --- /dev/null +++ b/info.json @@ -0,0 +1,44 @@ +{ + "name": { + "id": 1001900000, + "internal": "Marketing", + "external": "OMS Marketing" + }, + "version": "1.0.0", + "requirements": { + "phpOMS": "1.0.0", + "phpOMS-db": "1.0.0" + }, + "creator": { + "name": "Orange Management", + "website": "www.spl1nes.com" + }, + "description": "Marketing module.", + "directory": "Marketing", + "dependencies": { + "Admin" : "1.0.0" + }, + "providing": { + "Navigation": "*" + }, + "load": [ + { + "pid": [ + "86580a45c595de69f4c48de08117379cdfa43e47" + ], + "type": 4, + "for": 0, + "from": "Marketing", + "file": "Marketing" + }, + { + "pid": [ + "754a08ddf8bcb1cf22f310f09206dd783d42f7dd" + ], + "type": 5, + "from": "Marketing", + "for": "Navigation", + "file": "Navigation" + } + ] +}