commit b53e7115e36ad72f5b8dc8017a226d8bf60d8835 Author: Dennis Eichhorn Date: Sun Nov 29 21:57:18 2015 +0100 Init diff --git a/Admin/Install/Navigation.php b/Admin/Install/Navigation.php new file mode 100644 index 0000000..23bcbcb --- /dev/null +++ b/Admin/Install/Navigation.php @@ -0,0 +1,38 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Admin\Install; + +/** + * 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($dbPool) + { + $navData = json_decode(file_get_contents(__DIR__ . '/nav.install.json'), true); + + $class = '\\Modules\\Navigation\\Admin\\Installer'; + $class::installExternal($dbPool, $navData); + } +} diff --git a/Admin/Install/nav.install.json b/Admin/Install/nav.install.json new file mode 100644 index 0000000..80a8f51 --- /dev/null +++ b/Admin/Install/nav.install.json @@ -0,0 +1,79 @@ +[ + { + "id": 1001101001, + "pid": "754a08ddf8bcb1cf22f310f09206dd783d42f7dd", + "type": 1, + "subtype": 1, + "name": "Tasks", + "uri": "/{/lang}/backend/task/dashboard", + "target": "self", + "icon": "fa fa-bolt", + "order": 15, + "from": "Tasks", + "permission": null, + "parent": 0, + "children": [ + { + "id": 1001102001, + "pid": "43ec7cda8be033d7b20996708a2fca644e5dde86", + "type": 3, + "subtype": 1, + "name": "List", + "uri": "/{/lang}/backend/task/dashboard", + "target": "self", + "icon": null, + "order": 1, + "from": "Tasks", + "permission": null, + "parent": 1001101001, + "children": [ + { + "id": 1001102101, + "pid": "43ec7cda8be033d7b20996708a2fca644e5dde86", + "type": 0, + "subtype": 1, + "name": "Tasks", + "uri": "/{/lang}/backend/task/single", + "target": "self", + "icon": null, + "order": 1, + "from": "Tasks", + "permission": null, + "parent": 1001102001, + "children": [] + } + ] + }, + { + "id": 1001103001, + "pid": "43ec7cda8be033d7b20996708a2fca644e5dde86", + "type": 3, + "subtype": 1, + "name": "Create", + "uri": "/{/lang}/backend/task/create", + "target": "self", + "icon": null, + "order": 10, + "from": "Tasks", + "permission": null, + "parent": 1001101001, + "children": [] + }, + { + "id": 1001104001, + "pid": "43ec7cda8be033d7b20996708a2fca644e5dde86", + "type": 3, + "subtype": 1, + "name": "Analysis", + "uri": "/{/lang}/backend/task/analysis", + "target": "self", + "icon": null, + "order": 20, + "from": "Tasks", + "permission": null, + "parent": 1001101001, + "children": [] + } + ] + } +] diff --git a/Admin/Installer.php b/Admin/Installer.php new file mode 100644 index 0000000..6603f0e --- /dev/null +++ b/Admin/Installer.php @@ -0,0 +1,117 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Admin; + +use phpOMS\DataStorage\Database\DatabaseType; +use phpOMS\DataStorage\Database\Pool; +use phpOMS\Module\InstallerAbstract; + +/** + * Tasks install class. + * + * @category Modules + * @package Modules\Tasks + * @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(Pool $dbPool, array $info) + { + parent::install($dbPool, $info); + + switch ($dbPool->get('core')->getType()) { + case DatabaseType::MYSQL: + $dbPool->get('core')->con->beginTransaction(); + + $dbPool->get('core')->con->prepare( + 'CREATE TABLE if NOT EXISTS `' . $dbPool->get('core')->prefix . 'task` ( + `task_id` int(11) NOT NULL AUTO_INCREMENT, + `task_title` varchar(30) DEFAULT NULL, + `task_desc` text NOT NULL, + `task_plain` text NOT NULL, + `task_type` tinyint(1) NOT NULL, + `task_status` tinyint(1) NOT NULL, + `task_due` datetime NOT NULL, + `task_done` datetime NOT NULL, + `task_creator` int(11) NOT NULL, + `task_created` datetime NOT NULL, + PRIMARY KEY (`task_id`), + KEY `task_creator` (`task_creator`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;' + )->execute(); + + $dbPool->get('core')->con->prepare( + 'ALTER TABLE `' . $dbPool->get('core')->prefix . 'task` + ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'task_ibfk_1` FOREIGN KEY (`task_creator`) REFERENCES `' . $dbPool->get('core')->prefix . 'account` (`account_id`);' + )->execute(); + + $dbPool->get('core')->con->prepare( + 'CREATE TABLE if NOT EXISTS `' . $dbPool->get('core')->prefix . 'task_account` ( + `task_account_id` int(11) NOT NULL AUTO_INCREMENT, + `task_account_task` int(11) NOT NULL, + `task_account_seen` tinyint(1) NOT NULL, + `task_account_account` int(11) NOT NULL, + `task_account_type` tinyint(1) NOT NULL, + PRIMARY KEY (`task_account_id`), + KEY `task_account_task` (`task_account_task`), + KEY `task_account_account` (`task_account_account`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;' + )->execute(); + + $dbPool->get('core')->con->prepare( + 'ALTER TABLE `' . $dbPool->get('core')->prefix . 'task_account` + ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'task_account_ibfk_1` FOREIGN KEY (`task_account_task`) REFERENCES `' . $dbPool->get('core')->prefix . 'task` (`task_id`), + ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'task_account_ibfk_2` FOREIGN KEY (`task_account_account`) REFERENCES `' . $dbPool->get('core')->prefix . 'account` (`account_id`);' + )->execute(); + + $dbPool->get('core')->con->prepare( + 'CREATE TABLE if NOT EXISTS `' . $dbPool->get('core')->prefix . 'task_element` ( + `task_element_id` int(11) NOT NULL AUTO_INCREMENT, + `task_element_desc` text NOT NULL, + `task_element_plain` text NOT NULL, + `task_element_task` int(11) NOT NULL, + `task_element_creator` int(11) NOT NULL, + `task_element_status` tinyint(1) NOT NULL, + `task_element_due` datetime NOT NULL, + `task_element_forwarded` int(11) NOT NULL, + `task_element_created` datetime NOT NULL, + PRIMARY KEY (`task_element_id`), + KEY `task_element_task` (`task_element_task`), + KEY `task_element_creator` (`task_element_creator`), + KEY `task_element_forwarded` (`task_element_forwarded`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;' + )->execute(); + + $dbPool->get('core')->con->prepare( + 'ALTER TABLE `' . $dbPool->get('core')->prefix . 'task_element` + ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'task_element_ibfk_1` FOREIGN KEY (`task_element_task`) REFERENCES `' . $dbPool->get('core')->prefix . 'task` (`task_id`), + ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'task_element_ibfk_2` FOREIGN KEY (`task_element_creator`) REFERENCES `' . $dbPool->get('core')->prefix . 'account` (`account_id`), + ADD CONSTRAINT `' . $dbPool->get('core')->prefix . 'task_element_ibfk_3` FOREIGN KEY (`task_element_forwarded`) REFERENCES `' . $dbPool->get('core')->prefix . 'account` (`account_id`);' + )->execute(); + + $dbPool->get('core')->con->commit(); + break; + } + } +} diff --git a/Controller.php b/Controller.php new file mode 100644 index 0000000..c1fdcc1 --- /dev/null +++ b/Controller.php @@ -0,0 +1,189 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks; + +use Modules\Navigation\Models\Navigation; +use Modules\Navigation\Views\NavigationView; +use phpOMS\Contract\RenderableInterface; +use phpOMS\Message\RequestAbstract; +use phpOMS\Message\RequestDestination; +use phpOMS\Message\ResponseAbstract; +use phpOMS\Module\ModuleAbstract; +use phpOMS\Module\WebInterface; +use phpOMS\Views\View; +use phpOMS\Views\ViewLayout; + +/** + * Task class. + * + * @category Modules + * @package Modules\Tasks + * @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 name. + * + * @var \string + * @since 1.0.0 + */ + protected static $module = 'Tasks'; + + /** + * Localization files. + * + * @var \string + * @since 1.0.0 + */ + protected static $localization = [ + RequestDestination::BACKEND => ['backend'], + ]; + + /** + * Providing. + * + * @var \string + * @since 1.0.0 + */ + protected static $providing = [ + 'Content', + ]; + + /** + * Dependencies. + * + * @var \string + * @since 1.0.0 + */ + protected static $dependencies = []; + + /** + * Routing elements. + * + * @var array + * @since 1.0.0 + */ + protected static $routes = [ + '^.*/backend/task/dashboard.*$' => [['dest' => '\Modules\Tasks\Controller:viewTaskDashboard', 'method' => 'GET', 'type' => ViewLayout::MAIN],], + '^.*/backend/task/single.*$' => [['dest' => '\Modules\Tasks\Controller:viewTaskView', 'method' => 'GET', 'type' => ViewLayout::MAIN],], + '^.*/backend/task/create.*$' => [['dest' => '\Modules\Tasks\Controller:viewTaskCreate', 'method' => 'GET', 'type' => ViewLayout::MAIN],], + '^.*/backend/task/analysis.*$' => [['dest' => '\Modules\Tasks\Controller:viewTaskAnalysis', 'method' => 'GET', 'type' => ViewLayout::MAIN],], + ]; + + /** + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function viewTaskDashboard(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface + { + $view = new View($this->app, $request, $response); + $view->setTemplate('/Modules/Tasks/Theme/backend/task-dashboard'); + $view->addData('nav', $this->createNavigation(1001101001, $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 viewTaskView(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface + { + $view = new View($this->app, $request, $response); + $view->setTemplate('/Modules/Tasks/Theme/backend/task-single'); + $view->addData('nav', $this->createNavigation(1001101001, $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 viewTaskCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface + { + $view = new View($this->app, $request, $response); + $view->setTemplate('/Modules/Tasks/Theme/backend/task-create'); + $view->addData('nav', $this->createNavigation(1001101001, $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 viewTaskAnalysis(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface + { + $view = new View($this->app, $request, $response); + $view->setTemplate('/Modules/Tasks/Theme/backend/task-analysis'); + $view->addData('nav', $this->createNavigation(1001101001, $request, $response)); + + return $view; + } + + /** + * @param int $pageId Page/parent Id for navigation + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * + * @return RenderableInterface + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + private function createNavigation(\int $pageId, RequestAbstract $request, ResponseAbstract $response) + { + $nav = Navigation::getInstance($request, $this->app->dbPool); + $navView = new NavigationView($this->app, $request, $response); + $navView->setTemplate('/Modules/Navigation/Theme/backend/mid'); + $navView->setNav($nav->getNav()); + $navView->setLanguage($request->getL11n()->language); + $navView->setParent($pageId); + + return $navView; + } +} diff --git a/Models/NullTaskElement.php b/Models/NullTaskElement.php new file mode 100644 index 0000000..e98798e --- /dev/null +++ b/Models/NullTaskElement.php @@ -0,0 +1,34 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Models; + + + +/** + * Task class. + * + * @category Modules + * @package Framework + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class NullTaskElement extends TaskElement +{ + +} diff --git a/Models/Stats.php b/Models/Stats.php new file mode 100644 index 0000000..e69de29 diff --git a/Models/Task.php b/Models/Task.php new file mode 100644 index 0000000..73817bc --- /dev/null +++ b/Models/Task.php @@ -0,0 +1,313 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Models; + +/** + * Task class. + * + * @category Modules + * @package Tasks + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class Task +{ + + /** + * ID. + * + * @var \int + * @since 1.0.0 + */ + private $id = null; + + /** + * Title. + * + * @var \string + * @since 1.0.0 + */ + private $title = ''; + + /** + * Creator. + * + * @var \int + * @since 1.0.0 + */ + private $createdBy = null; + + /** + * Created. + * + * @var \DateTime + * @since 1.0.0 + */ + private $createdAt = null; + + /** + * Description. + * + * @var \string + * @since 1.0.0 + */ + private $description = ''; + + /** + * Plain unparsed. + * + * @var \string + * @since 1.0.0 + */ + private $plain = ''; + + /** + * Type. + * + * @var TaskType + * @since 1.0.0 + */ + private $type = TaskType::TASK; + + /** + * Status. + * + * @var TaskStatus + * @since 1.0.0 + */ + private $status = TaskStatus::OPEN; + + /** + * Due. + * + * @var \DateTime + * @since 1.0.0 + */ + private $due = null; + + /** + * Done. + * + * @var \DateTime + * @since 1.0.0 + */ + private $done = null; + + /** + * Task elements. + * + * @var TaskElement[] + * @since 1.0.0 + */ + private $taskElements = []; + + /** + * Constructor. + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function __construct() + { + } + + /** + * Adding new task element. + * + * @param TaskElement $element Task element + * + * @return bool + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function addElement(TaskElement $element) : \bool + { + if (!isset($this->taskElements[$element->getId()])) { + $this->taskElements[$element->getId()] = $element; + + return true; + } + + return false; + } + + /** + * @return \DateTime + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getCreatedAt() : \DateTime + { + return $this->createdAt; + } + + /** + * @return \int + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getCreatedBy() : \int + { + return $this->createdBy; + } + + /** + * @return \string + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getDescription() : \string + { + return $this->description; + } + + /** + * @return \DateTime + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getDone() : \DateTime + { + return $this->done; + } + + /** + * @return \DateTime + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getDue() : \DateTime + { + return $this->due; + } + + /** + * @return \int + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getId() : \int + { + return $this->id; + } + + /** + * @return TaskStatus + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getStatus() : TaskStatus + { + return $this->status; + } + + /** + * @return \string + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getTitle() : \string + { + return $this->title; + } + + /** + * Remove Element from list. + * + * @param \int $id Task element + * + * @return bool + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function removeElement($id) : \bool + { + if (isset($this->taskElements[$id])) { + unset($this->taskElements[$id]); + + return true; + } + + return false; + } + + /** + * Get task elements. + * + * @return TaskElement[] + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getTaskElements() : array + { + return $this->taskElements; + } + + /** + * Get task elements. + * + * @param \int $id Element id + * + * @return TaskElement + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getTaskElement(\int $id) : TaskElement + { + return $this->taskElements[$id] ?? new NullTaskElement(); + } + + /** + * Get task type. + * + * @return \int + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getType() : \int + { + return $this->type; + } + + /** + * Get plain. + * + * @return \string + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getPlain() : \string + { + return $this->plain; + } +} diff --git a/Models/TaskElement.php b/Models/TaskElement.php new file mode 100644 index 0000000..cab5b36 --- /dev/null +++ b/Models/TaskElement.php @@ -0,0 +1,346 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Models; + +/** + * Task class. + * + * @category Modules + * @package Framework + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class TaskElement +{ + + /** + * Id. + * + * @var \int + * @since 1.0.0 + */ + private $id = null; + + /** + * Description. + * + * @var \string + * @since 1.0.0 + */ + private $description = ''; + + /** + * Task. + * + * @var \int + * @since 1.0.0 + */ + private $task = 0; + + /** + * Creator. + * + * @var \int + * @since 1.0.0 + */ + private $creator = 0; + + /** + * Created. + * + * @var \DateTime + * @since 1.0.0 + */ + private $created = null; + + /** + * Status. + * + * @var \int + * @since 1.0.0 + */ + private $status = null; + + /** + * Due. + * + * @var \DateTime + * @since 1.0.0 + */ + private $due = null; + + /** + * Forwarded to. + * + * @var \int + * @since 1.0.0 + */ + private $forwarded = 0; + + /** + * Constructor. + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function __construct() + { + } + + /** + * Init task element. + * + * @param \int $id Article ID + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function init($id) + { + } + + /** + * @return \DateTime + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getCreated() + { + return $this->created; + } + + /** + * @param \DateTime $created + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function setCreated($created) + { + $this->created = $created; + } + + /** + * @return \int + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getCreator() + { + return $this->creator; + } + + /** + * @param \int $creator + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function setCreator($creator) + { + $this->creator = $creator; + } + + /** + * @return \string + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param \string $description + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function setDescription($description) + { + $this->description = $description; + } + + /** + * @return \DateTime + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getDue() + { + return $this->due; + } + + /** + * @param \DateTime $due + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function setDue($due) + { + $this->due = $due; + } + + /** + * @return \int + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getForwarded() + { + return $this->forwarded; + } + + /** + * @param \int $forwarded + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function setForwarded($forwarded) + { + $this->forwarded = $forwarded; + } + + /** + * @return \int + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getId() + { + return $this->id; + } + + /** + * @param \int $id + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function setId($id) + { + $this->id = $id; + } + + /** + * @return \int + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getStatus() + { + return $this->status; + } + + /** + * @param \int $status + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function setStatus($status) + { + $this->status = $status; + } + + /** + * @return \int + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getTask() + { + return $this->task; + } + + /** + * @param \int $task + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function setTask($task) + { + $this->task = $task; + } + + /** + * {@inheritdoc} + */ + public function delete() + { + } + + /** + * {@inheritdoc} + */ + public function create() + { + } + + /** + * {@inheritdoc} + */ + public function update() + { + } + + /** + * {@inheritdoc} + */ + public function serialize() + { + } + + /** + * {@inheritdoc} + */ + public function unserialize($data) + { + } +} diff --git a/Models/TaskElementMapper.php b/Models/TaskElementMapper.php new file mode 100644 index 0000000..e69de29 diff --git a/Models/TaskMapper.php b/Models/TaskMapper.php new file mode 100644 index 0000000..d24700b --- /dev/null +++ b/Models/TaskMapper.php @@ -0,0 +1,121 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Models; + +use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\DataStorage\Database\Query\Builder; +use phpOMS\DataStorage\Database\Query\Column; + +class TaskMapper extends DataMapperAbstract +{ + + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + protected static $columns = [ + 'task_id' => ['name' => 'task_id', 'type' => 'int', 'internal' => 'id'], + 'task_title' => ['name' => 'task_title', 'type' => 'string', 'internal' => 'title'], + 'task_desc' => ['name' => 'task_desc', 'type' => 'string', 'internal' => 'description'], + 'task_plain' => ['name' => 'task_plain', 'type' => 'string', 'internal' => 'plain'], + 'task_type' => ['name' => 'task_type', 'type' => 'int', 'internal' => 'type'], + 'task_status' => ['name' => 'task_status', 'type' => 'int', 'internal' => 'status'], + 'task_due' => ['name' => 'task_due', 'type' => 'DateTime', 'internal' => 'due'], + 'task_done' => ['name' => 'task_done', 'type' => 'DateTime', 'internal' => 'done'], + 'task_creator' => ['name' => 'task_creator', 'type' => 'int', 'internal' => 'createdBy'], + 'task_created' => ['name' => 'task_created', 'type' => 'DateTime', 'internal' => 'createdAt'], + ]; + + /** + * Primary table. + * + * @var \string + * @since 1.0.0 + */ + protected static $table = 'task'; + + protected static $createdAt = 'task_created'; + + /** + * Primary field name. + * + * @var \string + * @since 1.0.0 + */ + protected static $primaryField = 'task_id'; + + /** + * Create media. + * + * @param Task $obj Media + * + * @return \bool + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function create(&$obj) + { + try { + $objId = parent::create($obj); + $query = new Builder($this->db); + $query->prefix($this->db->getPrefix()) + ->insert( + 'account_permission_account', + 'account_permission_from', + 'account_permission_for', + 'account_permission_id1', + 'account_permission_id2', + 'account_permission_r', + 'account_permission_w', + 'account_permission_m', + 'account_permission_d', + 'account_permission_p' + ) + ->into('account_permission') + ->values($obj->getCreatedBy(), 'task', 'task', 1, $objId, 1, 1, 1, 1, 1); + + $this->db->con->prepare($query->toSql())->execute(); + } catch (\Exception $e) { + var_dump($e); + + return false; + } + + return $objId; + } + + /** + * Find. + * + * @param array $columns Columns to select + * + * @return Builder + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function find(...$columns) : Builder + { + return parent::find(...$columns)->from('account_permission') + ->where('account_permission.account_permission_for', '=', 'task') + ->where('account_permission.account_permission_id1', '=', 1) + ->where('task.task_id', '=', new Column('account_permission.account_permission_id2')) + ->where('account_permission.account_permission_r', '=', 1); + } +} diff --git a/Models/TaskPriority.php b/Models/TaskPriority.php new file mode 100644 index 0000000..0a83962 --- /dev/null +++ b/Models/TaskPriority.php @@ -0,0 +1,42 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Models; + +use phpOMS\Datatypes\Enum; + +/** + * Task priority enum. + * + * @category Tasks + * @package Modules + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +abstract class TaskPriority extends Enum +{ + const VLOW = 1; + + const LOW = 2; + + const MEDIUM = 3; + + const HIGH = 4; + + const VHIGH = 5; +} diff --git a/Models/TaskStatus.php b/Models/TaskStatus.php new file mode 100644 index 0000000..01cc2b3 --- /dev/null +++ b/Models/TaskStatus.php @@ -0,0 +1,42 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Models; + +use phpOMS\Datatypes\Enum; + +/** + * Task status enum. + * + * @category Tasks + * @package Modules + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +abstract class TaskStatus extends Enum +{ + const OPEN = 1; + + const WORKING = 2; + + const SUSPENDED = 3; + + const CANCELED = 4; + + const DONE = 5; +} diff --git a/Models/TaskType.php b/Models/TaskType.php new file mode 100644 index 0000000..def85e6 --- /dev/null +++ b/Models/TaskType.php @@ -0,0 +1,35 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Models; + +use phpOMS\Datatypes\Enum; + +/** + * Task type enum. + * + * @category Tasks + * @package Modules + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +abstract class TaskType extends Enum +{ + const TASK = 0; + const MODULE = 1; +} diff --git a/Models/TaskVisibility.php b/Models/TaskVisibility.php new file mode 100644 index 0000000..0f651a7 --- /dev/null +++ b/Models/TaskVisibility.php @@ -0,0 +1,36 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +namespace Modules\Tasks\Models; + +use phpOMS\Datatypes\Enum; + +/** + * Task status enum. + * + * @category Tasks + * @package Modules + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +abstract class TaskVisibility extends Enum +{ + const TO = 1; + const CC = 2; + const BCC = 3; +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..3f8e3b3 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Tasks # diff --git a/Theme/backend/task-analysis.tpl.php b/Theme/backend/task-analysis.tpl.php new file mode 100644 index 0000000..b4f85b6 --- /dev/null +++ b/Theme/backend/task-analysis.tpl.php @@ -0,0 +1,50 @@ + + * @author Dennis Eichhorn + * @copyright 2013 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(); ?> + +
+

l11n->lang['Tasks']['Account']; ?>

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+

l11n->lang['Tasks']['Statistics']; ?>

+
+ +
l11n->lang['Tasks']['Received']; ?>0 +
l11n->lang['Tasks']['Created']; ?>0 +
l11n->lang['Tasks']['Forwarded']; ?>0 +
l11n->lang['Tasks']['AverageAmount']; ?>0 +
l11n->lang['Tasks']['AverageProcessTime']; ?>0 +
l11n->lang['Tasks']['InTime']; ?>0 +
+
+
diff --git a/Theme/backend/task-create.tpl.php b/Theme/backend/task-create.tpl.php new file mode 100644 index 0000000..b70b765 --- /dev/null +++ b/Theme/backend/task-create.tpl.php @@ -0,0 +1,58 @@ + + * @author Dennis Eichhorn + * @copyright 2013 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(); ?> + +
+

l11n->lang['Tasks']['Task']; ?>

+ +
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+

l11n->lang['Tasks']['Media']; ?>

+ +
+
+ + +
+
+
+
+
+
+
+
diff --git a/Theme/backend/task-dashboard.tpl.php b/Theme/backend/task-dashboard.tpl.php new file mode 100644 index 0000000..21778c0 --- /dev/null +++ b/Theme/backend/task-dashboard.tpl.php @@ -0,0 +1,69 @@ + + * @author Dennis Eichhorn + * @copyright 2013 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(); ?> + +
+ + + + + +
l11n->lang['Tasks']['Tasks']; ?>
l11n->lang[0]['ID']; ?> + l11n->lang['Tasks']['Status']; ?> + l11n->lang['Tasks']['Due']; ?> + l11n->lang['Tasks']['Title']; ?> + l11n->lang['Tasks']['Creator']; ?> + l11n->lang['Tasks']['Created']; ?> +
l11n->lang[0]['Empty']; ?> +
+
+ +
+
+

l11n->lang['Tasks']['Settings']; ?>

+
+
+ +
+
+
+
+
+
+ +
+

l11n->lang['Tasks']['Settings']; ?>

+
+ +
l11n->lang['Tasks']['Received']; ?>0 +
l11n->lang['Tasks']['Created']; ?>0 +
l11n->lang['Tasks']['Forwarded']; ?>0 +
l11n->lang['Tasks']['AverageAmount']; ?>0 +
l11n->lang['Tasks']['AverageProcessTime']; ?>0 +
l11n->lang['Tasks']['InTime']; ?>0 +
+
+
+
diff --git a/Theme/backend/task-single.tpl.php b/Theme/backend/task-single.tpl.php new file mode 100644 index 0000000..7d30ddc --- /dev/null +++ b/Theme/backend/task-single.tpl.php @@ -0,0 +1,103 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +/** + * @var \phpOMS\Views\View $this + */ +$task = new \Modules\Tasks\Models\Task(null); + +echo $this->getData('nav')->render(); ?> +
+
+ +
+
+ +
+

+ getTitle(); ?> + + +

+ +
+ getCreated()->format('Y-m-d H:i:s'); ?> + getDue()->format('Y-m-d H:i:s'); ?> + getDone()->format('Y-m-d H:i:s'); ?> getStatus(); ?> + getCreator(); ?> + getDescription(); ?> +
+
+ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +$elements = $task->getTaskElements(); +foreach ($elements as $element): ?> +
+
+ getCreated()->format('Y-m-d H:i:s'); ?> + getDue()->format('Y-m-d H:i:s'); ?> getStatus(); ?> + getForwarded(); ?> getCreator(); ?> + getDescription(); ?> +
+
+ + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ endforeach; ?> + +
+
+
    +
  • + l11n->lang['Tasks']['Receiver']; ?> +
  • +
  • + l11n->lang['Tasks']['Due']; ?> +
  • +
  • + l11n->lang['Tasks']['Message']; ?> +
  • +
+ +
+
+
diff --git a/Theme/lang/backend.en.lang.php b/Theme/lang/backend.en.lang.php new file mode 100644 index 0000000..37a7a46 --- /dev/null +++ b/Theme/lang/backend.en.lang.php @@ -0,0 +1,59 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +$MODLANG['Tasks'] = [ + 'Account' => 'Account', + 'All' => 'All', + 'AverageProcessTime' => 'Avg. Process Time', + 'AverageAmount' => 'Average Amount', + 'BCC' => 'BCC', + 'CC' => 'CC', + 'Created' => 'Created', + 'Creator' => 'Creator', + 'Default' => 'Default', + 'Day' => 'Day', + 'Due' => 'Due', + 'Forwarded' => 'Forwarded', + 'From' => 'From', + 'Group' => 'Group', + 'Interval' => 'Interval', + 'InTime' => 'In Time', + 'Message' => 'Message', + 'Media' => 'Media', + 'Month' => 'Month', + 'Name' => 'Name', + 'New' => 'New', + 'Open' => 'Open', + 'Person' => 'Person', + 'Priority' => 'Priority', + 'Received' => 'Received', + 'Redirected' => 'Redirected', + 'Select' => 'Select', + 'Settings' => 'Settings', + 'SharedVisibility' => 'Visibility is shared across all', + 'Size' => 'Size', + 'Statistics' => 'Statistics', + 'Status' => 'Status', + 'Task' => 'Task', + 'Tasks' => 'Tasks', + 'Template' => 'Template', + 'Title' => 'Title', + 'To' => 'To', + 'Today' => 'Today', + 'Type' => 'Type', + 'Upload' => 'Upload', + 'Week' => 'Week', + 'Year' => 'Year', +]; diff --git a/Theme/lang/nav.backend.en.lang.php b/Theme/lang/nav.backend.en.lang.php new file mode 100644 index 0000000..cad623c --- /dev/null +++ b/Theme/lang/nav.backend.en.lang.php @@ -0,0 +1,20 @@ + + * @author Dennis Eichhorn + * @copyright 2013 Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +$MODLANG['Navigation'] = [ + 'Analysis' => 'Analysis', + 'Create' => 'Create', + 'Tasks' => 'Tasks', +]; diff --git a/Views/TaskCreate.php b/Views/TaskCreate.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..35d3f57 --- /dev/null +++ b/info.json @@ -0,0 +1,52 @@ +{ + "name": { + "id": 1001100000, + "internal": "Tasks", + "external": "OMS Tasks" + }, + "version": "1.0.0", + "requirements": { + "phpOMS": "1.0.0", + "phpOMS-db": "1.0.0" + }, + "creator": { + "name": "Orange Management", + "website": "www.spl1nes.com" + }, + "description": "Tasks module.", + "directory": "Tasks", + "dependencies": {}, + "providing": { + "Navigation": "*" + }, + "load": [ + { + "pid": [ + "43ec7cda8be033d7b20996708a2fca644e5dde86", + "5d52fd7cd66f1fd8ed754002920e7693b45d6d59" + ], + "type": 4, + "for": 0, + "from": "Tasks", + "file": "Tasks" + }, + { + "pid": [ + "754a08ddf8bcb1cf22f310f09206dd783d42f7dd" + ], + "type": 5, + "from": "Tasks", + "for": "Navigation", + "file": "nav.backend" + }, + { + "pid": [ + "43ec7cda8be033d7b20996708a2fca644e5dde86" + ], + "type": 5, + "for": "Content", + "file": "backend", + "from": "Tasks" + } + ] +}