Skip to content
Snippets Groups Projects
Commit 89b0abc2 authored by Florian Joriot's avatar Florian Joriot
Browse files

Mise à jour du skeleton-application pour php8

parent 742da968
No related branches found
No related tags found
No related merge requests found
Pipeline #19030 passed
Showing with 473 additions and 134 deletions
......@@ -2609,16 +2609,16 @@
},
{
"name": "laminas/laminas-i18n",
"version": "2.21.0",
"version": "2.22.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-i18n.git",
"reference": "fbd2d0373aaced4769cba2bf3d1425d55f68abb1"
"reference": "fc13d1314941bd9acda3861883cd9139d747f98f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-i18n/zipball/fbd2d0373aaced4769cba2bf3d1425d55f68abb1",
"reference": "fbd2d0373aaced4769cba2bf3d1425d55f68abb1",
"url": "https://api.github.com/repos/laminas/laminas-i18n/zipball/fc13d1314941bd9acda3861883cd9139d747f98f",
"reference": "fc13d1314941bd9acda3861883cd9139d747f98f",
"shasum": ""
},
"require": {
......@@ -2636,7 +2636,7 @@
"laminas/laminas-cache": "^3.8",
"laminas/laminas-cache-storage-adapter-memory": "^2.2.0",
"laminas/laminas-cache-storage-deprecated-factory": "^1.0.1",
"laminas/laminas-coding-standard": "~2.4.0",
"laminas/laminas-coding-standard": "~2.5.0",
"laminas/laminas-config": "^3.8.0",
"laminas/laminas-eventmanager": "^3.7",
"laminas/laminas-filter": "^2.28.1",
......@@ -2691,7 +2691,7 @@
"type": "community_bridge"
}
],
"time": "2022-12-02T17:15:52+00:00"
"time": "2023-03-12T01:03:50+00:00"
},
{
"name": "laminas/laminas-i18n-resources",
......@@ -6590,11 +6590,11 @@
},
{
"name": "unicaen/app",
"version": "6.0.3",
"version": "6.0.5",
"source": {
"type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/app.git",
"reference": "9563e774c02746b7267d0216eea957562bddd7c5"
"reference": "a85de98e91ea41bf97eb0fdb9359f4942e9fe96d"
},
"require": {
"beberlei/assert": "^3.3",
......@@ -6650,15 +6650,15 @@
]
},
"description": "Module de base des applications unicaen",
"time": "2023-02-28T14:01:30+00:00"
"time": "2023-03-21T14:44:06+00:00"
},
{
"name": "unicaen/authentification",
"version": "6.0.1",
"version": "6.0.3",
"source": {
"type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/authentification.git",
"reference": "6c2e56cd85b465f553e9cffbb59132de6303995f"
"reference": "8fecd370043a0364a54f867abed4839b476aa12f"
},
"require": {
"jasig/phpcas": "1.5.*",
......@@ -6680,7 +6680,7 @@
]
},
"description": "Module d'authentification pour les applications Unicaen - Version Laminas",
"time": "2023-02-21T16:08:28+00:00"
"time": "2023-03-21T08:19:01+00:00"
},
{
"name": "unicaen/bjy-authorize",
......@@ -6838,7 +6838,7 @@
"source": {
"type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/mail.git",
"reference": "1002f28be6a57377a5f924bd277d3059cc29ba52"
"reference": "bee0f5d6ad8376a12f0167ac5baea9979d39530a"
},
"require": {
"laminas/laminas-dependency-plugin": "^2.2",
......@@ -6853,15 +6853,15 @@
]
},
"description": "Module d'envoi de mail",
"time": "2023-03-20T08:58:49+00:00"
"time": "2023-03-20T11:19:54+00:00"
},
{
"name": "unicaen/privilege",
"version": "6.0.0",
"version": "6.0.2",
"source": {
"type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/privilege.git",
"reference": "0176388bd7e1b2aad0f9a30e633195c3b03e5396"
"reference": "3e2edb37b46f010cab3974290a949583dc8328aa"
},
"require": {
"laminas/laminas-dependency-plugin": "^2.1",
......@@ -6880,15 +6880,15 @@
]
},
"description": "Module reprenant la gestion des privileges - Version laminas",
"time": "2023-03-16T14:13:55+00:00"
"time": "2023-03-21T13:25:18+00:00"
},
{
"name": "unicaen/utilisateur",
"version": "6.0.3",
"version": "6.0.5",
"source": {
"type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/utilisateur.git",
"reference": "8163829d052a30aaa536328fce46638caca67b33"
"reference": "bc91104943b290e8c39f805b61c02e10b73d2b0e"
},
"require": {
"laminas/laminas-dependency-plugin": "^2.1",
......@@ -6912,7 +6912,7 @@
]
},
"description": "Module reprenant la gestion des utilisateurs, privileges et roles - Version laminas",
"time": "2023-03-20T08:51:39+00:00"
"time": "2023-03-21T13:45:19+00:00"
},
{
"name": "unicaen/zfc-user",
......
CREATE TABLE "user" (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(255) DEFAULT NULL,
email VARCHAR(255) DEFAULT NULL,
display_name VARCHAR(64) DEFAULT NULL,
password VARCHAR(128) NOT NULL,
state SMALLINT default 1,
last_role_id SMALLINT
) ;
CREATE UNIQUE INDEX user_username_unique ON "user" (username);
alter table "user" add PASSWORD_RESET_TOKEN varchar(256) default null;
create unique index USER_PASSWORD_RESET_TOKEN_UN on "user" (PASSWORD_RESET_TOKEN);
CREATE TABLE user_role (
id BIGSERIAL PRIMARY KEY,
role_id VARCHAR(64) NOT NULL,
is_default SMALLINT NOT NULL DEFAULT 0,
parent_id BIGINT DEFAULT NULL,
ldap_filter varchar(255) DEFAULT NULL,
accessible_exterieur BOOLEAN NOT NULL DEFAULT true,
FOREIGN KEY (parent_id) REFERENCES user_role (id) ON DELETE SET NULL
);
CREATE UNIQUE INDEX user_role_roleid_unique ON user_role (role_id);
CREATE TABLE user_role_linker (
user_id BIGINT NOT NULL,
role_id BIGINT NOT NULL,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE,
FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE
);
CREATE UNIQUE INDEX user_role_linker_unique ON user_role_linker (user_id, role_id);
CREATE TABLE IF NOT EXISTS categorie_privilege (
id BIGSERIAL PRIMARY KEY,
code VARCHAR(150) NOT NULL,
libelle VARCHAR(200) NOT NULL,
ordre INT
);
CREATE UNIQUE INDEX categorie_privilege_unique ON categorie_privilege (code);
CREATE TABLE IF NOT EXISTS privilege (
id BIGSERIAL PRIMARY KEY,
categorie_id BIGINT NOT NULL,
code VARCHAR(150) NOT NULL,
libelle VARCHAR(200) NOT NULL,
ordre INT,
FOREIGN KEY (categorie_id) REFERENCES categorie_privilege (id) ON DELETE CASCADE
);
CREATE UNIQUE INDEX privilege_unique ON privilege (code);
CREATE TABLE IF NOT EXISTS role_privilege (
role_id BIGINT NOT NULL,
privilege_id BIGINT NOT NULL,
PRIMARY KEY (role_id, privilege_id),
FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE,
FOREIGN KEY (privilege_id) REFERENCES privilege (id) ON DELETE CASCADE
);
CREATE UNIQUE INDEX role_privilege_unique ON role_privilege (role_id, privilege_id);
-- Données
INSERT INTO user_role (id, role_id, is_default, parent_id) VALUES
(1, 'Standard', 1, NULL),
(2, 'Gestionnaire', 0, 1),
(3, 'Super-gestionnaire', 0, 2),
(4, 'Administrateur', 0, 3);
INSERT INTO categorie_privilege (id, code, libelle, ordre) VALUES
(1, 'droit', 'Gestion des droits', 1);
INSERT INTO privilege (id, categorie_id, code, libelle, ordre) VALUES
(1, 1, 'role-visualisation', 'Rôles - Visualisation', 1),
(2, 1, 'role-edition', 'Rôles - Édition', 2),
(3, 1, 'privilege-visualisation', 'Privilèges - Visualisation', 3),
(4, 1, 'privilege-edition', 'Privilèges - Édition', 4);
INSERT INTO role_privilege (role_id, privilege_id) VALUES
(4, 1),
(4, 2),
(4, 3),
(4, 4);
INSERT INTO "user" (username, email, display_name, password, state) VALUES
-- utilisateur demo/azerty
('demo', 'demo@mail.fr', 'Demo Crite', '$2y$10$PxXnVLYnGEzEnfqPqRKJSe9AabocES2H4bBK5VzzJlzuj1rVt7Lwu', 1);
INSERT INTO user_role_linker(user_id, role_id)
SELECT u.id, r.id FROM "user" u, user_role r WHERE u.username = 'demo' and r.role_id = 'Standard';
......@@ -5,7 +5,10 @@ namespace Application;
use Laminas\Mvc\ModuleRouteListener;
use Laminas\Mvc\MvcEvent;
use Laminas\Http\Request as HttpRequest;
use Laminas\Config\Factory as ConfigFactory;
use Laminas\Session\SessionManager;
use Laminas\Stdlib\ArrayUtils;
use Laminas\Stdlib\Glob;
class Module
{
......@@ -35,7 +38,14 @@ class Module
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
$configInit = [
__DIR__ . '/config/module.config.php'
];
$configFiles = ArrayUtils::merge(
$configInit,
Glob::glob(__DIR__ . '/config/merged/{,*.}{config}.php', Glob::GLOB_BRACE)
);
return ConfigFactory::fromFiles($configFiles);
}
public function getAutoloaderConfig()
......
<?php
namespace Application;
use UnicaenPrivilege\Guard\PrivilegeController;
return [
'bjyauthorize' => [
'guards' => [
PrivilegeController::class => [
],
],
],
'router' => [
'routes' => [
],
],
'service_manager' => [
'factories' => [],
],
'controllers' => [
'factories' => [],
],
'form_elements' => [
'factories' => [],
],
'hydrators' => [
'factories' => [],
],
'view_helpers' => [
'invokables' => [],
],
];
\ No newline at end of file
......@@ -9,8 +9,10 @@
namespace Application;
use Application\Controller\IndexController;
use Doctrine\ORM\Mapping\Driver\XmlDriver;
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
use UnicaenPrivilege\Guard\PrivilegeController;
return [
'router' => [
......@@ -20,7 +22,7 @@ return [
'options' => [
'route' => '/',
'defaults' => [
'controller' => 'Application\Controller\Index', // <-- change here
'controller' => IndexController::class, // <-- change here
'action' => 'index',
],
],
......@@ -57,6 +59,11 @@ return [
],
],
],
'controllers' => [
'factories' => [
IndexController::class => Controller\IndexControllerFactory::class,
],
],
'service_manager' => [
'factories' => [
......@@ -72,12 +79,10 @@ return [
],
],
],
'controllers' => [
'invokables' => [
'Application\Controller\Index' => Controller\IndexController::class,
],
],
'view_manager' => [
'template_map' => [
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
],
'template_path_stack' => [
__DIR__ . '/../view',
],
......@@ -93,7 +98,20 @@ return [
'orm_default_xml_driver' => [
'class' => XmlDriver::class,
'cache' => 'array',
'paths' => [__DIR__ . '/../src/Application/Entity/Db/Mapping']
'paths' => [__DIR__ . '/../src/Application/Entity/Db/Mapping'],
],
],
],
'bjyauthorize' => [
'guards' => [
PrivilegeController::class => [
[
'controller' => IndexController::class,
'action' => [
'index',
],
'roles' => 'guest'
],
],
],
],
......
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Application\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
......@@ -18,4 +12,13 @@ class IndexController extends AbstractActionController
{
return new ViewModel();
}
public function indexAdministrationAction(): ViewModel
{
return new ViewModel();
}
}
<?php
namespace Application\Controller;
use Application\Controller\IndexController;
use Psr\Container\ContainerInterface;
class IndexControllerFactory
{
/**
* @param ContainerInterface $container
*
* @return IndexController
*/
public function __invoke(ContainerInterface $container): IndexController
{
// $config = $container->get('Config');
// var_dump($config['router']['routes']);
// die();
return new IndexController();
}
}
\ No newline at end of file
<?php
use Laminas\View\Helper\Navigation as NavigationHelper;
/** @var NavigationHelper $navigationHelper */
$navigationHelper = $this->navigation('navigation');
?>
<?php echo $this->doctype(); ?>
<html lang="fr">
<head>
<!-- Meta -->
<meta charset="utf-8">
<?php echo $this->headMeta()->appendName('viewport', 'width=device-width, initial-scale=1, shrink-to-fit=no')
->appendName('description', '')
->appendHttpEquiv("X-UA-Compatible", "IE=edge,chrome=1") ?>
<!-- Title -->
<?php echo $this->headTitle($this->appInfos()->nom)->setSeparator(' - ')->setAutoEscape(false) ?>
<!-- Links -->
<?php echo $this->headLink([
'rel' => 'shortcut icon',
'href' => $this->basePath('favicon.png')]) ?>
<!-- Scripts -->
<?php echo $this->headScript(); ?>
</head>
<body class="<?php echo getenv('APPLICATION_ENV') ?: 'development' ?>">
<nav id="navbar" class="navbar navbar-dark fixed-top navbar-expand-lg" role="navigation">
<div class="container-fluid">
<?php echo $this->appLink($this->appInfos()->nom) ?>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#menuPrincipalNavbar" aria-controls="menuPrincipalNavbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="menuPrincipalNavbar">
<?php echo $navigationHelper
->menu('navigation')
->setUlClass('navbar-nav me-auto')
->setPartial('layout/menu-principal.phtml'); ?>
<div class="navbar-text text-end">
<?php echo $this->appConnection(); ?>
</div>
</div>
</div>
</nav>
<div class="container ">
<?php echo $navigationHelper->filAriane(); ?>
</div>
<div id="contenu-principal" class="container">
<?php
$menuSecondaireHelper = $navigationHelper->menuSecondaire('navigation');
if ($menuSecondaire = (string) $menuSecondaireHelper):?>
<div class="row">
<div class="col-12 col-md-2">
<nav id="sidebar" role="navigation">
<?php echo $menuSecondaire; ?>
</nav>
</div>
<div id="content" class="col-12 col-md-10">
<?php echo $this->content; ?>
</div>
</div>
<?php else: ?>
<?php echo $this->content; ?>
<?php endif; ?>
</div>
<nav id="footer" class="navbar navbar-fixed-bottom">
<div class="container">
<?php echo $navigationHelper->menuPiedDePage('navigation'); ?>
</div>
</nav>
<a href="#" class="scrollup" title="Remonter en haut de cette page">
<img alt="Remonter" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAepJREFUeNrcmbFKw0AYx39WKAgOQXAS5AQf4EAQuhWfoIPQZ/ANBEEq+ACFTk43CFJxKIU+hSAtguAgBF2cSganDnIuFwnBhtzljFf/8E1JLr98X+7j7n9ruGsX6AIHwD4ggXVz7ROYATFwD9wCb9SgLeACeAS0ZTyaZ7d+A2wTOAM+HMDy8WHG2vQFdwy8ewDLx7sZ21nrQP8XwPLRz/y7pbUBjGuAS2Ns3lk6c3XCZSFLZbL/B3DZcheq+4dwaXSLetw8AMD5sl45CAAujUEebgdYBAS4MEw0DOAJ0CQcNQ3Td1t5DSh7abymbecwQLg0DhvAkY+aSCmJ4xitNUopoijyMewRwLDql0opdZIkOqvpdKqjKKqawSHAk284j5BPVGnORXCeIOe49r8ycB4gF06ANnAVIRfWJRZCLIVTShXCj0YjpxJbTZJer7cUrkyGXSbJnc1DnU6nEK4IMo5jW8A7gFPbf1ApVQj3E2SSJFpKaQt4CtBymcVCCC2EKHVvu912bTOt4BcLDWNTXBOebgxb2AvWlVnyr8SmKfhtZwilHvwL6yM1jyY1wk1szKNsJq9qgLtysd9WwsDMW8DnHi3gc58WcFbbxgh32Wg9A5dmjNJaqwC798MxRFYz4AV4MMcQsctLvgYA2It91Klq2nkAAAAASUVORK5CYII="/>
</a>
<!-- Scripts -->
<?php echo $this->inlineScript(); ?>
</body>
</html>
\ No newline at end of file
<?php echo $this->doctype(); ?>
<html lang="fr">
<head>
<!-- Meta -->
<meta charset="utf-8">
<?php echo $this->headMeta()->appendName('viewport', 'width=device-width, initial-scale=1.0')
->appendName('description', '')
->appendHttpEquiv("X-UA-Compatible", "IE=edge,chrome=1") ?>
<!-- Title -->
<?php echo $this->headTitle($this->appInfos()->nom)->setSeparator(' - ')->setAutoEscape(false)->append("Maintenance") ?>
<!-- Links -->
<?php echo $this->headLink([
'rel' => 'shortcut icon',
'type' => 'image/vnd.microsoft.icon',
'href' => '//www.unicaen.fr/images/favicon.ico']) ?>
<!-- Scripts -->
<?php echo $this->headScript(); ?>
</head>
<body class="<?php echo getenv('APPLICATION_ENV') ?: 'development' ?>">
<div id="navbar" class="navbar navbar-inverse navbar-fixed-top navbar-expand-md navbar-dark bg-dark" role="navigation">
<div class="container">
<div class="navbar-header">
<?php echo $this->appLink($this->appInfos()->nom) ?>
</div>
</div>
</div>
<div id="contenu-principal" class="container">
<div class="jumbotron">
<h1 class="page-header"><?php echo $this->appInfos()->nom ?></h1>
<p class="appname-subtitle">
<strong><?php echo $this->appInfos()->desc ?></strong>
</p>
<table style="margin-top: 50px;">
<tr class="text-danger" style="font-size: 150%; line-height: 100%">
<td><span class="icon iconly icon-avertissement" style="font-size: 200%; vertical-align: -40%; margin-right: 10px;"></span></td>
<td>
<span style="font-weight: 500;"><?php echo $message ?></span>
</td>
</tr>
</table>
</div>
</div>
<hr/>
<div id="footer" class="container">
<!-- --><?php //echo $this->navigation()->menuPiedDePage('navigation'); ?>
</div>
<a href="#" class="scrollup" title="Remonter en haut de cette page">
<img alt="Remonter"
src="data:image/png;base64,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"/>
</a>
<!-- Scripts -->
<?php echo $this->inlineScript(); ?>
</body>
</html>
\ No newline at end of file
<?php
use Laminas\Navigation\AbstractContainer;
use Laminas\Navigation\Page\AbstractPage;
// Pointeur sur la première page du conteneur
$this->container->rewind();
// On récupère le conteneur en-dessous du 'home'
/** @var AbstractContainer $container */
$container = $this->container->getChildren();
// tri des pages de niveau 1 par 'order'
$sorterByOrder = function(AbstractPage $p1, AbstractPage $p2) { return ($p1->getOrder()?:0) <=> ($p2->getOrder()?:0); };
$pagesNiv1 = iterator_to_array($container);
uasort($pagesNiv1, $sorterByOrder);
?>
<ul class="<?php echo $this->navigation()->menu()->getUlClass(); ?>">
<?php foreach ($pagesNiv1 as $page): ?>
<?php if (!$this->navigation()->accept($page)) continue; ?>
<?php /* @var $page Laminas\Navigation\Page\Mvc */ ?>
<?php $hasChildren = $page->hasPages() ?>
<?php if (!$hasChildren): ?>
<li class="nav-item <?php if ($page->isActive()) echo 'active' ?>">
<a class="nav-link" href="<?php echo $page->getHref() ?>"
<?php if ($page->getTarget() != ""): ?>
target="<?php echo $page->getTarget(); ?>"
<?php endif; ?>>
<?php if ($page->get("icon") !== ""): ?>
<span class="<?php echo $page->get("icon"); ?>"></span>
<?php elseif (in_array('divider', explode(' ', $page->getClass()))): ?>
<div class="dropdown-divider <?php echo $page->getClass() ?>"></div>
<?php endif; ?>
<?php echo $this->escapeHtml($this->translate($page->getLabel(), $this->navigation($container)->getTranslatorTextDomain())); ?>
</a>
</li>
<?php else: ?>
<?php
//check if access is allowed at least one item
$access = false;
foreach ($page->getPages() as $child) {
if ($this->navigation()->accept($child) && $child->get("separator") !== true) {
$access = true;
}
}
if ($access) :
?>
<li class="nav-item dropdown <?php if ($page->isActive(true)) echo ' nav-item active' ?>">
<a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-bs-toggle="dropdown" href="<?php echo $page->getHref() ?>" aria-expanded="false">
<?php if ($page->get("icon") != ""): ?>
<span class="icon">
<i class="<?php echo $page->get("icon"); ?>"></i>
</span>
<?php endif; ?>
<?php echo $this->escapeHtml($this->translate($page->getLabel(), $this->navigation($container)->getTranslatorTextDomain())); ?>
<!-- <b class="caret"></b>-->
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<?php
// tri des pages de niveau 2 par 'order'
$pagesNiv2 = $page->getPages();
uasort($pagesNiv2, $sorterByOrder);
?>
<?php foreach ($pagesNiv2 as $child): ?>
<?php if (!$this->navigation()->accept($child)) continue; ?>
<?php if ($child->get("dropdown-header") === true): ?>
<li class="dropdown-item">
<?php if ($child->get("icon") != ""): ?>
<span class="icon">
<i class="<?php echo $child->get("icon"); ?>"></i>
</span>
<?php elseif (in_array('divider', explode(' ', $child->getClass()))): ?>
<div class="dropdown-divider <?php echo $child->getClass() ?>"></div>
<?php endif; ?>
<?php echo $this->escapeHtml($this->translate($child->getLabel(), $this->navigation($container)->getTranslatorTextDomain())); ?>
</li>
<?php
continue;
endif;
?>
<?php if ($child->get("separator") === true): ?>
<li class="dropdown-divider"></li>
<?php
continue;
endif;
?>
<li>
<a class="dropdown-item <?php if ($child->isActive()) echo 'active' ?>"
href="<?php echo $child->getHref() ?>"
<?php if ($child->getTarget() != ""): ?>
target="<?php echo $child->getTarget(); ?>"
<?php endif; ?>>
<?php if ($child->get("icon") != ""): ?>
<span class="icon">
<i class="<?php echo $child->get("icon"); ?>"></i>
</span>
<?php endif; ?>
<?php echo $this->escapeHtml($this->translate($child->getLabel(), $this->navigation($container)->getTranslatorTextDomain())); ?>
</a>
</li>
<?php endforeach ?>
</ul>
</li>
<?php endif; ?>
<?php endif ?>
<?php endforeach ?>
</ul>
\ No newline at end of file
<?php
/* @var $container Laminas\Navigation\Navigation */
// On récupère le container en-dessous du 'home'
$container = $this->container->getChildren();
?>
<ul class="<?php echo $this->navigation($container)->menu()->getUlClass(); ?>">
<?php foreach ($container as $page): ?>
<?php if (!$this->navigation()->accept($page)) continue; ?>
<?php /* @var $page Laminas\Navigation\Page\Mvc */ ?>
<?php $hasChildren = $page->hasPages() ?>
<?php if (!$hasChildren): ?>
<li<?php if ($page->isActive()) echo ' class="active"' ?>>
<a
class="nav-header"
href="<?php echo $page->getHref() ?>"
<?php if ($page->getTarget() != ""): ?>
target="<?php echo $page->getTarget(); ?>"
<?php endif; ?>
>
<?php if ($page->get("icon") !== ""): ?>
<span class="<?php echo $page->get("icon"); ?>"></span>
<?php endif; ?>
<?php echo $this->escapeHtml($this->translate($page->getLabel(), $this->navigation($container)->getTranslatorTextDomain())); ?>
</a>
</li>
<?php else: ?>
<?php
//check if access is allowed at least one item
$access = false;
foreach ($page->getPages() as $child) {
if ($this->navigation()->accept($child) && $child->get("separator") !== true) {
$access = true;
}
}
if ($access) :
?>
<li class="dropdown<?php if ($page->isActive(true)) echo ' active' ?>">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<?php if ($page->get("icon") != ""): ?>
<span class="icon">
<i class="<?php echo $page->get("icon"); ?>"></i>
</span>
<?php endif; ?>
<?php echo $this->escapeHtml($this->translate($page->getLabel(), $this->navigation($container)->getTranslatorTextDomain())); ?>
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<?php foreach ($page->getPages() as $child): ?>
<?php if (!$this->navigation()->accept($child)) continue; ?>
<?php if ($child->get("dropdown-header") === true): ?>
<li role="presentation" class="dropdown-header">
<?php if ($child->get("icon") != ""): ?>
<span class="icon">
<i class="<?php echo $child->get("icon"); ?>"></i>
</span>
<?php endif; ?>
<?php echo $this->escapeHtml($this->translate($child->getLabel(), $this->navigation($container)->getTranslatorTextDomain())); ?>
</li>
<?php
continue;
endif;
?>
<?php if ($child->get("separator") === true): ?>
<li class="divider"></li>
<?php
continue;
endif;
?>
<li<?php if ($child->isActive()) echo ' class="active"' ?>>
<a href="<?php echo $child->getHref() ?>"
<?php if ($child->getTarget() != ""): ?>
target="<?php echo $child->getTarget(); ?>"
<?php endif; ?>>
<?php if ($child->get("icon") != ""): ?>
<span class="icon">
<i class="<?php echo $child->get("icon"); ?>"></i>
</span>
<?php endif; ?>
<?php echo $this->escapeHtml($this->translate($child->getLabel(), $this->navigation($container)->getTranslatorTextDomain())); ?>
</a>
</li>
<?php endforeach ?>
</ul>
</li>
<?php endif; ?>
<?php endif ?>
<?php endforeach ?>
</ul>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment