diff --git a/config/app.config.php b/config/app.config.php index 7f82d2bbd90619be48ede6becdd2d8d6b6e730f9..981b47fe44e114b0d3303dafec8e5032242ac3e3 100644 --- a/config/app.config.php +++ b/config/app.config.php @@ -29,6 +29,7 @@ return [ 'module/university_form/bootstrap.php', 'module/teacher_form/bootstrap.php', 'module/enable_db_login/bootstrap.php', + 'module/admin/bootstrap.php', ], 'cache_config' => 'data/cache/config/settings.php', ]; diff --git a/config/settings/nav.global.php b/config/settings/nav.global.php index e00917b8f95a564241ba63f2c68ce6658bc8c437..c8b514bf7f863238fbf783a6a49a796343e4f054 100644 --- a/config/settings/nav.global.php +++ b/config/settings/nav.global.php @@ -79,5 +79,11 @@ return [ ], ], + 'admin' => [ + 'adminhome' => [ + 'label' => 'ΞΟΟΞΉΞΊΞ� ΟΡλίδα διαΟΡιΟΞΉΟΟΞ�', + 'route' => 'admin', + ], + ] ], ]; diff --git a/module/admin/README.md b/module/admin/README.md new file mode 100644 index 0000000000000000000000000000000000000000..addcf055f3bf990e854dff3e88b978d39cad6fc1 --- /dev/null +++ b/module/admin/README.md @@ -0,0 +1,20 @@ +# Ξ₯ΟΞΏΟΟΟΟΞ·ΞΌΞ± διαΟΡιΟΞΉΟΟΞ� + +Ξ Ξ±ΟΞΟΡι ΟΟΟΟΞ²Ξ±ΟΞ· ΟΞ΅ διαΟΡιΟΞΉΟΟΞΉΞΊΞΟ Ξ»Ξ΅ΞΉΟΞΏΟ ΟΞ³Ξ―Ξ΅Ο. ΞΟΟΟΞΏΞ½ ΞΏ ΟΟΞ�ΟΟΞ·Ο ΟΞΉΟΟΞΏΟοιΡίΟΞ±ΞΉ +ΞΌΞ΅ ΟΟλο admin ΡμΟΞ±Ξ½Ξ―ΞΆΞ΅ΟΞ±ΞΉ ΟΞΏ ΞΌΞ΅Ξ½ΞΏΟ Ξ΄ΞΉΞ±ΟΡιΟΞΉΟΟΞΉΞΊΟΞ½ λΡιΟΞΏΟ ΟΞ³ΞΉΟΞ½. + +## Routes + +ΞΞΉΞ±ΞΈΞΟΞΉΞΌΞ± routes (paths) ΞΊΞ±ΞΉ λΡιΟΞΏΟ ΟΞ³Ξ―Ξ΅Ο. + +- admin (/admin): Ξ±ΟΟΞΉΞΊΞ� ΟΡλίδα διαΟΡιΟΞΉΟΟΞ� + +## ΞΞ΄Ξ·Ξ³Ξ―Ξ΅Ο + +ΞΞΉΞ± Ξ½Ξ± Ρίναι ΟΟΞΏΟΞ²Ξ¬ΟΞΉΞΌΞΏ, ΟΟΞΟΡι: + +- Ξ½Ξ± ΟΟΞΏΟΞΈΞΟΞ΅ΟΞ΅ ΟΞ·Ξ½ ΟΞ±ΟΞ±ΞΊΞ¬ΟΟ Ξ³ΟΞ±ΞΌΞΌΞ� ΟΟΞΏ `acl.global.php` Ξ� `acl.local.php`, +ΟΟΞΏ acl.guards.routes +``` + ['/admin', ['admin'], ['get']], +``` diff --git a/module/admin/bootstrap.php b/module/admin/bootstrap.php new file mode 100644 index 0000000000000000000000000000000000000000..eeb963704d002db069518a56214f26d72b4d6123 --- /dev/null +++ b/module/admin/bootstrap.php @@ -0,0 +1,46 @@ +<?php + +use Slim\App; +use Slim\Container; +use Slim\Http\Request; +use Slim\Http\Response; + +/** + * gredu_labs. + * + * @link https://github.com/eellak/gredu_labs for the canonical source repository + * + * @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/) + * @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html + */ +return function (App $app) { + $container = $app->getContainer(); + $events = $container['events']; + + $events('on', 'app.autoload', function ($autoloader) { + $autoloader->addPsr4('GrEduLabs\\Admin\\', __DIR__ . '/src/'); + }); + + $events('on', 'app.services', function (Container $container) { +// $nav = $container['settings']->get('navigation'); +// $nav['admin'] = [ +// 'adminhome' => [ +// 'label' => 'ΞΞΉΞ±ΟΡιΟΞΉΟΟΞ�Ο', +// 'route' => 'admin', +// 'icon' => 'user-secret', +// ], +// ]; +// $container['settings']->set('navigation', $nav); + + $container[GrEduLabs\Admin\Action\Index::class] = function ($c) { + return new GrEduLabs\Admin\Action\Index($c['view']); + }; + }); + + $events('on', 'app.bootstrap', function (App $app, Container $c) { + $view = $c->get('view'); + $view->getEnvironment()->getLoader()->prependPath(__DIR__ . '/templates'); + $app->get('/admin', GrEduLabs\Admin\Action\Index::class) + ->setName('admin'); + }); +}; diff --git a/module/admin/src/Action/Index.php b/module/admin/src/Action/Index.php new file mode 100644 index 0000000000000000000000000000000000000000..3bee08ff8f780d1e354eb5f2c4a89fa589dfa6c4 --- /dev/null +++ b/module/admin/src/Action/Index.php @@ -0,0 +1,38 @@ +<?php + +/** + * gredu_labs. + * + * @link https://github.com/eellak/gredu_labs for the canonical source repository + * + * @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/) + * @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html + */ + +namespace GrEduLabs\Admin\Action; + +use Slim\Http\Request; +use Slim\Http\Response; +use Slim\Views\Twig; + +class Index { + + /** + * @var Twig + */ + protected $view; + + /** + * Constructor. + * + * @param Twig $view + */ + public function __construct(Twig $view) { + $this->view = $view; + } + + public function __invoke(Request $req, Response $res) { + return $this->view->render($res, 'admin/index.twig'); + } + +} diff --git a/module/admin/templates/admin/index.twig b/module/admin/templates/admin/index.twig new file mode 100644 index 0000000000000000000000000000000000000000..731cc003bbd3ee977832ce403754356c958d2901 --- /dev/null +++ b/module/admin/templates/admin/index.twig @@ -0,0 +1,19 @@ +{% extends "layout.twig" %} + +{% block content %} + <div id="adminarea"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h4>ΣΡλίδα διαΟΡιΟΞΉΟΟΞ�</h4> + </div> + <div class="panel-body"> + <p>ΞΞΉΞ±ΞΈΞΟΞΉΞΌΞ΅Ο Ξ΄ΞΉΞ±ΟΡιΟΞΉΟΟΞΉΞΊΞΟ Ξ»Ξ΅ΞΉΟΞΏΟ ΟΞ³Ξ―Ξ΅Ο</p> + </div> + <div class="panel-footer text-center"> + <a class="btn btn-sm btn-default" href="{{ path_for('index') }}"><span class="fa fa-home"></span> ΞΟΟΞΉΞΊΞ�</a> + <a class="btn btn-sm btn-primary" href="{{ path_for('admin') }}"><span class="fa fa-user-secret"></span> ΞΞΉΞ±ΟΡιΟΞΉΟΟΞ�Ο</a> + <a class="btn btn-sm btn-default" href="{{ path_for('user.logout') }}"><span class="fa fa-lock"></span> ΞΟΞΏΟΟνδΡΟΞ·</a> + </div> + </div> + </div> +{% endblock %} diff --git a/module/application/templates/navigation/main.twig b/module/application/templates/navigation/main.twig index fe41fe8f4aad368ba7d568199854e33cab37484c..c73b05620cd014a142099964930df5d1e1a2be97 100644 --- a/module/application/templates/navigation/main.twig +++ b/module/application/templates/navigation/main.twig @@ -1,5 +1,5 @@ {% macro li(page) %} - + <li role="presentation" class="{% if page.active %}active {% endif %}{{ page.class|default('') }}"> <a href="{{ page.href }}" {% if page.id %}id="{{ page.id }}"{% endif %} title="{{ page.label|striptags|e }}" {% if page.target %}target="{{ page.target }}"{% endif %}> @@ -24,14 +24,24 @@ </div> <div id="navbar" class="navbar-collapse collapse"> <ul class="nav navbar-nav"> - {% for page in nav('main') %} - {{ macros.li(page)}} - {% endfor %} + {% for page in nav('main') %} + {{ macros.li(page)}} + {% endfor %} + {% if not nav('admin') is empty %} + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="fa fa-user-secret"></span> ΞΞΉΞ±ΟΡιΟΞΉΟΟΞ�Ο <span class="caret"></span></a> + <ul class="dropdown-menu"> + {% for page in nav('admin') %} + {{ macros.li(page)}} + {% endfor %} + </ul> + </li> + {% endif %} </ul> <ul class="nav navbar-nav navbar-right"> - {% for page in nav('authentication') %} - {{ macros.li(page)}} - {% endfor %} + {% for page in nav('authentication') %} + {{ macros.li(page)}} + {% endfor %} </ul> </div> </div>