diff --git a/dicos/90_nineschool.xml b/dicos/90_nineschool.xml
index 16ebd21..9b060b8 100644
--- a/dicos/90_nineschool.xml
+++ b/dicos/90_nineschool.xml
@@ -16,7 +16,7 @@
-
+
diff --git a/src/nineschool-1.0/assets/js/app.js b/src/nineschool-1.0/assets/js/app.js
index 4afcb3d..667daa3 100644
--- a/src/nineschool-1.0/assets/js/app.js
+++ b/src/nineschool-1.0/assets/js/app.js
@@ -1,10 +1,16 @@
// JQuery
window.$ = window.jQuery = require('jquery');
+// JQueryui
+require('jqueryui');
+
// Bootstrap
require('bootstrap');
require('bootstrap/dist/css/bootstrap.min.css');
+// timepicki
+const timepicki = require('timepicki/js/timepicki.js');
+
// Datatables
require('datatables.net-bs4');
require('./datatables.init.js');
@@ -13,14 +19,29 @@ require('datatables.net-bs4/css/dataTables.bootstrap4.min.css');
// Fontawesome
require('@fortawesome/fontawesome-free/css/all.css');
+// bs-stepper
+require('bs-stepper/dist/css/bs-stepper.min.css');
+const Stepper = require('bs-stepper/dist/js/bs-stepper.min.js');
+global.Stepper = Stepper;
+
+// Masonery
+const masonry = require('masonry-layout/dist/masonry.pkgd.min.js');
+global.masonry = masonry;
+
+// Slick
+require('slick-carousel/slick/slick.css');
+const slick = require('slick-carousel/slick/slick.min.js');
+global.slick = slick;
+
+// Imageloaded
+const imagesLoaded = require('imagesloaded/imagesloaded.js');
+global.imagesLoaded = imagesLoaded;
+
// Moment
const moment = require('moment');
global.moment = moment;
require('moment/locale/fr.js');
-// TempusDominus
-require('tempusdominus-bootstrap-4');
-
// Select2
require('select2');
require('select2/dist/js/i18n/fr.js');
diff --git a/src/nineschool-1.0/composer.json b/src/nineschool-1.0/composer.json
index fa58e06..194c2ea 100644
--- a/src/nineschool-1.0/composer.json
+++ b/src/nineschool-1.0/composer.json
@@ -5,6 +5,7 @@
"php": "^7.1.3",
"ext-ctype": "*",
"ext-iconv": "*",
+ "cboden/ratchet": "^0.4.3",
"doctrine/annotations": "^1.8",
"friendsofsymfony/ckeditor-bundle": "^2.2",
"friendsofsymfony/rest-bundle": "^3.0",
@@ -14,6 +15,7 @@
"nategood/httpful": "^0.3.2",
"nelmio/api-doc-bundle": "^3.6",
"oneup/uploader-bundle": "^3.0",
+ "ramsey/uuid": "^4.1",
"sensio/framework-extra-bundle": "^5.1",
"symfony/apache-pack": "^1.0",
"symfony/asset": "5.1.*",
diff --git a/src/nineschool-1.0/composer.lock b/src/nineschool-1.0/composer.lock
index b05ff51..3a143b2 100644
--- a/src/nineschool-1.0/composer.lock
+++ b/src/nineschool-1.0/composer.lock
@@ -4,8 +4,111 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "content-hash": "dcf29a3826720301ab52c6fe3543f7bd",
+ "content-hash": "6e17c24e8ecdd92e1fa9b4738c5c94f3",
"packages": [
+ {
+ "name": "brick/math",
+ "version": "0.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/brick/math.git",
+ "reference": "283a40c901101e66de7061bd359252c013dcc43c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/brick/math/zipball/283a40c901101e66de7061bd359252c013dcc43c",
+ "reference": "283a40c901101e66de7061bd359252c013dcc43c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^7.5.15|^8.5",
+ "vimeo/psalm": "^3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Brick\\Math\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Arbitrary-precision arithmetic library",
+ "keywords": [
+ "Arbitrary-precision",
+ "BigInteger",
+ "BigRational",
+ "arithmetic",
+ "bigdecimal",
+ "bignum",
+ "brick",
+ "math"
+ ],
+ "time": "2020-08-18T23:57:15+00:00"
+ },
+ {
+ "name": "cboden/ratchet",
+ "version": "v0.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ratchetphp/Ratchet.git",
+ "reference": "466a0ecc83209c75b76645eb823401b5c52e5f21"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/466a0ecc83209c75b76645eb823401b5c52e5f21",
+ "reference": "466a0ecc83209c75b76645eb823401b5c52e5f21",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/psr7": "^1.0",
+ "php": ">=5.4.2",
+ "ratchet/rfc6455": "^0.3",
+ "react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5",
+ "symfony/http-foundation": "^2.6|^3.0|^4.0|^5.0",
+ "symfony/routing": "^2.6|^3.0|^4.0|^5.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ratchet\\": "src/Ratchet"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Matt Bonneau",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP WebSocket library",
+ "homepage": "http://socketo.me",
+ "keywords": [
+ "Ratchet",
+ "WebSockets",
+ "server",
+ "sockets",
+ "websocket"
+ ],
+ "time": "2020-07-07T15:50:14+00:00"
+ },
{
"name": "doctrine/annotations",
"version": "1.10.3",
@@ -1165,6 +1268,7 @@
"reflection",
"static"
],
+ "abandoned": "roave/better-reflection",
"time": "2020-03-27T11:06:43+00:00"
},
{
@@ -1278,6 +1382,49 @@
],
"time": "2020-06-16T20:11:17+00:00"
},
+ {
+ "name": "evenement/evenement",
+ "version": "v3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/igorw/evenement.git",
+ "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
+ "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Evenement": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ }
+ ],
+ "description": "Événement is a very simple event dispatching library for PHP",
+ "keywords": [
+ "event-dispatcher",
+ "event-emitter"
+ ],
+ "time": "2017-07-23T21:35:13+00:00"
+ },
{
"name": "exsyst/swagger",
"version": "v0.4.1",
@@ -1496,6 +1643,77 @@
],
"time": "2020-06-29T11:19:01+00:00"
},
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "1.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3",
+ "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0",
+ "psr/http-message": "~1.0",
+ "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+ },
+ "provide": {
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "ext-zlib": "*",
+ "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ },
+ "files": [
+ "src/functions_include.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Schultze",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "time": "2020-09-30T07:37:11+00:00"
+ },
{
"name": "jasig/phpcas",
"version": "1.3.8",
@@ -2495,6 +2713,56 @@
],
"time": "2019-01-08T18:20:26+00:00"
},
+ {
+ "name": "psr/http-message",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "time": "2016-08-06T14:39:51+00:00"
+ },
{
"name": "psr/link",
"version": "1.0.0",
@@ -2591,6 +2859,627 @@
],
"time": "2020-03-23T09:12:05+00:00"
},
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "ramsey/collection",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/collection.git",
+ "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/24d93aefb2cd786b7edd9f45b554aea20b28b9b1",
+ "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "ergebnis/composer-normalize": "^2.6",
+ "fzaninotto/faker": "^1.5",
+ "hamcrest/hamcrest-php": "^2",
+ "jangregor/phpstan-prophecy": "^0.6",
+ "mockery/mockery": "^1.3",
+ "phpstan/extension-installer": "^1",
+ "phpstan/phpstan": "^0.12.32",
+ "phpstan/phpstan-mockery": "^0.12.5",
+ "phpstan/phpstan-phpunit": "^0.12.11",
+ "phpunit/phpunit": "^8.5",
+ "psy/psysh": "^0.10.4",
+ "slevomat/coding-standard": "^6.3",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^3.12.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Collection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "A PHP 7.2+ library for representing and manipulating collections.",
+ "keywords": [
+ "array",
+ "collection",
+ "hash",
+ "map",
+ "queue",
+ "set"
+ ],
+ "time": "2020-09-10T20:58:17+00:00"
+ },
+ {
+ "name": "ramsey/uuid",
+ "version": "4.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "cd4032040a750077205918c86049aa0f43d22947"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947",
+ "reference": "cd4032040a750077205918c86049aa0f43d22947",
+ "shasum": ""
+ },
+ "require": {
+ "brick/math": "^0.8 || ^0.9",
+ "ext-json": "*",
+ "php": "^7.2 || ^8",
+ "ramsey/collection": "^1.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "codeception/aspect-mock": "^3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0",
+ "doctrine/annotations": "^1.8",
+ "goaop/framework": "^2",
+ "mockery/mockery": "^1.3",
+ "moontoast/math": "^1.1",
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock-mockery": "^1.3",
+ "php-mock/php-mock-phpunit": "^2.5",
+ "php-parallel-lint/php-parallel-lint": "^1.1",
+ "phpbench/phpbench": "^0.17.1",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-mockery": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpunit/phpunit": "^8.5",
+ "psy/psysh": "^0.10.0",
+ "slevomat/coding-standard": "^6.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "3.9.4"
+ },
+ "suggest": {
+ "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+ "ext-ctype": "Enables faster processing of character classification using ctype functions.",
+ "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+ "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ },
+ "files": [
+ "src/functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+ "homepage": "https://github.com/ramsey/uuid",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "time": "2020-08-18T17:17:46+00:00"
+ },
+ {
+ "name": "ratchet/rfc6455",
+ "version": "v0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ratchetphp/RFC6455.git",
+ "reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c8651c7938651c2d55f5d8c2422ac5e57a183341",
+ "reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/psr7": "^1.0",
+ "php": ">=5.4.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "5.7.*",
+ "react/socket": "^1.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ratchet\\RFC6455\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Matt Bonneau",
+ "role": "Developer"
+ }
+ ],
+ "description": "RFC6455 WebSocket protocol handler",
+ "homepage": "http://socketo.me",
+ "keywords": [
+ "WebSockets",
+ "rfc6455",
+ "websocket"
+ ],
+ "time": "2020-05-15T18:31:24+00:00"
+ },
+ {
+ "name": "react/cache",
+ "version": "v1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/cache.git",
+ "reference": "44a568925556b0bd8cacc7b49fb0f1cf0d706a0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/cache/zipball/44a568925556b0bd8cacc7b49fb0f1cf0d706a0c",
+ "reference": "44a568925556b0bd8cacc7b49fb0f1cf0d706a0c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "react/promise": "^3.0 || ^2.0 || ^1.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async, Promise-based cache interface for ReactPHP",
+ "keywords": [
+ "cache",
+ "caching",
+ "promise",
+ "reactphp"
+ ],
+ "time": "2020-09-18T12:12:35+00:00"
+ },
+ {
+ "name": "react/dns",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/dns.git",
+ "reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/dns/zipball/665260757171e2ab17485b44e7ffffa7acb6ca1f",
+ "reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "react/cache": "^1.0 || ^0.6 || ^0.5",
+ "react/event-loop": "^1.0 || ^0.5",
+ "react/promise": "^3.0 || ^2.7 || ^1.2.1",
+ "react/promise-timer": "^1.2"
+ },
+ "require-dev": {
+ "clue/block-react": "^1.2",
+ "phpunit/phpunit": "^9.3 || ^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Dns\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async DNS resolver for ReactPHP",
+ "keywords": [
+ "async",
+ "dns",
+ "dns-resolver",
+ "reactphp"
+ ],
+ "time": "2020-09-18T12:12:55+00:00"
+ },
+ {
+ "name": "react/event-loop",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/event-loop.git",
+ "reference": "6d24de090cd59cfc830263cfba965be77b563c13"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/event-loop/zipball/6d24de090cd59cfc830263cfba965be77b563c13",
+ "reference": "6d24de090cd59cfc830263cfba965be77b563c13",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
+ },
+ "suggest": {
+ "ext-event": "~1.0 for ExtEventLoop",
+ "ext-pcntl": "For signal handling support when using the StreamSelectLoop",
+ "ext-uv": "* for ExtUvLoop"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\EventLoop\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
+ "keywords": [
+ "asynchronous",
+ "event-loop"
+ ],
+ "time": "2020-01-01T18:39:52+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ },
+ "files": [
+ "src/functions_include.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "time": "2020-05-12T15:16:56+00:00"
+ },
+ {
+ "name": "react/promise-timer",
+ "version": "v1.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise-timer.git",
+ "reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
+ "reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3",
+ "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
+ "react/promise": "^3.0 || ^2.7.0 || ^1.2.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0 || ^5.7 || ^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Promise\\Timer\\": "src/"
+ },
+ "files": [
+ "src/functions_include.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@lueck.tv"
+ }
+ ],
+ "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.",
+ "homepage": "https://github.com/reactphp/promise-timer",
+ "keywords": [
+ "async",
+ "event-loop",
+ "promise",
+ "reactphp",
+ "timeout",
+ "timer"
+ ],
+ "time": "2020-07-10T12:18:06+00:00"
+ },
+ {
+ "name": "react/socket",
+ "version": "v1.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/socket.git",
+ "reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/socket/zipball/e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
+ "reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a",
+ "shasum": ""
+ },
+ "require": {
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.0",
+ "react/dns": "^1.1",
+ "react/event-loop": "^1.0 || ^0.5",
+ "react/promise": "^2.6.0 || ^1.2.1",
+ "react/promise-timer": "^1.4.0",
+ "react/stream": "^1.1"
+ },
+ "require-dev": {
+ "clue/block-react": "^1.2",
+ "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35",
+ "react/promise-stream": "^1.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Socket\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
+ "keywords": [
+ "Connection",
+ "Socket",
+ "async",
+ "reactphp",
+ "stream"
+ ],
+ "time": "2020-08-28T12:49:05+00:00"
+ },
+ {
+ "name": "react/stream",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/stream.git",
+ "reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/stream/zipball/7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
+ "reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a",
+ "shasum": ""
+ },
+ "require": {
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.8",
+ "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5"
+ },
+ "require-dev": {
+ "clue/stream-filter": "~1.2",
+ "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Stream\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
+ "keywords": [
+ "event-driven",
+ "io",
+ "non-blocking",
+ "pipe",
+ "reactphp",
+ "readable",
+ "stream",
+ "writable"
+ ],
+ "time": "2020-05-04T10:17:57+00:00"
+ },
{
"name": "sensio/framework-extra-bundle",
"version": "v5.5.6",
diff --git a/src/nineschool-1.0/config/packages/twig.yaml b/src/nineschool-1.0/config/packages/twig.yaml
index 615e006..acd6bfe 100644
--- a/src/nineschool-1.0/config/packages/twig.yaml
+++ b/src/nineschool-1.0/config/packages/twig.yaml
@@ -12,6 +12,8 @@ twig:
appName: '%appName%'
appCron: '%appCron%'
appMasteridentity: '%appMasteridentity%'
+ wssuse: '%wssuse%'
+ wssurl: '%wssurl%'
sondeUse: '%sondeUse%'
sondeUrl: '%sondeUrl%'
diff --git a/src/nineschool-1.0/config/routes.yaml b/src/nineschool-1.0/config/routes.yaml
index 79360b9..90b9c24 100644
--- a/src/nineschool-1.0/config/routes.yaml
+++ b/src/nineschool-1.0/config/routes.yaml
@@ -53,6 +53,20 @@ app_config_logo:
path: /admin/config/logo
defaults: { _controller: App\Controller\ConfigController:logo }
+#== Theme ================================================================================================================
+app_theme:
+ path: /admin/theme
+ defaults: { _controller: App\Controller\ThemeController:list }
+
+app_theme_select:
+ path: /admin/theme/select/{name}
+ defaults: { _controller: App\Controller\ThemeController:select, name: "" }
+
+#== Wss ==================================================================================================================
+app_wss_sample:
+ path: /user/wss/sampble
+ defaults: { _controller: App\Controller\WebsocketController:sample }
+
#== Sonde ================================================================================================================
app_sonde:
path: /sonde
@@ -67,6 +81,10 @@ app_crop02:
path: /user/crop02/{type}/{reportinput}
defaults: { _controller: App\Controller\CropController:crop02 }
+app_ckupload:
+ path: /user/ckupload
+ defaults: { _controller: App\Controller\CropController:ckupload }
+
oneup_uploader:
resource: .
type: uploader
diff --git a/src/nineschool-1.0/config/services.yaml b/src/nineschool-1.0/config/services.yaml
index 7380014..46e54d8 100644
--- a/src/nineschool-1.0/config/services.yaml
+++ b/src/nineschool-1.0/config/services.yaml
@@ -46,6 +46,10 @@ parameters:
casEmail: '%env(resolve:CAS_EMAIL)%'
casLastname: '%env(resolve:CAS_LASTNAME)%'
casFirstname: '%env(resolve:CAS_FIRSTNAME)%'
+
+ wssuse: '%env(resolve:WSS_USE)%'
+ wssport: '%env(resolve:WSS_PORT)%'
+ wssurl: 'wss://%env(resolve:APP_WEBURL)%/wss%env(resolve:APP_ALIAS)%'
proxyUse: '%env(resolve:PROXY_USE)%'
proxyHost: '%env(resolve:PROXY_HOST)%'
diff --git a/src/nineschool-1.0/public/styles/css/font.css b/src/nineschool-1.0/public/styles/css/font.css
new file mode 100644
index 0000000..e36344c
--- /dev/null
+++ b/src/nineschool-1.0/public/styles/css/font.css
@@ -0,0 +1,174 @@
+@font-face {
+font-family: 'Redressed';
+src: url('../fonts/Redressed-webfont.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Acme-Regular';
+src: url('../fonts/Acme-Regular-webfont.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Peacesans';
+src: url('../fonts/Peacesans-webfont.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Roboto-Regular';
+src: url('../fonts/Roboto-Regular-webfont.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Justanotherhand-Regular';
+src: url('../fonts/Justanotherhand-Regular-webfont.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Lato-Regular';
+src: url('../fonts/Lato-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'ABeeZee-Regular';
+src: url('../fonts/ABeeZee-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'AlfaSlabOne-Regular';
+src: url('../fonts/AlfaSlabOne-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Anton-Regular';
+src: url('../fonts/Anton-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'FredokaOne-Regular';
+src: url('../fonts/FredokaOne-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Overpass-Black';
+src: url('../fonts/Overpass-Black.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Righteous-Regular';
+src: url('../fonts/Righteous-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Signika-Regular';
+src: url('../fonts/Signika-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Teko-Bold';
+src: url('../fonts/Teko-Bold.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'LuckiestGuy-Regular';
+src: url('../fonts/LuckiestGuy-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Baloo-Regular';
+src: url('../fonts/Baloo-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'CarterOne-Regular';
+src: url('../fonts/CarterOne-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Chewy-Regular';
+src: url('../fonts/Chewy-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Courgette-Regular';
+src: url('../fonts/Courgette-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'LexendDeca-Regular';
+src: url('../fonts/LexendDeca-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'RubikMonoOne-Regular';
+src: url('../fonts/RubikMonoOne-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'SigmarOne-Regular';
+src: url('../fonts/SigmarOne-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Viga-Regular';
+src: url('../fonts/Viga-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'Grandstander';
+src: url('../fonts/Grandstander-Black.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
+
+@font-face {
+font-family: 'PassionOne';
+src: url('../fonts/PassionOne-Regular.ttf') format('truetype');
+font-weight: normal;
+font-style: normal;
+}
\ No newline at end of file
diff --git a/src/nineschool-1.0/public/styles/css/style.css b/src/nineschool-1.0/public/styles/css/style.css
new file mode 100644
index 0000000..8525831
--- /dev/null
+++ b/src/nineschool-1.0/public/styles/css/style.css
@@ -0,0 +1,465 @@
+h1{
+ padding: 40px 0px 9px 0px;
+ border-bottom: 1px solid #eee;
+}
+
+.nav a{
+ background: none;
+ color: #CFD8DC;
+ font-size: 14px;
+ padding: 5px 0px 5px 25px;
+ display: block;
+}
+
+
+.page-maxed {
+ max-width:1200px;
+ margin:auto !important;
+}
+
+/* Sidebar Styles */
+.contentsidebar {
+ margin-left:250px;
+}
+
+#sidebar {
+ z-index: 1000;
+ position: fixed;
+ left: 0px;
+ width: 250px;
+ height: 100%;
+ overflow-y: auto;
+ background: #37474F;
+}
+
+#sidebar header {
+ background-color: #263238;
+ font-size: 20px;
+ line-height: 52px;
+ text-align: center;
+}
+
+#sidebar header a {
+ color: #fff;
+ display: block;
+ text-decoration: none;
+}
+
+#sidebar header a:hover {
+ color: #fff;
+}
+
+#sidebar .nav{
+ display: block;
+ margin: 0px 10px;
+}
+
+#sidebar .nav a {
+ padding: 0px 10px 5px 10px;
+}
+
+#sidebar .nav .last{
+ border-bottom: 1px solid #455A64;
+ padding-bottom:5px;
+ margin-bottom: 10px;
+}
+
+#sidebar .title {
+ color: #CFD8DC;
+ font-size: 16px;
+ padding: 0px 10px 0px 10px;
+ display: block;
+ text-transform: uppercase;
+ margin-left: 0px !important;
+ font-weight: bold;
+}
+
+#sidebar .nav a:hover{
+ background: none;
+ color: #ECEFF1;
+}
+
+#sidebar .nav a i{
+ margin-right: 5px;
+ width: 20px;
+ text-align: center;
+}
+
+#sidebar .nav .select-control {
+ padding: 0px 10px 5px 10px;
+ margin-top: -12px;
+}
+
+.avatar {
+ background-color: #343a40;
+ width: 35px;
+ height: 35px;
+ border-radius: 100%;
+ margin-top: -5px;
+}
+
+.avatar.big{
+ width: 90px;
+ height: 90px;
+ margin-bottom: 10px;
+}
+
+@media (max-width: 991px) {
+ .contentsidebar {
+ margin-left: auto;
+ }
+
+ #sidebar {
+ position: static;
+ margin:0px -15px;
+ width: auto;
+ }
+}
+
+a.btn {
+ color:#ffffff;
+}
+
+.btn-link {
+ padding:0px;
+}
+
+.media-body p {
+ font-size :12px;
+ margin-bottom:0px;
+}
+
+@media (min-width: 992px) {
+ #sidebar {
+ display: block;
+ }
+}
+
+
+
+{% if useheader is defined and useheader %}
+#main {
+ padding-top:55px;
+}
+{% endif %}
+
+
+th.dt-center, td.dt-center { text-align: center; }
+
+
+/* heros */
+.heroheader {
+ width:100%;
+ height:800px;
+ position:relative;
+}
+.heroheader div{
+ width:100%;
+ height:100%;
+ background-size: cover;
+ background-position: center;
+ color:#fff;
+ text-align: center;
+}
+
+/* Dots */
+.slick-dotted.slick-slider
+{
+ margin-bottom: 30px;
+}
+
+.slick-dots
+{
+ position: absolute;
+ bottom: -105px;
+
+ display: block;
+
+ width: 100%;
+ padding: 0;
+ margin: 0;
+
+ list-style: none;
+
+ text-align: center;
+}
+.slick-dots li
+{
+ position: relative;
+
+ display: inline-block;
+
+ width: 20px;
+ height: 20px;
+ margin: 0 5px;
+ padding: 0;
+
+ cursor: pointer;
+}
+.slick-dots li button
+{
+ font-size: 0;
+ line-height: 0;
+
+ display: block;
+
+ width: 20px;
+ height: 20px;
+ padding: 5px;
+
+ cursor: pointer;
+
+ color: transparent;
+ border: 0;
+ outline: none;
+ background: transparent;
+}
+.slick-dots li button:hover,
+.slick-dots li button:focus
+{
+ outline: none;
+}
+.slick-dots li button:hover:before,
+.slick-dots li button:focus:before
+{
+ opacity: 1;
+}
+.slick-dots li button:before
+{
+ font-family: 'slick';
+ font-size: 6px;
+ line-height: 20px;
+
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ width: 20px;
+ height: 20px;
+
+ content: '•';
+ text-align: center;
+
+ opacity: .25;
+ color: black;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.slick-dots li.slick-active button:before
+{
+ opacity: .75;
+ color: black;
+}
+
+.slick-dotted.slick-slider{margin-bottom:0px;}
+.slick-dots {
+ position: absolute;
+ top: 135px;
+ left:46px;
+ text-align:left;
+ z-index: 9100;
+ bottom:unset;
+ width:auto;
+}
+.heroheader-dot { color:#fff; }
+
+
+.herobox {
+ position:absolute;
+ float: left;
+ top: 0;
+ bottom: 0;
+ left: -200px;
+ z-index: 8000;
+ padding: 0;
+ text-align: center;
+ text-shadow: none;
+ background-color: rgba(0,0,0,0.7);
+ height: auto;
+ width: 45%;
+ box-shadow: 0px -1px 2px rgba(0,0,0,0.5);
+ margin: 0 auto;
+ //opacity: 0.9;
+ transform-origin: 50% 50%;
+ transform: skew(-20deg);
+ -webkit-transform: skew(-20deg);
+ -moz-transform: skew(-20deg);
+ -o-transform: skew(-20deg);
+ -ms-transform: skew(-20deg);
+ border-left: 1px solid #fff;
+ border-right: 1px solid #fff;
+}
+
+.herotitle {
+ text-align: left;
+ position:absolute;
+ //width:100%;
+ top: 80px;
+ left:50px;
+ z-index: 9000;
+}
+
+.herotitle h1 {
+ padding:0px;
+ border:none;
+}
+
+.heromenu {
+ padding-top: 30px;
+ font-size: 20px;
+}
+
+.herofloatmenu .avatar {
+ width: 20px;
+ height: 20px;
+ margin: 3px 3px 0px 0px;
+}
+.herofloatmenu a:hover {
+ text-decoration: none;
+}
+
+.heromenu .linkmenu {
+ font-size:16px;
+ padding-left: 5px;
+}
+
+.heromenu .linkmenu a {
+ margin-right:5px;
+}
+
+.herologo {
+ position: absolute;
+ top: 0px;
+ text-align: center;
+ width: 100%;
+}
+
+.herologo img {max-height:200px;}
+
+@media (max-width: 980px) {
+ .herobox { display: none; }
+ .herotitle { width:100%; top: 70px; left:0px; text-align:center; }
+ .slick-dots { top: 120px; left: 0px; text-align: center; width: 100%; }
+ .heromenu .facatmenu {display: none;}
+ .catmenu { display:none }
+ .linkmenu { display:none }
+
+ .herofloatmenu a {
+ font-size: 40px;
+ }
+
+ .herofloatmenu .avatar {
+ height: 40px;
+ width:40px;
+ margin-top:15px;
+ }
+}
+
+.grid-sizer { width: 10%; margin-bottom: 0%;float:left;}
+.grid-item-size { width: 10%; margin-bottom: 0%;float:left;}
+.grid-item-size-2 { width: 20%; margin-bottom: 0%;float:left;}
+.grid-item-size-3 { width: 30%; margin-bottom: 0%;float:left;}
+.grid-item-size-4 { width: 40%; margin-bottom: 0%;float:left;}
+.grid-item-size-5 { width: 40%; margin-bottom: 0%;float:left;}
+.grid-item-size-6 { width: 60%; margin-bottom: 0%;float:left;}
+.grid-item-size-7 { width: 70%; margin-bottom: 0%;float:left;}
+.grid-item-size-8 { width: 80%; margin-bottom: 0%;float:left;}
+.grid-item-size-9 { width: 90%; margin-bottom: 0%;float:left;}
+.grid-item-full { width: 100%; margin-bottom: 0%; font-size:20px;float:left; }
+.grid-item-full h1 {margin: 0; border:none; padding: 20px 0px 0px 10px; }
+.gutter-sizer { width: 0%;float:left; }
+@media (max-width: 980px) {
+ .grid-sizer { width: 50%; margin-bottom: 0%;}
+ .grid-item-size { width: 50%; margin-bottom: 0%;}
+}
+
+
+
+
+
+.foliomenu {
+ position: fixed;
+ width:100%;
+ height:60px;
+ background-color: var(--colorbgbodydark) ;
+ z-index: 100000;
+ display:none;
+ padding-left:10px;
+ border-bottom: 1px solid var(--colorftbodydark);
+}
+
+.foliomenu .logo { float:left; height:40px; margin-top:7px }
+.foliomenu .avatar { height: 20px; margin: 3px 3px 0px 0px; width: 20px; }
+.foliomenu div { padding: 10px; line-height:35px; float:left;}
+.foliomenu a {
+ color: var(--colorftbodydark);
+ font-size: 15px;
+}
+.foliomenu .float-right a:hover {
+ text-decoration: none;
+}
+
+.foliomenu .fa { font-size: 14px; color: var(--colorftbodydark);}
+
+.foliotop {
+ float:right;
+ position:fixed;
+ bottom: 10px;
+ right:10px;
+ z-index: 100000;
+ background-color: var(--colorbgbodydark) ;
+ padding:10px;
+ border-radius: 100%;
+ width:55px;
+ height:55px;
+ text-align: center;
+ line-height: 28px;
+ border: 1px solid var(--colorbgbodylight);
+ display:none;
+}
+.foliotop a {
+ color: var(--colorftbodydark);
+ font-size: 25px;
+}
+
+@media (max-width: 980px) {
+
+ .herofloatmenu {
+ display:none;
+ }
+
+ .foliomenu {
+ display: block!important;
+ }
+
+ .foliomenu a {
+ font-size:30px;
+ }
+
+ .foliomenu .float-right a {
+ margin-top: -8px;
+ }
+ .foliomenu .float-right img {
+ height:35px;
+ width:35px;
+ margin-top:0px;
+ }
+ .foliomenu .float-right .fa {
+ font-size:30px!important;
+ }
+}
+
+.linkurl a {
+ background-color: var(--colorbgbodylight) ;
+ color: var(--colorftbodylight)!important;
+ font-size: 14px;
+ padding: 5px;
+ display: inline-block;
+ margin: 0px 10px 10px 0px;
+}
+
+.contactdescription {
+ max-width:300px;
+ text-align:justify;
+}
\ No newline at end of file
diff --git a/src/nineschool-1.0/public/styles/fonts/ABeeZee-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/ABeeZee-Regular.ttf
new file mode 100644
index 0000000..644651b
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/ABeeZee-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Acme-Regular-webfont.ttf b/src/nineschool-1.0/public/styles/fonts/Acme-Regular-webfont.ttf
new file mode 100644
index 0000000..3b09df5
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Acme-Regular-webfont.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/AlfaSlabOne-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/AlfaSlabOne-Regular.ttf
new file mode 100644
index 0000000..629888b
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/AlfaSlabOne-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Anton-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/Anton-Regular.ttf
new file mode 100644
index 0000000..18d0209
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Anton-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Baloo-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/Baloo-Regular.ttf
new file mode 100644
index 0000000..3cc9930
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Baloo-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Bebas-webfont.ttf b/src/nineschool-1.0/public/styles/fonts/Bebas-webfont.ttf
new file mode 100644
index 0000000..d5cab64
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Bebas-webfont.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/CarterOne-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/CarterOne-Regular.ttf
new file mode 100644
index 0000000..468cbe0
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/CarterOne-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Chewy-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/Chewy-Regular.ttf
new file mode 100644
index 0000000..4bfa56a
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Chewy-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Courgette-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/Courgette-Regular.ttf
new file mode 100644
index 0000000..055faac
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Courgette-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/FredokaOne-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/FredokaOne-Regular.ttf
new file mode 100644
index 0000000..0cdf5ae
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/FredokaOne-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Grandstander-Black.ttf b/src/nineschool-1.0/public/styles/fonts/Grandstander-Black.ttf
new file mode 100644
index 0000000..d101c10
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Grandstander-Black.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Justanotherhand-Regular-webfont.ttf b/src/nineschool-1.0/public/styles/fonts/Justanotherhand-Regular-webfont.ttf
new file mode 100644
index 0000000..84d0ba8
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Justanotherhand-Regular-webfont.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Lato-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/Lato-Regular.ttf
new file mode 100644
index 0000000..04ea8ef
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Lato-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/LexendDeca-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/LexendDeca-Regular.ttf
new file mode 100644
index 0000000..6b42154
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/LexendDeca-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/LuckiestGuy-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/LuckiestGuy-Regular.ttf
new file mode 100644
index 0000000..8bc3f11
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/LuckiestGuy-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Overpass-Black.ttf b/src/nineschool-1.0/public/styles/fonts/Overpass-Black.ttf
new file mode 100644
index 0000000..9f15dd3
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Overpass-Black.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/PassionOne-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/PassionOne-Regular.ttf
new file mode 100644
index 0000000..ab39d26
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/PassionOne-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Peacesans-webfont.ttf b/src/nineschool-1.0/public/styles/fonts/Peacesans-webfont.ttf
new file mode 100644
index 0000000..7513e6c
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Peacesans-webfont.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Redressed-webfont.ttf b/src/nineschool-1.0/public/styles/fonts/Redressed-webfont.ttf
new file mode 100644
index 0000000..47cddf8
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Redressed-webfont.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Righteous-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/Righteous-Regular.ttf
new file mode 100644
index 0000000..cc556d5
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Righteous-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Roboto-Regular-webfont.ttf b/src/nineschool-1.0/public/styles/fonts/Roboto-Regular-webfont.ttf
new file mode 100644
index 0000000..30be1e4
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Roboto-Regular-webfont.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/RubikMonoOne-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/RubikMonoOne-Regular.ttf
new file mode 100644
index 0000000..ee6af94
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/RubikMonoOne-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/SigmarOne-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/SigmarOne-Regular.ttf
new file mode 100644
index 0000000..e2b4bd4
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/SigmarOne-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Signika-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/Signika-Regular.ttf
new file mode 100644
index 0000000..7e0f5c7
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Signika-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Snickles-webfont.ttf b/src/nineschool-1.0/public/styles/fonts/Snickles-webfont.ttf
new file mode 100644
index 0000000..a5ee502
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Snickles-webfont.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Teko-Bold.ttf b/src/nineschool-1.0/public/styles/fonts/Teko-Bold.ttf
new file mode 100644
index 0000000..b226a21
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Teko-Bold.ttf differ
diff --git a/src/nineschool-1.0/public/styles/fonts/Viga-Regular.ttf b/src/nineschool-1.0/public/styles/fonts/Viga-Regular.ttf
new file mode 100644
index 0000000..a4be8f1
Binary files /dev/null and b/src/nineschool-1.0/public/styles/fonts/Viga-Regular.ttf differ
diff --git a/src/nineschool-1.0/public/themes/look.png b/src/nineschool-1.0/public/themes/look.png
new file mode 100644
index 0000000..1a9fc5f
Binary files /dev/null and b/src/nineschool-1.0/public/themes/look.png differ
diff --git a/src/nineschool-1.0/public/themes/look.xcf b/src/nineschool-1.0/public/themes/look.xcf
new file mode 100644
index 0000000..8c6bf68
Binary files /dev/null and b/src/nineschool-1.0/public/themes/look.xcf differ
diff --git a/src/nineschool-1.0/public/themes/nineblue/info.yml b/src/nineschool-1.0/public/themes/nineblue/info.yml
new file mode 100644
index 0000000..91c4bd2
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/nineblue/info.yml
@@ -0,0 +1,3 @@
+name: Nineblue
+author: Arnaud Fornerot
+version: 1.0
\ No newline at end of file
diff --git a/src/nineschool-1.0/public/themes/nineblue/local.js b/src/nineschool-1.0/public/themes/nineblue/local.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/nineschool-1.0/public/themes/nineblue/look.png b/src/nineschool-1.0/public/themes/nineblue/look.png
new file mode 100644
index 0000000..4ad7124
Binary files /dev/null and b/src/nineschool-1.0/public/themes/nineblue/look.png differ
diff --git a/src/nineschool-1.0/public/themes/nineblue/style.css b/src/nineschool-1.0/public/themes/nineblue/style.css
new file mode 100644
index 0000000..e95662e
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/nineblue/style.css
@@ -0,0 +1,43 @@
+:root{
+ --colorbgbodydark: #3a539b;
+ --colorfttitlelight: #3a539b;
+
+ /* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
+ --colorbgbodylight: #;
+ --colorbgbodydark: #;
+ --colorfttitlelight: #;
+ --colorfttitledark: #;
+ --colorftbodylight: #;
+ --colorftbodydark: #;
+ --fontbody: "";
+ --fonttitle: "";
+ --fontsizeh1: px;
+ --fontsizeh2: px;
+ --fontsizeh3: px;
+ --fontsizeh4: px;
+
+ --colorbgbodylight-darker: #;
+ --colorfttitlelight-darker: #;
+}
+ */
+}
+
+/* Puis sur classer l'ensemble de la feuille de style */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/nineschool-1.0/public/themes/ninedark/info.yml b/src/nineschool-1.0/public/themes/ninedark/info.yml
new file mode 100644
index 0000000..6d46bd8
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/ninedark/info.yml
@@ -0,0 +1,3 @@
+name: Ninedark
+author: Arnaud Fornerot
+version: 1.0
\ No newline at end of file
diff --git a/src/nineschool-1.0/public/themes/ninedark/local.js b/src/nineschool-1.0/public/themes/ninedark/local.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/nineschool-1.0/public/themes/ninedark/look.png b/src/nineschool-1.0/public/themes/ninedark/look.png
new file mode 100644
index 0000000..533897f
Binary files /dev/null and b/src/nineschool-1.0/public/themes/ninedark/look.png differ
diff --git a/src/nineschool-1.0/public/themes/ninedark/style.css b/src/nineschool-1.0/public/themes/ninedark/style.css
new file mode 100644
index 0000000..27a4766
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/ninedark/style.css
@@ -0,0 +1,44 @@
+:root{
+ --colorbgbodydark: #2e3131;
+ --colorfttitlelight: #2e3131;
+ --colorfttitlelight-darker: #95a5a6;
+
+ /* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
+ --colorbgbodylight: #;
+ --colorbgbodydark: #;
+ --colorfttitlelight: #;
+ --colorfttitledark: #;
+ --colorftbodylight: #;
+ --colorftbodydark: #;
+ --fontbody: "";
+ --fonttitle: "";
+ --fontsizeh1: px;
+ --fontsizeh2: px;
+ --fontsizeh3: px;
+ --fontsizeh4: px;
+
+ --colorbgbodylight-darker: #;
+ --colorfttitlelight-darker: #;
+}
+ */
+}
+
+/* Puis sur classer l'ensemble de la feuille de style */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/nineschool-1.0/public/themes/ninegray/info.yml b/src/nineschool-1.0/public/themes/ninegray/info.yml
new file mode 100644
index 0000000..c60fd67
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/ninegray/info.yml
@@ -0,0 +1,3 @@
+name: Ninegray
+author: Arnaud Fornerot
+version: 1.0
\ No newline at end of file
diff --git a/src/nineschool-1.0/public/themes/ninegray/local.js b/src/nineschool-1.0/public/themes/ninegray/local.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/nineschool-1.0/public/themes/ninegray/look.png b/src/nineschool-1.0/public/themes/ninegray/look.png
new file mode 100644
index 0000000..e6a1af6
Binary files /dev/null and b/src/nineschool-1.0/public/themes/ninegray/look.png differ
diff --git a/src/nineschool-1.0/public/themes/ninegray/style.css b/src/nineschool-1.0/public/themes/ninegray/style.css
new file mode 100644
index 0000000..25d5baf
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/ninegray/style.css
@@ -0,0 +1,43 @@
+:root{
+ --colorbgbodydark: #6c7a89;
+ --colorfttitlelight: #6c7a89;
+
+ /* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
+ --colorbgbodylight: #;
+ --colorbgbodydark: #;
+ --colorfttitlelight: #;
+ --colorfttitledark: #;
+ --colorftbodylight: #;
+ --colorftbodydark: #;
+ --fontbody: "";
+ --fonttitle: "";
+ --fontsizeh1: px;
+ --fontsizeh2: px;
+ --fontsizeh3: px;
+ --fontsizeh4: px;
+
+ --colorbgbodylight-darker: #;
+ --colorfttitlelight-darker: #;
+}
+ */
+}
+
+/* Puis sur classer l'ensemble de la feuille de style */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/nineschool-1.0/public/themes/ninegreen/info.yml b/src/nineschool-1.0/public/themes/ninegreen/info.yml
new file mode 100644
index 0000000..68634e9
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/ninegreen/info.yml
@@ -0,0 +1,3 @@
+name: Ninegreen
+author: Arnaud Fornerot
+version: 1.0
\ No newline at end of file
diff --git a/src/nineschool-1.0/public/themes/ninegreen/local.js b/src/nineschool-1.0/public/themes/ninegreen/local.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/nineschool-1.0/public/themes/ninegreen/look.png b/src/nineschool-1.0/public/themes/ninegreen/look.png
new file mode 100644
index 0000000..e2f114e
Binary files /dev/null and b/src/nineschool-1.0/public/themes/ninegreen/look.png differ
diff --git a/src/nineschool-1.0/public/themes/ninegreen/style.css b/src/nineschool-1.0/public/themes/ninegreen/style.css
new file mode 100644
index 0000000..cd90511
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/ninegreen/style.css
@@ -0,0 +1,43 @@
+:root{
+ --colorbgbodydark: #1e824c;
+ --colorfttitlelight: #1e824c;
+
+ /* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
+ --colorbgbodylight: #;
+ --colorbgbodydark: #;
+ --colorfttitlelight: #;
+ --colorfttitledark: #;
+ --colorftbodylight: #;
+ --colorftbodydark: #;
+ --fontbody: "";
+ --fonttitle: "";
+ --fontsizeh1: px;
+ --fontsizeh2: px;
+ --fontsizeh3: px;
+ --fontsizeh4: px;
+
+ --colorbgbodylight-darker: #;
+ --colorfttitlelight-darker: #;
+}
+ */
+}
+
+/* Puis sur classer l'ensemble de la feuille de style */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/nineschool-1.0/public/themes/nineorange/info.yml b/src/nineschool-1.0/public/themes/nineorange/info.yml
new file mode 100644
index 0000000..93d1bbb
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/nineorange/info.yml
@@ -0,0 +1,3 @@
+name: Nineorange
+author: Arnaud Fornerot
+version: 1.0
\ No newline at end of file
diff --git a/src/nineschool-1.0/public/themes/nineorange/local.js b/src/nineschool-1.0/public/themes/nineorange/local.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/nineschool-1.0/public/themes/nineorange/look.png b/src/nineschool-1.0/public/themes/nineorange/look.png
new file mode 100644
index 0000000..4106474
Binary files /dev/null and b/src/nineschool-1.0/public/themes/nineorange/look.png differ
diff --git a/src/nineschool-1.0/public/themes/nineorange/style.css b/src/nineschool-1.0/public/themes/nineorange/style.css
new file mode 100644
index 0000000..2d3a355
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/nineorange/style.css
@@ -0,0 +1,43 @@
+:root{
+ --colorbgbodydark: #f15a22;
+ --colorfttitlelight: #f15a22;
+
+ /* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
+ --colorbgbodylight: #;
+ --colorbgbodydark: #;
+ --colorfttitlelight: #;
+ --colorfttitledark: #;
+ --colorftbodylight: #;
+ --colorftbodydark: #;
+ --fontbody: "";
+ --fonttitle: "";
+ --fontsizeh1: px;
+ --fontsizeh2: px;
+ --fontsizeh3: px;
+ --fontsizeh4: px;
+
+ --colorbgbodylight-darker: #;
+ --colorfttitlelight-darker: #;
+}
+ */
+}
+
+/* Puis sur classer l'ensemble de la feuille de style */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/nineschool-1.0/public/themes/ninered/info.yml b/src/nineschool-1.0/public/themes/ninered/info.yml
new file mode 100644
index 0000000..6d111eb
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/ninered/info.yml
@@ -0,0 +1,3 @@
+name: Ninered
+author: Arnaud Fornerot
+version: 1.0
\ No newline at end of file
diff --git a/src/nineschool-1.0/public/themes/ninered/local.js b/src/nineschool-1.0/public/themes/ninered/local.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/nineschool-1.0/public/themes/ninered/look.png b/src/nineschool-1.0/public/themes/ninered/look.png
new file mode 100644
index 0000000..5d7452e
Binary files /dev/null and b/src/nineschool-1.0/public/themes/ninered/look.png differ
diff --git a/src/nineschool-1.0/public/themes/ninered/style.css b/src/nineschool-1.0/public/themes/ninered/style.css
new file mode 100644
index 0000000..204f519
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/ninered/style.css
@@ -0,0 +1,43 @@
+:root{
+ --colorbgbodydark: #96281b;
+ --colorfttitlelight: #96281b;
+
+ /* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
+ --colorbgbodylight: #;
+ --colorbgbodydark: #;
+ --colorfttitlelight: #;
+ --colorfttitledark: #;
+ --colorftbodylight: #;
+ --colorftbodydark: #;
+ --fontbody: "";
+ --fonttitle: "";
+ --fontsizeh1: px;
+ --fontsizeh2: px;
+ --fontsizeh3: px;
+ --fontsizeh4: px;
+
+ --colorbgbodylight-darker: #;
+ --colorfttitlelight-darker: #;
+}
+ */
+}
+
+/* Puis sur classer l'ensemble de la feuille de style */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/nineschool-1.0/public/themes/nineyellow/info.yml b/src/nineschool-1.0/public/themes/nineyellow/info.yml
new file mode 100644
index 0000000..09debb8
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/nineyellow/info.yml
@@ -0,0 +1,3 @@
+name: Nineyellow
+author: Arnaud Fornerot
+version: 1.0
\ No newline at end of file
diff --git a/src/nineschool-1.0/public/themes/nineyellow/local.js b/src/nineschool-1.0/public/themes/nineyellow/local.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/nineschool-1.0/public/themes/nineyellow/look.png b/src/nineschool-1.0/public/themes/nineyellow/look.png
new file mode 100644
index 0000000..2fac204
Binary files /dev/null and b/src/nineschool-1.0/public/themes/nineyellow/look.png differ
diff --git a/src/nineschool-1.0/public/themes/nineyellow/style.css b/src/nineschool-1.0/public/themes/nineyellow/style.css
new file mode 100644
index 0000000..e7427b2
--- /dev/null
+++ b/src/nineschool-1.0/public/themes/nineyellow/style.css
@@ -0,0 +1,43 @@
+:root{
+ --colorbgbodydark: #f7ca18;
+ --colorfttitlelight: #171717;
+
+ /* Vous pouvez forcer l'ensemble de ces variables ou laisser la valeur par défaut
+ --colorbgbodylight: #;
+ --colorbgbodydark: #;
+ --colorfttitlelight: #;
+ --colorfttitledark: #;
+ --colorftbodylight: #;
+ --colorftbodydark: #;
+ --fontbody: "";
+ --fonttitle: "";
+ --fontsizeh1: px;
+ --fontsizeh2: px;
+ --fontsizeh3: px;
+ --fontsizeh4: px;
+
+ --colorbgbodylight-darker: #;
+ --colorfttitlelight-darker: #;
+}
+ */
+}
+
+/* Puis sur classer l'ensemble de la feuille de style */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/nineschool-1.0/scripts/.env.model b/src/nineschool-1.0/scripts/.env.model
index 027a592..6c22fe8 100644
--- a/src/nineschool-1.0/scripts/.env.model
+++ b/src/nineschool-1.0/scripts/.env.model
@@ -52,6 +52,11 @@ CAS_LASTNAME=lastname
CAS_FIRSTNAME=firstname
+# WEBSOCKET
+WSS_USE=0
+WSS_PORT=5586
+
+
# Proxy
PROXY_USE=0
PROXY_HOST=
diff --git a/src/nineschool-1.0/scripts/reconfigure.sh b/src/nineschool-1.0/scripts/reconfigure.sh
index 4442548..0c0f4a0 100755
--- a/src/nineschool-1.0/scripts/reconfigure.sh
+++ b/src/nineschool-1.0/scripts/reconfigure.sh
@@ -6,12 +6,15 @@ cd ${DIR}
cd ..
DIR=$(pwd)
+# Mise en place du fichier d'environnement model
+yes 2>/dev/null | cp $DIR/scripts/.env.model $DIR/.env
+
# Import des env
. $DIR/.env
. $DIR/.env.local
# Déclaration d'un proxy
-if [[ "$PROXY_USE"=="1" ]]
+if [[ "$PROXY_USE" == "1" ]]
then
export HTTP_PROXY="$PROXY_HOST:$PROXY_PORT"
export HTTPS_PROXY="$PROXY_HOST:$PROXY_PORT"
@@ -23,9 +26,6 @@ then
find $DIR/var/log -mindepth 1 -mtime +7 -delete
fi
-# Mise en place du fichier d'environnement model
-yes 2>/dev/null | cp $DIR/scripts/.env.model $DIR/.env
-
# Installation des dépendances composer
echo COMPOSER = Install
composer install --quiet
@@ -34,6 +34,12 @@ php bin/console app:AppInit --env=prod
php bin/console app:CronInit --env=prod
php bin/console app:Script --env=prod
+# Websocket
+if [[ "$WSS_USE" == "1" ]]
+then
+ $DIR/scripts/websocket.sh restart
+fi
+
# Permissions
echo PERMISSIONS
./scripts/perm.sh www-data
diff --git a/src/nineschool-1.0/scripts/websocket.sh b/src/nineschool-1.0/scripts/websocket.sh
new file mode 100755
index 0000000..2bdd9e6
--- /dev/null
+++ b/src/nineschool-1.0/scripts/websocket.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+# Se positionner sur la racine du projet
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+cd ${DIR}
+cd ..
+DIR=$(pwd)
+
+# Import des env
+. $DIR/.env
+. $DIR/.env.local
+
+# Déclaration d'un proxy
+if [[ "$WSS_USE" == "1" ]]
+then
+ # Server Websocket
+ if [[ "$1" != "restartifdown" ]]; then
+ echo WEBSOCKET = STOP
+ pid="$(pgrep -a -f app:Websocket| grep $APP_ALIAS)"
+ if [ -n "${pid}" ]; then
+ IFS=' ' read -r -a array <<< "$pid"
+ kill -9 ${array[0]};
+ fi
+ fi
+
+ # Port LISTEN ?
+ pid="$(pgrep -a -f app:Websocket| grep $APP_ALIAS)"
+ restart="yes"
+ if [ "$1" == "restartifdown" ] && [ -n "${pid}" ] ; then
+ restart="no"
+ fi
+
+ if [ "$restart" == "yes" ] && [ "$1" != "stop" ] ; then
+ echo WEBSOCKET = START
+ bin/console app:Websocket --name $APP_ALIAS & disown
+ fi
+fi
\ No newline at end of file
diff --git a/src/nineschool-1.0/src/Command/AppInitCommand.php b/src/nineschool-1.0/src/Command/AppInitCommand.php
index 4de22cb..f35d9bc 100644
--- a/src/nineschool-1.0/src/Command/AppInitCommand.php
+++ b/src/nineschool-1.0/src/Command/AppInitCommand.php
@@ -9,6 +9,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Console\Input\ArrayInput;
+use Ramsey\Uuid\Uuid;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Id\AssignedGenerator;
@@ -66,6 +67,7 @@ class AppInitCommand extends Command
"appname", // id
"Titre de votre site", // title
"", // value
+ "", // defalut
"string", // type,
true, // visible
true, // changeable
@@ -80,6 +82,7 @@ class AppInitCommand extends Command
"appsubname", // id
"Sous-titre de votre site", // title
"", // value
+ "", // defalut
"string", // type,
true, // visible
true, // changeable
@@ -94,6 +97,7 @@ class AppInitCommand extends Command
"appdescription", // id
"Description de votre site", // title
"", // value
+ "", // defalut
"editor", // type,
true, // visible
true, // changeable
@@ -102,6 +106,22 @@ class AppInitCommand extends Command
"Description de votre site"
);
+ $this->insertConfig(
+ 100, // order
+ "site", // category
+ "apptheme", // id
+ "Thème de votre site", // title
+ "", // value
+ "", // defalut
+ "string", // type,
+ false, // visible
+ true, // changeable
+ false, // required
+ "", // grouped
+ "Thème de votre site"
+ );
+
+
// colorbgbody = Couleur des fonds de page
$this->insertConfig(
1, // order
@@ -109,6 +129,7 @@ class AppInitCommand extends Command
"colorbgbodydark", // id
"Couleur de fond fonçée", // title
"", // value
+ "#2574a9", // defalut
"color", // type,
true, // visible
true, // changeable
@@ -123,6 +144,7 @@ class AppInitCommand extends Command
"colorbgbodylight", // id
"Couleur de fond claire", // title
"", // value
+ "#ffffff", // defalut
"color", // type,
true, // visible
true, // changeable
@@ -138,6 +160,7 @@ class AppInitCommand extends Command
"colorfttitledark", // id
"Couleur des titres sur fond fonçé", // title
"", // value
+ "#ffffff", // defalut
"color", // type,
true, // visible
true, // changeable
@@ -152,6 +175,7 @@ class AppInitCommand extends Command
"colorfttitlelight", // id
"Couleur des titres sur fond claire", // title
"", // value
+ "#2574a9", // defalut
"color", // type,
true, // visible
true, // changeable
@@ -167,6 +191,7 @@ class AppInitCommand extends Command
"colorftbodydark", // id
"Couleur de la police sur fond fonçé", // title
"", // value
+ "#ffffff", // defalut
"color", // type,
true, // visible
true, // changeable
@@ -181,6 +206,7 @@ class AppInitCommand extends Command
"colorftbodylight", // id
"Couleur de la police sur fond claire", // title
"", // value
+ "#343a40", // defalut
"color", // type,
true, // visible
true, // changeable
@@ -196,6 +222,7 @@ class AppInitCommand extends Command
"fonttitle", // id
"Police pour les titres", // title
"", // value
+ "FredokaOne-Regular", // defalut
"font", // type,
true, // visible
true, // changeable
@@ -210,6 +237,7 @@ class AppInitCommand extends Command
"fontbody", // id
"Police principale", // title
"", // value
+ "Roboto-Regular", // defalut
"font", // type,
true, // visible
true, // changeable
@@ -218,6 +246,66 @@ class AppInitCommand extends Command
"Nom de la police principale"
);
+ $this->insertConfig(
+ 3, // order
+ "font", // category
+ "fontsizeh1", // id
+ "Taille des titres h1", // title
+ "", // value
+ "40", // defalut
+ "integer", // type,
+ true, // visible
+ true, // changeable
+ false, // required
+ "", // grouped
+ "Taille des titres h1 en px"
+ );
+
+ $this->insertConfig(
+ 4, // order
+ "font", // category
+ "fontsizeh2", // id
+ "Taille des titres h2", // title
+ "", // value
+ "32", // defalut
+ "integer", // type,
+ true, // visible
+ true, // changeable
+ false, // required
+ "", // grouped
+ "Taille des titres h2 en px"
+ );
+
+ $this->insertConfig(
+ 5, // order
+ "font", // category
+ "fontsizeh3", // id
+ "Taille des titres h3", // title
+ "", // value
+ "28", // defalut
+ "integer", // type,
+ true, // visible
+ true, // changeable
+ false, // required
+ "", // grouped
+ "Taille des titres h3 en px"
+ );
+
+ $this->insertConfig(
+ 6, // order
+ "font", // category
+ "fontsizeh4", // id
+ "Taille des titres h4", // title
+ "", // value
+ "24", // defalut
+ "integer", // type,
+ true, // visible
+ true, // changeable
+ false, // required
+ "", // grouped
+ "Taille des titres h4 en px"
+ );
+
// logo =
$this->insertConfig(
1, // order
@@ -225,6 +313,7 @@ class AppInitCommand extends Command
"logodark", // id
"Logo sur fond fonçé", // title
"", // value
+ "", // defalut
"logo", // type,
true, // visible
true, // changeable
@@ -239,6 +328,7 @@ class AppInitCommand extends Command
"logolight", // id
"Logo sur fond clair", // title
"", // value
+ "", // defalut
"logo", // type,
true, // visible
true, // changeable
@@ -265,6 +355,8 @@ class AppInitCommand extends Command
if(!$entity) {
$this->writelnred('Création du compte admin par défaut avec password admin - Veuillez modifier votre password admin après connexion');
$entity = new User;
+ $key = Uuid::uuid4();
+
$entity->setId(0);
$entity->setUsername("admin");
$entity->setPassword("admin");
@@ -273,6 +365,7 @@ class AppInitCommand extends Command
$entity->setEmail($this->appmailnoreply);
$entity->setRoles(["ROLE_ADMIN"]);
$entity->setAvatar("admin.jpg");
+ $entity->setApiKey($key);
$this->em->persist($entity);
}
@@ -281,7 +374,7 @@ class AppInitCommand extends Command
}
- protected function insertConfig($order,$category,$id,$title,$value,$type,$visible,$changeable,$required,$grouped,$help) {
+ protected function insertConfig($order,$category,$id,$title,$value,$default,$type,$visible,$changeable,$required,$grouped,$help) {
$entity=$this->em->getRepository("App:Config")->find($id);
if(!$entity) {
$entity= new Config();
@@ -289,6 +382,7 @@ class AppInitCommand extends Command
$entity->setValue($value);
}
+ $entity->setDefault($default);
$entity->setCategory($category);
$entity->setOrder($order);
$entity->setTitle($title);
diff --git a/src/nineschool-1.0/src/Command/ScriptCommand.php b/src/nineschool-1.0/src/Command/ScriptCommand.php
index 43227f0..974272d 100644
--- a/src/nineschool-1.0/src/Command/ScriptCommand.php
+++ b/src/nineschool-1.0/src/Command/ScriptCommand.php
@@ -3,15 +3,11 @@
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
-use Symfony\Component\Console\Input\ArrayInput;
-
-use Doctrine\ORM\Mapping\ClassMetadata;
-use Doctrine\ORM\Id\AssignedGenerator;
+use Ramsey\Uuid\Uuid;
use App\Entity\Script;
@@ -49,7 +45,7 @@ class ScriptCommand extends Command
$output->writeln('APP = Scripts');
- //$this->callscript("test");
+ $this->callscript("addapikey");
$output->writeln('');
@@ -61,7 +57,7 @@ class ScriptCommand extends Command
private function callscript($name) {
$script=$this->em->getRepository("App:Script")->findOneBy(["name"=>$name]);
if(!$script) {
- $this->writelnred("== SCRIPT = ".$name);
+ //$this->writelnred("== SCRIPT = ".$name);
$this->$name();
$script=new Script();
@@ -72,8 +68,14 @@ class ScriptCommand extends Command
}
}
- private function test() {
- $this->writeln("TEST");
+ private function addapikey() {
+ $users=$this->em->getRepository("App:User")->findBy(["apikey"=>null]);
+ foreach($users as $user) {
+ $key = Uuid::uuid4();
+ $user->setApikey($key);
+ $this->em->persist($user);
+ $this->em->flush();
+ }
}
diff --git a/src/nineschool-1.0/src/Command/SynchroUsersCommand.php b/src/nineschool-1.0/src/Command/SynchroUsersCommand.php
index 81854bb..43e2980 100644
--- a/src/nineschool-1.0/src/Command/SynchroUsersCommand.php
+++ b/src/nineschool-1.0/src/Command/SynchroUsersCommand.php
@@ -10,6 +10,7 @@ use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
+use Ramsey\Uuid\Uuid;
use App\Entity\Group as Group;
use App\Entity\User as User;
@@ -525,9 +526,11 @@ class SynchroUsersCommand extends Command
if(!$simulate) {
if(!$user) {
$user = new User();
+ $key = Uuid::uuid4();
$user->setUsername($apiuser->username);
$user->setPassword("NOPASSWORD");
+ $user->setApiKey($key);
}
$user->setLastname($apiuser->lastname);
diff --git a/src/nineschool-1.0/src/Command/WebsocketServerCommand.php b/src/nineschool-1.0/src/Command/WebsocketServerCommand.php
new file mode 100644
index 0000000..b0a6d0c
--- /dev/null
+++ b/src/nineschool-1.0/src/Command/WebsocketServerCommand.php
@@ -0,0 +1,53 @@
+container = $container;
+ $this->em = $em;
+ }
+
+ protected function configure()
+ {
+ $this
+ ->setName('app:Websocket')
+ ->setDescription('Lauch Websocket server')
+ ->setHelp('Lauch Websocket server')
+ ->addOption('name',null,InputOption::VALUE_REQUIRED,'Websocket server name',null)
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $port = $this->container->getParameter('wssport');
+
+ $output->writeln("Starting server on port " . $port);
+ $server = IoServer::factory(
+ new HttpServer(
+ new WsServer(
+ new MessageHandler($this->container,$this->em)
+ )
+ ),
+ $port
+ );
+ $server->run();
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/src/nineschool-1.0/src/Controller/CropController.php b/src/nineschool-1.0/src/Controller/CropController.php
index 84275c4..27b0147 100644
--- a/src/nineschool-1.0/src/Controller/CropController.php
+++ b/src/nineschool-1.0/src/Controller/CropController.php
@@ -7,9 +7,18 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\HttpKernel\KernelInterface;
+use Symfony\Component\HttpFoundation\Response;
class CropController extends AbstractController
{
+ private $appKernel;
+
+ public function __construct(KernelInterface $appKernel)
+ {
+ $this->appKernel = $appKernel;
+ }
+
// Etape 01 - Téléchargement de l'image
public function crop01($type,$reportinput)
{
@@ -50,7 +59,7 @@ class CropController extends AbstractController
$max_width=1600;
$ratio="16:9";
break;
-
+
case "image":
$max_height=1600;
$max_width=1600;
@@ -70,7 +79,7 @@ class CropController extends AbstractController
// Construction du formulaire
$submited=false;
$form = $this->createFormBuilder()
- ->add('submit',SubmitType::class,array("label" => "Valider","attr" => array("class" => "btn btn-success","onclick" => "reportThumb()")))
+ ->add('submit',SubmitType::class,array("label" => "Valider","attr" => array("class" => "btn btn-success")))
->add('x',HiddenType::class)
->add('y',HiddenType::class)
->add('w',HiddenType::class)
@@ -105,6 +114,32 @@ class CropController extends AbstractController
]);
}
+ // Upload ckeditor
+ public function ckupload(Request $request) {
+ // Fichier temporaire uploadé
+ $tmpfile = $request->files->get('upload');
+ $extention = $tmpfile->getClientOriginalExtension();
+
+ // Répertoire de Destination
+ $fs = new Filesystem();
+ $rootdir = $this->appKernel->getProjectDir()."/public";
+ $fs->mkdir($rootdir."/uploads/ckeditor");
+
+ // Fichier cible
+ $targetName = uniqid().".".$extention;
+ $targetFile = $rootdir."/uploads/ckeditor/".$targetName;
+ $targetUrl = "/".$this->getParameter('appAlias')."/uploads/ckeditor/".$targetName;
+ $message = "";
+
+ move_uploaded_file($tmpfile,$targetFile);
+
+ $output["uploaded"]=1;
+ $output["fileName"]=$targetName;
+ $output["url"]=$targetUrl;
+
+ return new Response(json_encode($output));
+ }
+
// Calcul de la hauteur
protected function getHeight($image) {
$size = getimagesize($image);
diff --git a/src/nineschool-1.0/src/Controller/SecurityController.php b/src/nineschool-1.0/src/Controller/SecurityController.php
index 3380b05..d420d60 100755
--- a/src/nineschool-1.0/src/Controller/SecurityController.php
+++ b/src/nineschool-1.0/src/Controller/SecurityController.php
@@ -12,6 +12,7 @@ use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
+use Ramsey\Uuid\Uuid;
class SecurityController extends AbstractController
{
@@ -37,9 +38,6 @@ class SecurityController extends AbstractController
}
public function loginMYSQL(Request $request, AuthenticationUtils $authenticationUtils) {
- // activer les activités par défaut
- $this->get('session')->set('activeactivity',true);
-
return $this->render('Home/login.html.twig', array(
'last_username' => $authenticationUtils->getLastUsername(),
'error' => $authenticationUtils->getLastAuthenticationError(),
@@ -87,11 +85,13 @@ class SecurityController extends AbstractController
if (!$exists) {
$user = new User();
+ $key = Uuid::uuid4();
$user->setUsername($username);
$user->setLastname($lastname);
$user->setFirstname($firstname);
$user->setEmail($email);
+ $user->setApiKey($key);
$user->setPassword("CASPWD-".$username);
$user->setSalt("CASPWD-".$username);
@@ -120,8 +120,6 @@ class SecurityController extends AbstractController
$this->updateLDAP($user);
}
- // activer les activités par défaut
- $this->get('session')->set('activeactivity',true);
// Autoconnexion
// Récupérer le token de l'utilisateur
diff --git a/src/nineschool-1.0/src/Controller/ThemeController.php b/src/nineschool-1.0/src/Controller/ThemeController.php
new file mode 100644
index 0000000..9c56866
--- /dev/null
+++ b/src/nineschool-1.0/src/Controller/ThemeController.php
@@ -0,0 +1,67 @@
+
+namespace App\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Form\FormError;
+use Symfony\Component\Finder\Finder;
+use Symfony\Component\Yaml\Yaml;
+
+use App\Entity\Config as Entity;
+use App\Form\ConfigType as Form;
+
+class ThemeController extends AbstractController
+{
+ private $data = "config";
+ private $route = "app_config";
+ private $render = "Config/";
+ private $entity = "App:Config";
+
+ public function list(Request $request)
+ {
+ $session=$this->get('session');
+ $finder = new Finder();
+
+ $dir = $this->getParameter('kernel.project_dir')."/public/themes";
+ $url="/".$this->getParameter('appAlias')."/themes";
+
+ $finder->in($dir)->directories()->depth('== 0');
+ $themes=[];
+ $themes[""]["dir"]="";
+ $themes[""]["url"]=$url;
+ $themes[""]["name"]="Thème par défaut";
+
+ foreach ($finder as $file) {
+ $key=$file->getRelativePathname();
+ $themes[$key]["dir"]=$key;
+ $themes[$key]["url"]=$url."/".$key;
+
+ $yml=Yaml::parseFile($dir.'/'.$key.'/info.yml');
+ $themes[$key]["name"]=$yml["name"];
+ }
+
+ $current=$session->get("apptheme");
+ $currentheme=$themes[$current];
+ unset($themes[$current]);
+
+ return $this->render('Theme/list.html.twig',[
+ 'useheader' => true,
+ 'usesidebar' => true,
+ 'currentheme' => $currentheme,
+ 'themes' => $themes
+ ]);
+ }
+
+ public function select(Request $request,$name)
+ {
+ $em = $this->getDoctrine()->getManager();
+ $config=$em->getRepository("App:Config")->findoneBy(["id"=>"apptheme"]);
+ $config->setValue($name);
+
+ $em->persist($config);
+ $em->flush();
+
+ return $this->redirectToRoute("app_theme");
+ }
+}
diff --git a/src/nineschool-1.0/src/Controller/UserController.php b/src/nineschool-1.0/src/Controller/UserController.php
index b93c83d..434a28d 100755
--- a/src/nineschool-1.0/src/Controller/UserController.php
+++ b/src/nineschool-1.0/src/Controller/UserController.php
@@ -5,7 +5,7 @@ namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\Form\FormError;
+use Ramsey\Uuid\Uuid;
use App\Entity\User as Entity;
use App\Form\UserType as Form;
@@ -37,7 +37,9 @@ class UserController extends AbstractController
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
+ $key = Uuid::uuid4();
$data->setAvatar("noavatar.png");
+ $data->setApiKey($key);
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit","appAuth"=>$this->getParameter("appAuth"),"appMasteridentity"=>$this->getParameter("appMasteridentity")));
diff --git a/src/nineschool-1.0/src/Controller/WebsocketController.php b/src/nineschool-1.0/src/Controller/WebsocketController.php
new file mode 100644
index 0000000..a53dac2
--- /dev/null
+++ b/src/nineschool-1.0/src/Controller/WebsocketController.php
@@ -0,0 +1,13 @@
+render('Websocket/sample.html.twig');
+ }
+}
diff --git a/src/nineschool-1.0/src/Entity/Config.php b/src/nineschool-1.0/src/Entity/Config.php
index 79fb6d9..f5c0d47 100644
--- a/src/nineschool-1.0/src/Entity/Config.php
+++ b/src/nineschool-1.0/src/Entity/Config.php
@@ -27,6 +27,11 @@ class Config
*/
protected $value;
+ /**
+ * @ORM\Column(name="defaultvalue", type="text")
+ */
+ protected $default;
+
/**
* @ORM\Column(name="roworder", type="string")
*/
@@ -199,4 +204,16 @@ class Config
return $this;
}
+ public function getDefault(): ?string
+ {
+ return $this->default;
+ }
+
+ public function setDefault(string $default): self
+ {
+ $this->default = $default;
+
+ return $this;
+ }
+
}
diff --git a/src/nineschool-1.0/src/Form/UserType.php b/src/nineschool-1.0/src/Form/UserType.php
index 8c04c02..3d2f346 100644
--- a/src/nineschool-1.0/src/Form/UserType.php
+++ b/src/nineschool-1.0/src/Form/UserType.php
@@ -103,7 +103,8 @@ class UserType extends AbstractType
$builder->add('apikey',
TextType::class, [
"label" =>"Clé Accès",
- "required" => false
+ "required" => true,
+ "disabled" => true,
]
);
diff --git a/src/nineschool-1.0/src/Service/sessionInit.php b/src/nineschool-1.0/src/Service/sessionInit.php
index 10dd780..5841d00 100644
--- a/src/nineschool-1.0/src/Service/sessionInit.php
+++ b/src/nineschool-1.0/src/Service/sessionInit.php
@@ -30,35 +30,52 @@
// Valeur par defaut colorbgbodydark = #343a40
if($this->session->get("colorbgbodydark")=="")
- $this->session->set("colorbgbodydark", '#343a40');
+ $this->session->set("colorbgbodydark", $this->em->getRepository("App:Config")->find("colorbgbodydark")->getDefault());
// Valeur par defaut colorbgbodydark = #ffffff
if($this->session->get("colorbgbodylight")=="")
- $this->session->set("colorbgbodylight", '#ffffff');
+ $this->session->set("colorbgbodylight",$this->em->getRepository("App:Config")->find("colorbgbodylight")->getDefault());
// Valeur par defaut colorfttitledark = #ffffff
if($this->session->get("colorfttitledark")=="")
- $this->session->set("colorfttitledark", '#ffffff');
+ $this->session->set("colorfttitledark", $this->em->getRepository("App:Config")->find("colorfttitledark")->getDefault());
// Valeur par defaut colorfttitlelight = #343a40
if($this->session->get("colorfttitlelight")=="")
- $this->session->set("colorfttitlelight", '#343a40');
+ $this->session->set("colorfttitlelight", $this->em->getRepository("App:Config")->find("colorfttitlelight")->getDefault());
// Valeur par defaut colorftbodydark = #ffffff
if($this->session->get("colorftbodydark")=="")
- $this->session->set("colorftbodydark", '#ffffff');
+ $this->session->set("colorftbodydark", $this->em->getRepository("App:Config")->find("colorftbodydark")->getDefault());
// Valeur par defaut colorftbodylight = #343a40
if($this->session->get("colorftbodylight")=="")
- $this->session->set("colorftbodylight", '#343a40');
+ $this->session->set("colorftbodylight", $this->em->getRepository("App:Config")->find("colorftbodylight")->getDefault());
// Valeur par defaut fonttitle = FredokaOne-Regular
if($this->session->get("fonttitle")=="")
- $this->session->set("fonttitle", 'FredokaOne-Regular');
+ $this->session->set("fonttitle", $this->em->getRepository("App:Config")->find("fonttitle")->getDefault());
// Valeur par defaut fontbody = Roboto-Regular
if($this->session->get("fontbody")=="")
- $this->session->set("fontbody", 'Roboto-Regular');
+ $this->session->set("fontbody", $this->em->getRepository("App:Config")->find("fontbody")->getDefault());
+
+ // Valeur par defaut fontsizeh1 = 40
+ if($this->session->get("fontsizeh1")=="")
+ $this->session->set("fontsizeh1", $this->em->getRepository("App:Config")->find("fontsizeh1")->getDefault());
+
+ // Valeur par defaut fontsizeh2 = 32
+ if($this->session->get("fontsizeh2")=="")
+ $this->session->set("fontsizeh2", $this->em->getRepository("App:Config")->find("fontsizeh2")->getDefault());
+
+ // Valeur par defaut fontsizeh3 = 28
+ if($this->session->get("fontsizeh3")=="")
+ $this->session->set("fontsizeh3", $this->em->getRepository("App:Config")->find("fontsizeh3")->getDefault());
+
+ // Valeur par defaut fontsizeh4 = 24
+ if($this->session->get("fontsizeh4")=="")
+ $this->session->set("fontsizeh4", $this->em->getRepository("App:Config")->find("fontsizeh4")->getDefault());
+
// Valeur par defaut logo
if($this->session->get("logodark")==""&&$this->session->get("logolight")=="") {
@@ -69,5 +86,34 @@
$this->session->set("logodark", $this->session->get("logolight"));
elseif($this->session->get("logolight")=="")
$this->session->set("logolight", $this->session->get("logodark"));
+
+ // Calcul couleur
+ $this->session->set("colorbgbodylight-darker", $this->adjustBrightness($this->session->get("colorbgbodylight"),-10));
+ $this->session->set("colorbgbodydark-darker", $this->adjustBrightness($this->session->get("colorbgbodydark"),-50));
+ $this->session->set("colorfttitlelight-darker", $this->adjustBrightness($this->session->get("colorfttitlelight"),-50));
+
+ }
+
+ private function adjustBrightness($hex, $steps) {
+ // Steps should be between -255 and 255. Negative = darker, positive = lighter
+ $steps = max(-255, min(255, $steps));
+
+ // Normalize into a six character long hex string
+ $hex = str_replace('#', '', $hex);
+ if (strlen($hex) == 3) {
+ $hex = str_repeat(substr($hex,0,1), 2).str_repeat(substr($hex,1,1), 2).str_repeat(substr($hex,2,1), 2);
+ }
+
+ // Split into three parts: R, G and B
+ $color_parts = str_split($hex, 2);
+ $return = '';
+
+ foreach ($color_parts as $color) {
+ $color = hexdec($color); // Convert to decimal
+ $color = max(0,min(255,$color + $steps)); // Adjust color
+ $return .= str_pad(dechex($color), 2, '0', STR_PAD_LEFT); // Make two char hex code
+ }
+
+ return '#'.$return;
}
}
diff --git a/src/nineschool-1.0/src/Websocket/MessageHandler.php b/src/nineschool-1.0/src/Websocket/MessageHandler.php
new file mode 100644
index 0000000..1da1aa9
--- /dev/null
+++ b/src/nineschool-1.0/src/Websocket/MessageHandler.php
@@ -0,0 +1,114 @@
+container = $container;
+ $this->em = $em;
+
+ $this->clients = new SplObjectStorage;
+ $this->subscriptions = [];
+ $this->users = [];
+ $this->keys = [];
+ }
+
+ public function onOpen(ConnectionInterface $conn)
+ {
+ $this->clients->attach($conn);
+ $this->users[$conn->resourceId] = $conn;
+ }
+
+ public function onClose(ConnectionInterface $conn)
+ {
+ $data= new \stdClass;
+ $data->command = "adead";
+ $this->sendMessage($conn,$data,false);
+
+ $this->clients->detach($conn);
+ unset($this->users[$conn->resourceId]);
+ unset($this->keys[$conn->resourceId]);
+ unset($this->subscriptions[$conn->resourceId]);
+ }
+
+ public function onError(ConnectionInterface $conn, Exception $e)
+ {
+ $conn->close();
+ }
+
+ public function onMessage(ConnectionInterface $conn, $msg)
+ {
+ $data = json_decode($msg);
+
+ switch ($data->command) {
+ case "subscribe":
+ $this->subscriptions[$conn->resourceId] = $data->channel;
+ $this->keys[$conn->resourceId] = $data->key;
+ break;
+
+ case "meto":
+ if (isset($this->subscriptions[$conn->resourceId])) {
+ $this->sendMessage($conn,$data,false);
+ }
+ break;
+
+ case "alive":
+ default:
+ if (isset($this->subscriptions[$conn->resourceId])) {
+ $this->sendMessage($conn,$data);
+ }
+ break;
+ }
+ }
+
+ private function sendMessage(ConnectionInterface $conn, $data, $tome=true) {
+ $target = $this->subscriptions[$conn->resourceId];
+ foreach ($this->subscriptions as $id=>$channel) {
+ if ($channel == $target) {
+ if($tome||(!$tome&&$id!=$conn->resourceId)) {
+ // From
+ $key= $this->keys[$conn->resourceId];
+ $from=$this->em->getRepository("App:User")->findOneBy(["apikey"=>$key]);
+
+ // To
+ $key= $this->keys[$id];
+ $to=$this->em->getRepository("App:User")->findOneBy(["apikey"=>$key]);
+
+ // Send
+ if($from && $to) {
+ $data->from= new \stdClass;
+ $data->from->id = $from->getId();
+ $data->from->username = $from->getUsername();
+ $data->from->displayname = $from->getDisplayname();
+ $data->from->avatar = $this->getAvatar($from->getAvatar());
+
+ $data->log="== GET MSG from ".$data->from->username." to ".$to->getUsername()." = ".$data->command;
+ $this->users[$id]->send(json_encode($data));
+ }
+ }
+ }
+ }
+ }
+
+ private function getAvatar($avatar) {
+ if(stripos($avatar,"http")===0)
+ return $avatar;
+ else
+ return "/".$this->container->getParameter("appAlias")."/uploads/avatar/".$avatar;
+ }
+}
\ No newline at end of file
diff --git a/src/nineschool-1.0/symfony.lock b/src/nineschool-1.0/symfony.lock
index fdac724..79de052 100644
--- a/src/nineschool-1.0/symfony.lock
+++ b/src/nineschool-1.0/symfony.lock
@@ -1,4 +1,10 @@
{
+ "brick/math": {
+ "version": "0.9.1"
+ },
+ "cboden/ratchet": {
+ "version": "v0.4.3"
+ },
"doctrine/annotations": {
"version": "1.0",
"recipe": {
@@ -81,6 +87,9 @@
"egulias/email-validator": {
"version": "2.1.17"
},
+ "evenement/evenement": {
+ "version": "v3.0.1"
+ },
"exsyst/swagger": {
"version": "v0.4.1"
},
@@ -108,6 +117,9 @@
"config/packages/fos_rest.yaml"
]
},
+ "guzzlehttp/psr7": {
+ "version": "1.7.0"
+ },
"jasig/phpcas": {
"version": "1.3.8"
},
@@ -194,12 +206,48 @@
"psr/event-dispatcher": {
"version": "1.0.0"
},
+ "psr/http-message": {
+ "version": "1.0.1"
+ },
"psr/link": {
"version": "1.0.0"
},
"psr/log": {
"version": "1.1.2"
},
+ "ralouphie/getallheaders": {
+ "version": "3.0.3"
+ },
+ "ramsey/collection": {
+ "version": "1.1.1"
+ },
+ "ramsey/uuid": {
+ "version": "4.1.1"
+ },
+ "ratchet/rfc6455": {
+ "version": "v0.3"
+ },
+ "react/cache": {
+ "version": "v1.1.0"
+ },
+ "react/dns": {
+ "version": "v1.4.0"
+ },
+ "react/event-loop": {
+ "version": "v1.1.1"
+ },
+ "react/promise": {
+ "version": "v2.8.0"
+ },
+ "react/promise-timer": {
+ "version": "v1.6.0"
+ },
+ "react/socket": {
+ "version": "v1.6.0"
+ },
+ "react/stream": {
+ "version": "v1.1.1"
+ },
"sensio/framework-extra-bundle": {
"version": "5.2",
"recipe": {
diff --git a/src/nineschool-1.0/templates/Config/edit.html.twig b/src/nineschool-1.0/templates/Config/edit.html.twig
index 8ca36dd..0a62546 100755
--- a/src/nineschool-1.0/templates/Config/edit.html.twig
+++ b/src/nineschool-1.0/templates/Config/edit.html.twig
@@ -66,12 +66,12 @@
{% elseif config.type=="hero" %}
{% elseif config.type=="image" %}
{% endif %}
{{ form_row(form.help) }}
diff --git a/src/nineschool-1.0/templates/Config/render.html.twig b/src/nineschool-1.0/templates/Config/render.html.twig
index 69d5076..9d87611 100644
--- a/src/nineschool-1.0/templates/Config/render.html.twig
+++ b/src/nineschool-1.0/templates/Config/render.html.twig
@@ -32,10 +32,10 @@
{% set otherstyle = "" %}
{% if config.id=='colorbgbodydark' %}
{% set bgcolor = val %}
- {% set color = app.session.get('colorfttitledark') %}
+ {% set color = app.session.get('colorftbodydark') %}
{% elseif config.id=='colorbgbodylight' %}
{% set bgcolor = val %}
- {% set color = app.session.get('colorfttitlelight') %}
+ {% set color = app.session.get('colorftbodylight') %}
{% elseif config.id=='colorfttitledark' %}
{% set bgcolor = app.session.get('colorbgbodydark') %}
{% set color = val %}
@@ -48,6 +48,9 @@
{% elseif config.id=='colorftbodylight' %}
{% set bgcolor = app.session.get('colorbgbodylight') %}
{% set color = val %}
+ {% elseif config.id=='fonttitle' %}
+ {% set color = app.session.get('colorfttitlelight') %}
+ {% set otherstyle = "font-family: "~val~";" %}
{% elseif config.id=='logodark' %}
{% set bgcolor = app.session.get('colorbgbodydark') %}
{% set otherstyle = "text-align: center;" %}
diff --git a/src/nineschool-1.0/templates/Crop/crop01.html.twig b/src/nineschool-1.0/templates/Crop/crop01.html.twig
index eaf4146..8abf97a 100644
--- a/src/nineschool-1.0/templates/Crop/crop01.html.twig
+++ b/src/nineschool-1.0/templates/Crop/crop01.html.twig
@@ -23,7 +23,7 @@
Dropzone.options.MyDropZone = {
maxFiles: 1,
- acceptedMimeTypes: 'image/*',
+ acceptedMimeTypes: 'image/jpeg,image/png',
//renameFilename: false,
success: function(file, response){
$(location).attr('href',"{{ path('app_crop02', {"type": type, "reportinput": reportinput }) }}?file="+response["file"]);
diff --git a/src/nineschool-1.0/templates/Crop/crop02.html.twig b/src/nineschool-1.0/templates/Crop/crop02.html.twig
index 45071f9..cc33eda 100644
--- a/src/nineschool-1.0/templates/Crop/crop02.html.twig
+++ b/src/nineschool-1.0/templates/Crop/crop02.html.twig
@@ -5,27 +5,29 @@
{% endblock %}
{% block body %}
- {{ form_start(form) }}
- {{ form_widget(form.submit) }}
-
+ {% if not submited %}
+ {{ form_start(form) }}
+ {{ form_widget(form.submit) }}
+
- {% if ratio=="1:1" %}
- {% set class="width:90px; height:90px;" %}
- {% elseif ratio=="16:9" %}
- {% set class="width:160px; height:90px;" %}
- {% elseif ratio=="16:2" %}
- {% set class="width:160px; height:20px;" %}
- {% endif %}
+ {% if ratio=="1:1" %}
+ {% set class="width:90px; height:90px;" %}
+ {% elseif ratio=="16:9" %}
+ {% set class="width:160px; height:90px;" %}
+ {% elseif ratio=="16:2" %}
+ {% set class="width:160px; height:20px;" %}
+ {% endif %}
-
-
-
-
-
-
+
+
-
- {{ form_end(form) }}
+
+
+ {{ form_end(form) }}
+ {% endif %}
{% endblock %}
@@ -73,8 +75,8 @@
{% if reportinput == "refresh" %}
window.parent.location.reload();
{% elseif reportinput != "none" %}
- window.parent.$("#{{ reportinput }}").val("thumb_{{ file }}");
- window.parent.$("#{{ reportinput }}_img").attr("src","/{{ appAlias }}/uploads/{{ type }}/thumb_{{ file }}");
+ window.parent.$("{{ reportinput }}").val("thumb_{{ file }}");
+ window.parent.$("{{ reportinput }}_img").attr("src","/{{ appAlias }}/uploads/{{ type }}/thumb_{{ file }}");
{% endif %}
closeModal();
@@ -85,33 +87,35 @@
}
$(document).ready(function() {
- window.parent.$(".modal-title").html("ETAPE 2 - Découper votre image");
+ {% if submited %}
+ reportThumb();
+ {% else %}
+ window.parent.$(".modal-title").html("ETAPE 2 - Découper votre image");
- realheight=$('#largeimg').height();
- realwidth=$('#largeimg').width();
+ realheight=$('#largeimg').height();
+ realwidth=$('#largeimg').width();
- if(realheight>505) { $('#largeimg').height(505); $('#largeimg').width("auto") }
- if($('#largeimg').width() > 868) { $('#largeimg').width(868); $('#largeimg').height("auto") }
+ if(realheight>505) { $('#largeimg').height(505); $('#largeimg').width("auto") }
+ if($('#largeimg').width() > 868) { $('#largeimg').width(868); $('#largeimg').height("auto") }
- resizeheight=$('#largeimg').height();
- resizewidth=$('#largeimg').width();
+ resizeheight=$('#largeimg').height();
+ resizewidth=$('#largeimg').width();
- $('#largeimg').CropSelectJs({
- imageSrc: "/{{ appAlias }}/uploads/{{type}}/{{ file }}",
- selectionResize: function(data) { resize(data); },
- selectionMove: function(data) { move(data); },
- });
+ $('#largeimg').CropSelectJs({
+ imageSrc: "/{{ appAlias }}/uploads/{{type}}/{{ file }}",
+ selectionResize: function(data) { resize(data); },
+ selectionMove: function(data) { move(data); },
+ });
- {% if ratio=="1:1" %}
- {% set nbratio=1 %}
- {% elseif ratio=="16:9" %}
- {% set nbratio=(16/9) %}
- {% elseif nbratio=="16:2" %}
- {% set class=(16/2) %}
+ {% if ratio=="1:1" %}
+ {% set nbratio=1 %}
+ {% elseif ratio=="16:9" %}
+ {% set nbratio=(16/9) %}
+ {% elseif nbratio=="16:2" %}
+ {% set class=(16/2) %}
+ {% endif %}
+
+ $('#largeimg').CropSelectJs('setSelectionAspectRatio',{{nbratio}});
{% endif %}
-
- $('#largeimg').CropSelectJs('setSelectionAspectRatio',{{nbratio}});
-
-
});
{% endblock %}
diff --git a/src/nineschool-1.0/templates/Form/fields.html.twig b/src/nineschool-1.0/templates/Form/fields.html.twig
index 03835d7..b5a5b31 100644
--- a/src/nineschool-1.0/templates/Form/fields.html.twig
+++ b/src/nineschool-1.0/templates/Form/fields.html.twig
@@ -83,19 +83,6 @@ les plus importants pour y ajouter le class imposée par Bootstrap 3 #}
{%- endblock button_widget %}
-{# Personnalisation des attributs des boutons #}
-{% block button_attributes -%}
- {% if type is defined and type == 'submit' -%}
- {% set class = 'btn-primary' %}
- {% else %}
- {% set class = 'btn-default' %}
- {%- endif -%}
-
- {% set attr = attr|merge({'class': (attr.class|default('') ~ ' btn ' ~ class)|trim}) %}
- {{ parent() }}
-{%- endblock button_attributes %}
-
-
{# Personnalisation des select #}
{% block choice_widget_collapsed %}
{% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-control')|trim}) %}
diff --git a/src/nineschool-1.0/templates/Home/home.html.twig b/src/nineschool-1.0/templates/Home/home.html.twig
index 2ea26b9..5356889 100644
--- a/src/nineschool-1.0/templates/Home/home.html.twig
+++ b/src/nineschool-1.0/templates/Home/home.html.twig
@@ -1,6 +1,9 @@
{% extends "base.html.twig" %}
{% block body %}
+{% if wssuse and app.user %}
+{{ render(path("app_wss_sample")) }}
+{% endif %}
{% endblock %}
diff --git a/src/nineschool-1.0/templates/Include/javascript.js.twig b/src/nineschool-1.0/templates/Include/javascript.js.twig
index 84e6fc2..2de628e 100644
--- a/src/nineschool-1.0/templates/Include/javascript.js.twig
+++ b/src/nineschool-1.0/templates/Include/javascript.js.twig
@@ -1,4 +1,14 @@
$(document).ready(function() {
+
+ $(".pick-a-color").spectrum(
+ {
+ type: "text",
+ showAlpha: false
+ }
+ );
+
+ $(".pick-a-color").attr("autocomplete","off");
+
var doit = true;
$("a[data-method]").on('click',function(){
@@ -20,4 +30,24 @@ function ModalLoad(idmodal,title,path) {
$("#"+idmodal+" .modal-header h4").text(title);
$("#"+idmodal+" iframe").attr("src",path);
$("#"+idmodal).modal("show");
-}
\ No newline at end of file
+}
+
+{% if wssuse %}
+ function subscribe(channeltype,channelkey,userkey) {
+ console.log("== SUBSCRIBE "+channeltype+"-"+channelkey+" with userkey "+userkey);
+ conn.send(JSON.stringify({
+ command: "subscribe",
+ log: "",
+ channel: channeltype+"-"+channelkey,
+ channeltype: channeltype,
+ channelkey: channelkey,
+ userkey: userkey
+ }));
+ }
+
+ function sendMessage(msg) {
+ json=JSON.stringify(msg);
+ console.log("== SEND MSG = "+json);
+ conn.send(json);
+ }
+{% endif %}
diff --git a/src/nineschool-1.0/templates/Include/sidebar.html.twig b/src/nineschool-1.0/templates/Include/sidebar.html.twig
index b98950e..2055eed 100644
--- a/src/nineschool-1.0/templates/Include/sidebar.html.twig
+++ b/src/nineschool-1.0/templates/Include/sidebar.html.twig
@@ -2,27 +2,36 @@
{% if is_granted('ROLE_ADMIN') %}
- - Administration
+ - Configuration
-
- Configurations
+ Générale
+ -
+
+ Thème
+
+
+
+ - Organisation
+
-
Utilisateurs
- -
+
-
Groupes
{% if appCron %}
+ - Outils
-
Jobs
diff --git a/src/nineschool-1.0/templates/Include/style.css.twig b/src/nineschool-1.0/templates/Include/style.css.twig
index d4633df..ffec452 100644
--- a/src/nineschool-1.0/templates/Include/style.css.twig
+++ b/src/nineschool-1.0/templates/Include/style.css.twig
@@ -7,6 +7,14 @@
--colorftbodydark: {{ app.session.get('colorftbodydark')|raw }};
--fontbody: "{{ app.session.get('fontbody')|raw }}";
--fonttitle: "{{ app.session.get('fonttitle')|raw }}";
+ --fontsizeh1: {{ app.session.get('fontsizeh1')~"px"|raw }};
+ --fontsizeh2: {{ app.session.get('fontsizeh2')~"px"|raw }};
+ --fontsizeh3: {{ app.session.get('fontsizeh3')~"px"|raw }};
+ --fontsizeh4: {{ app.session.get('fontsizeh4')~"px"|raw }};
+
+ --colorbgbodylight-darker: {{ app.session.get('colorbgbodylight-darker')|raw }};
+ --colorbgbodydark-darker: {{ app.session.get('colorbgbodydark-darker')|raw }};
+ --colorfttitlelight-darker: {{ app.session.get('colorfttitlelight-darker')|raw }};
}
/* COLOR BODY */
@@ -16,10 +24,6 @@ body {
color: var(--colorftbodylight);
}
-.card {
- background-color: var(--colorbgbodylight);
-}
-
body .navbar.bg-dark {
background-color: var(--colorbgbodydark)!important;
}
@@ -36,7 +40,11 @@ body #sidebar .nav a {
color: var(--colorfttitledark);
}
-body h1, body h2, body h3 {
+body #sidebar .nav .last {
+ border-color: var(--colorfttitledark);
+}
+
+body h1, body h2, body h3, body .modal-header h4 {
color: var(--colorfttitlelight);
}
@@ -44,23 +52,59 @@ body a, body .btn-link {
color: var(--colorfttitlelight);
}
+body a:hover, body .btn-link:hover {
+ color: var(--colorfttitlelight-darker);
+}
+
body .nav a{
color: var(--colorfttitledark);
}
+body .table {
+ color: var(--colorftbodylight);
+}
+
+body .card {
+ background-color: var(--colorbgbodylight);
+}
+
+body .card-header {
+ background-color: var(--colorbgbodylight-darker);
+ color: var(--colorfttitlelight);
+ font-size: 120%;
+}
+
+body .card-header .custom-control {
+ color: var(--colorftbodylight);
+ font-size: 80%;
+}
+
+body .page-item.active .page-link,
+body .page-item.active .page-link:hover {
+ background-color: var(--colorfttitlelight);
+ border-color: var(--colorfttitlelight);
+}
+
+body .btn-primary {
+ background-color: var(--colorbgbodydark);
+ border-color: var(--colorbgbodydark);
+}
+body .btn-primary:hover {
+ background-color: var(--colorbgbodydark-darker);
+ border-color: var(--colorbgbodydark-darker);
+}
+
+body .modal-title {
+
+}
/* COLOR BODY HOME */
-
body.monocolor {
background-color: var(--colorbgbodydark);
color: var(--colorftbodydark);
}
-body.monocolor .card {
- background-color: var(--colorbgbodydark);
-}
-
body.monocolor .navbar.bg-dark {
background-color: var(--colorbgbodydark)!important;
}
@@ -77,7 +121,7 @@ body.monocolor #sidebar .nav a {
color: var(--colorfttitledark);
}
-body.monocolor h1, body.monocolor h2, body.monocolor h3 {
+body.monocolor h1, body.monocolor h2, body.monocolor h3, body.monocolor .modal-header h4 {
color: var(--colorfttitledark);
}
@@ -89,20 +133,54 @@ body.monocolor .nav a{
color: var(--colorfttitledark);
}
+body.monocolor .card {
+ background-color: var(--colorbgbodydark);
+}
+body.monocolor .card-header {
+ background-color: var(--colorbgbodydark);
+ color: var(--colorfttitledark);
+ font-size: 120%;
+}
+
+body.monocolor .card-header .custom-control {
+ color: var(--colorftbodydark);
+ font-size: 80%;
+}
+
+body.monocolor .btn-primary {
+ background-color: var(--colorbgbodylight);
+ border-color: var(--colorbgbodylight);
+}
+body.monocolor .btn-primary:hover {
+ background-color: var(--colorbgbodylight-darker);
+ border-color: var(--colorbgbodylight-darker);
+}
/* FONT */
body {
font-family: var(--fontbody);
}
-h1,h2,h3, .navbar-brand {
+h1,h2,h3, .navbar-brand, .card-header, .modal-header h4 {
font-family: var(--fonttitle);
}
+h1 { font-size: var(--fontsizeh1); }
+h2 { font-size: var(--fontsizeh2); }
+h3 { font-size: var(--fontsizeh3); }
+h4 { font-size: var(--fontsizeh4); }
+
+.card-header .custom-control {
+ font-family: var(--fontbody);
+}
{% if not useheader is defined or not useheader %}
#main {
padding:0px;
}
+{% else %}
+#main {
+ margin-bottom: 100px;
+}
{%endif%}
\ No newline at end of file
diff --git a/src/nineschool-1.0/templates/Theme/list.html.twig b/src/nineschool-1.0/templates/Theme/list.html.twig
new file mode 100644
index 0000000..16067a5
--- /dev/null
+++ b/src/nineschool-1.0/templates/Theme/list.html.twig
@@ -0,0 +1,29 @@
+{% extends 'base.html.twig' %}
+
+{% block body %}
+
Thèmes
+
+ Thème en cours
+
+
+ {{currentheme.name}}
+
+
+ Thèmes disponibles
+
+
+ {% for theme in themes %}
+
+
+ {{theme.name}}
+
Sélectionner
+
+ {% endfor %}
+
+{% endblock %}
+
+
+
+
+
+
diff --git a/src/nineschool-1.0/templates/User/edit.html.twig b/src/nineschool-1.0/templates/User/edit.html.twig
index 94e7bc8..d1a8b41 100755
--- a/src/nineschool-1.0/templates/User/edit.html.twig
+++ b/src/nineschool-1.0/templates/User/edit.html.twig
@@ -48,7 +48,7 @@
{{ form_widget(form.avatar) }}
{% if appMasteridentity=="LDAP" or appMasteridentity=="SQL" %}
- Modifier
+ Modifier
{% endif %}
diff --git a/src/nineschool-1.0/templates/Websocket/sample.html.twig b/src/nineschool-1.0/templates/Websocket/sample.html.twig
new file mode 100644
index 0000000..a74146d
--- /dev/null
+++ b/src/nineschool-1.0/templates/Websocket/sample.html.twig
@@ -0,0 +1,61 @@
+
+
+{% if wssuse %}
+
+{% endif %}
\ No newline at end of file
diff --git a/src/nineschool-1.0/templates/base.html.twig b/src/nineschool-1.0/templates/base.html.twig
index 6d7ebd0..8dadd76 100644
--- a/src/nineschool-1.0/templates/base.html.twig
+++ b/src/nineschool-1.0/templates/base.html.twig
@@ -22,12 +22,28 @@
+ {% if not app.session.get("apptheme") is empty %}
+
+ {% endif %}
+
+
+ {{ encore_entry_script_tags('app') }}
+ {% block encorescripttags %}
+
+ {% endblock %}
+
+
+
+
{% set class="" %}
{% if usemonocolor is defined and usemonocolor %}
{% set class="monocolor" %}
@@ -86,7 +102,7 @@
{% endif %}
-
+
{% set contentsidebar="" %}
{% if usesidebar is defined and usesidebar %}
{% set contentsidebar="contentsidebar" %}
@@ -104,19 +120,20 @@
-
+
+
- {{ encore_entry_script_tags('app') }}
-
- {% block encorescripttags %}
-
- {% endblock %}
{% block localexternalscript %}
{% endblock %}
-
-
+ {% if not app.session.get("apptheme") is empty %}
+
+ {% endif %}
+
{% if sondeUse %}
{{ render(path("app_sonde")) }}
{% endif %}
diff --git a/tmpl/nineschool.cron b/tmpl/nineschool.cron
index 81e4569..f6c24f7 100644
--- a/tmpl/nineschool.cron
+++ b/tmpl/nineschool.cron
@@ -1 +1,2 @@
* * * * * root /var/www/html/nineschool/scripts/cron.sh &>/dev/null
+* * * * * root /var/www/html/nineschool/scripts/websocket.sh restartifdown &>/dev/null