Compare commits

...

20 Commits

Author SHA1 Message Date
c7daabaa5a microsecond submit illustration 2025-06-03 13:45:58 +02:00
b0db9f0dea review home 2025-03-23 11:37:57 +01:00
e12208891a review home 2025-03-23 10:56:11 +01:00
0c3eacadde review homepage 2025-03-22 13:00:35 +01:00
b4745b657c review homepage 2025-03-22 12:36:32 +01:00
f0ec919b6d review homepage 2025-03-22 12:20:09 +01:00
fd472ca39e review homepage 2025-03-22 12:10:01 +01:00
40274c306c ajust item ninegate 2025-02-11 19:01:39 +01:00
e68d1797dd ajust item ninegate 2025-02-11 18:48:04 +01:00
f04915f759 order page webzine 2025-01-20 11:21:21 +01:00
eba2e1c745 submit illustration en masse 2024-12-30 12:09:06 +01:00
a6ef2a4d7b add member role 2024-12-29 20:28:42 +01:00
97263e96c3 default submittime 2024-11-23 16:52:11 +01:00
340e99dad2 svg 2024-11-17 12:53:35 +01:00
e26fdb13f1 svg 2024-11-16 09:32:15 +01:00
02906d09e2 svg 2024-11-03 18:51:45 +01:00
4e65d68057 svg 2024-11-03 18:39:00 +01:00
8d2970959c svg 2024-11-03 18:32:47 +01:00
71eb7db988 svg 2024-11-03 17:38:20 +01:00
fcb7efc236 svg 2024-11-03 17:38:12 +01:00
27 changed files with 1521 additions and 684 deletions

506
composer.lock generated
View File

@ -1,11 +1,61 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "de8695694e414ca8b892c582b9abd20a",
"content-hash": "22203cdc7b5908bdc7578121b31345fd",
"packages": [
{
"name": "bacon/bacon-qr-code",
"version": "2.0.8",
"source": {
"type": "git",
"url": "https://github.com/Bacon/BaconQrCode.git",
"reference": "8674e51bb65af933a5ffaf1c308a660387c35c22"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22",
"reference": "8674e51bb65af933a5ffaf1c308a660387c35c22",
"shasum": ""
},
"require": {
"dasprid/enum": "^1.0.3",
"ext-iconv": "*",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"phly/keep-a-changelog": "^2.1",
"phpunit/phpunit": "^7 | ^8 | ^9",
"spatie/phpunit-snapshot-assertions": "^4.2.9",
"squizlabs/php_codesniffer": "^3.4"
},
"suggest": {
"ext-imagick": "to generate QR code images"
},
"type": "library",
"autoload": {
"psr-4": {
"BaconQrCode\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-2-Clause"
],
"authors": [
{
"name": "Ben Scholzen 'DASPRiD'",
"email": "mail@dasprids.de",
"homepage": "https://dasprids.de/",
"role": "Developer"
}
],
"description": "BaconQrCode is a QR code generator for PHP.",
"homepage": "https://github.com/Bacon/BaconQrCode",
"time": "2022-12-07T17:46:57+00:00"
},
{
"name": "brick/math",
"version": "0.9.1",
@ -107,6 +157,52 @@
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"time": "2020-08-25T05:50:16+00:00"
},
{
"name": "dasprid/enum",
"version": "1.0.6",
"source": {
"type": "git",
"url": "https://github.com/DASPRiD/Enum.git",
"reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90",
"reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90",
"shasum": ""
},
"require": {
"php": ">=7.1 <9.0"
},
"require-dev": {
"phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11",
"squizlabs/php_codesniffer": "*"
},
"type": "library",
"autoload": {
"psr-4": {
"DASPRiD\\Enum\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-2-Clause"
],
"authors": [
{
"name": "Ben Scholzen 'DASPRiD'",
"email": "mail@dasprids.de",
"homepage": "https://dasprids.de/",
"role": "Developer"
}
],
"description": "PHP 7.1 enum implementation",
"keywords": [
"enum",
"map"
],
"time": "2024-08-09T14:30:48+00:00"
},
{
"name": "doctrine/annotations",
"version": "1.11.1",
@ -1265,6 +1361,7 @@
"reflection",
"static"
],
"abandoned": "roave/better-reflection",
"time": "2020-10-27T21:46:55+00:00"
},
{
@ -1378,6 +1475,197 @@
],
"time": "2020-10-31T20:37:35+00:00"
},
{
"name": "endroid/installer",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/endroid/installer.git",
"reference": "7af9f7fdbe6dcbf65b1d3439932ac45a98d229b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/endroid/installer/zipball/7af9f7fdbe6dcbf65b1d3439932ac45a98d229b4",
"reference": "7af9f7fdbe6dcbf65b1d3439932ac45a98d229b4",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.1||^2.0",
"php": "^7.4||^8.0"
},
"require-dev": {
"composer/composer": "^2.0",
"endroid/quality": "dev-master"
},
"suggest": {
"roave/security-advisories": "Avoids installation of package versions with vulnerabilities"
},
"type": "composer-plugin",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
},
"class": "Endroid\\Installer\\Installer"
},
"autoload": {
"psr-4": {
"Endroid\\Installer\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jeroen van den Enden",
"email": "info@endroid.nl"
}
],
"description": "Composer plugin for installing configuration files",
"funding": [
{
"url": "https://github.com/endroid",
"type": "github"
}
],
"time": "2021-10-30T23:14:36+00:00"
},
{
"name": "endroid/qr-code",
"version": "4.6.1",
"source": {
"type": "git",
"url": "https://github.com/endroid/qr-code.git",
"reference": "a75c913b0e4d6ad275e49a2c1de1cacffc6c2184"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/endroid/qr-code/zipball/a75c913b0e4d6ad275e49a2c1de1cacffc6c2184",
"reference": "a75c913b0e4d6ad275e49a2c1de1cacffc6c2184",
"shasum": ""
},
"require": {
"bacon/bacon-qr-code": "^2.0.5",
"php": "^7.4||^8.0"
},
"require-dev": {
"endroid/quality": "dev-master",
"ext-gd": "*",
"khanamiryan/qrcode-detector-decoder": "^1.0.4",
"setasign/fpdf": "^1.8.2"
},
"suggest": {
"ext-gd": "Enables you to write PNG images",
"khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator",
"roave/security-advisories": "Makes sure package versions with known security issues are not installed",
"setasign/fpdf": "Enables you to use the PDF writer"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.x-dev"
}
},
"autoload": {
"psr-4": {
"Endroid\\QrCode\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jeroen van den Enden",
"email": "info@endroid.nl"
}
],
"description": "Endroid QR Code",
"homepage": "https://github.com/endroid/qr-code",
"keywords": [
"code",
"endroid",
"php",
"qr",
"qrcode"
],
"funding": [
{
"url": "https://github.com/endroid",
"type": "github"
}
],
"time": "2022-10-26T08:48:17+00:00"
},
{
"name": "endroid/qr-code-bundle",
"version": "4.1.1",
"source": {
"type": "git",
"url": "https://github.com/endroid/qr-code-bundle.git",
"reference": "84b614be5582e83939ccdba0273a6671be5e0535"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/endroid/qr-code-bundle/zipball/84b614be5582e83939ccdba0273a6671be5e0535",
"reference": "84b614be5582e83939ccdba0273a6671be5e0535",
"shasum": ""
},
"require": {
"endroid/installer": "^1.2.2",
"endroid/qr-code": "^4.6",
"php": "^7.4||^8.0",
"symfony/framework-bundle": "^4.4||^5.0||^6.0",
"symfony/twig-bundle": "^4.4||^5.0||^6.0",
"symfony/yaml": "^4.4||^5.0||^6.0"
},
"require-dev": {
"endroid/quality": "dev-master"
},
"suggest": {
"roave/security-advisories": "Avoids installation of package versions with vulnerabilities"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "4.x-dev"
}
},
"autoload": {
"psr-4": {
"Endroid\\QrCodeBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jeroen van den Enden",
"email": "info@endroid.nl"
}
],
"description": "Endroid QR Code Bundle",
"homepage": "https://github.com/endroid/qr-code-bundle",
"keywords": [
"bundle",
"code",
"endroid",
"php",
"qr",
"symfony"
],
"funding": [
{
"url": "https://github.com/endroid",
"type": "github"
}
],
"time": "2022-10-04T17:28:16+00:00"
},
{
"name": "exsyst/swagger",
"version": "v0.4.1",
@ -2878,6 +3166,7 @@
"annotations",
"controllers"
],
"abandoned": "Symfony",
"time": "2020-08-25T19:10:18+00:00"
},
{
@ -2940,6 +3229,7 @@
"mail",
"mailer"
],
"abandoned": "symfony/mailer",
"time": "2019-11-12T09:31:26+00:00"
},
{
@ -3877,33 +4167,34 @@
},
{
"name": "symfony/flex",
"version": "v1.9.10",
"version": "v1.21.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "7335ec033995aa34133e621627333368f260b626"
"reference": "bda5f869ac51c8e985a6fe9f964c4cb78228a369"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/7335ec033995aa34133e621627333368f260b626",
"reference": "7335ec033995aa34133e621627333368f260b626",
"url": "https://api.github.com/repos/symfony/flex/zipball/bda5f869ac51c8e985a6fe9f964c4cb78228a369",
"reference": "bda5f869ac51c8e985a6fe9f964c4cb78228a369",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0|^2.0",
"php": ">=7.1"
},
"conflict": {
"composer/semver": "<1.7.2"
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"symfony/dotenv": "^4.4|^5.0",
"symfony/phpunit-bridge": "^4.4|^5.0",
"symfony/process": "^3.4|^4.4|^5.0"
"symfony/dotenv": "^4.4|^5.0|^6.0",
"symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/phpunit-bridge": "^4.4.12|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0"
},
"type": "composer-plugin",
"extra": {
"branch-alias": {
"dev-main": "1.9-dev"
},
"class": "Symfony\\Flex\\Flex"
},
"autoload": {
@ -3922,7 +4213,21 @@
}
],
"description": "Composer plugin for Symfony",
"time": "2020-10-14T17:41:54+00:00"
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-10-07T08:51:39+00:00"
},
{
"name": "symfony/form",
@ -4917,35 +5222,6 @@
],
"time": "2020-10-24T12:01:57+00:00"
},
{
"name": "symfony/orm-pack",
"version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/orm-pack.git",
"reference": "21ac491414b5815e5ebb7425908c1d1568d2e775"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/orm-pack/zipball/21ac491414b5815e5ebb7425908c1d1568d2e775",
"reference": "21ac491414b5815e5ebb7425908c1d1568d2e775",
"shasum": ""
},
"require": {
"composer/package-versions-deprecated": "*",
"doctrine/common": "^2",
"doctrine/doctrine-bundle": "^2",
"doctrine/doctrine-migrations-bundle": "^2",
"doctrine/orm": "^2"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for the Doctrine ORM",
"time": "2020-08-31T10:20:18+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.20.0",
@ -5504,33 +5780,6 @@
"homepage": "https://symfony.com",
"time": "2020-10-24T12:01:57+00:00"
},
{
"name": "symfony/profiler-pack",
"version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/profiler-pack.git",
"reference": "29ec66471082b4eb068db11eb4f0a48c277653f7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/profiler-pack/zipball/29ec66471082b4eb068db11eb4f0a48c277653f7",
"reference": "29ec66471082b4eb068db11eb4f0a48c277653f7",
"shasum": ""
},
"require": {
"symfony/stopwatch": "*",
"symfony/twig-bundle": "*",
"symfony/web-profiler-bundle": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for the Symfony web profiler",
"time": "2020-08-12T06:50:46+00:00"
},
{
"name": "symfony/property-access",
"version": "v5.1.8",
@ -6134,35 +6383,6 @@
"homepage": "https://symfony.com",
"time": "2020-10-24T12:01:57+00:00"
},
{
"name": "symfony/serializer-pack",
"version": "v1.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer-pack.git",
"reference": "61173947057d5e1bf1c79e2a6ab6a8430be0602e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/serializer-pack/zipball/61173947057d5e1bf1c79e2a6ab6a8430be0602e",
"reference": "61173947057d5e1bf1c79e2a6ab6a8430be0602e",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.0",
"phpdocumentor/reflection-docblock": "*",
"symfony/property-access": "*",
"symfony/property-info": "*",
"symfony/serializer": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for the Symfony serializer",
"time": "2020-10-19T08:52:16+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.2.0",
@ -6396,6 +6616,7 @@
],
"description": "Symfony SwiftmailerBundle",
"homepage": "http://symfony.com",
"abandoned": "symfony/mailer",
"time": "2020-10-06T05:51:35+00:00"
},
{
@ -6750,33 +6971,6 @@
"homepage": "https://symfony.com",
"time": "2020-10-24T12:01:57+00:00"
},
{
"name": "symfony/twig-pack",
"version": "v1.0.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-pack.git",
"reference": "08a73e833e07921c464336deb7630f93e85ef930"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-pack/zipball/08a73e833e07921c464336deb7630f93e85ef930",
"reference": "08a73e833e07921c464336deb7630f93e85ef930",
"shasum": ""
},
"require": {
"symfony/twig-bundle": "*",
"twig/extra-bundle": "^2.12|^3.0",
"twig/twig": "^2.12|^3.0"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A Twig pack for Symfony projects",
"time": "2020-10-19T08:46:41+00:00"
},
{
"name": "symfony/validator",
"version": "v5.1.8",
@ -7468,12 +7662,12 @@
"version": "1.9.1",
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
"url": "https://github.com/webmozarts/assert.git",
"reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
"reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
"shasum": ""
},
@ -7944,34 +8138,6 @@
"homepage": "https://symfony.com",
"time": "2020-10-24T12:01:57+00:00"
},
{
"name": "symfony/debug-pack",
"version": "v1.0.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-pack.git",
"reference": "cfd5093378e9cafe500f05c777a22fe8a64a9342"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-pack/zipball/cfd5093378e9cafe500f05c777a22fe8a64a9342",
"reference": "cfd5093378e9cafe500f05c777a22fe8a64a9342",
"shasum": ""
},
"require": {
"symfony/debug-bundle": "*",
"symfony/monolog-bundle": "^3.0",
"symfony/profiler-pack": "*",
"symfony/var-dumper": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A debug pack for Symfony projects",
"time": "2020-10-19T08:51:51+00:00"
},
{
"name": "symfony/dom-crawler",
"version": "v5.1.8",
@ -8093,33 +8259,6 @@
"description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com",
"time": "2020-10-24T15:53:55+00:00"
},
{
"name": "symfony/test-pack",
"version": "v1.0.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/test-pack.git",
"reference": "e61756c97cbedae00b7cf43b87abcfadfeb2746c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/test-pack/zipball/e61756c97cbedae00b7cf43b87abcfadfeb2746c",
"reference": "e61756c97cbedae00b7cf43b87abcfadfeb2746c",
"shasum": ""
},
"require": {
"symfony/browser-kit": "*",
"symfony/css-selector": "*",
"symfony/phpunit-bridge": "*"
},
"type": "symfony-pack",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A pack for functional and end-to-end testing within a Symfony app",
"time": "2020-10-19T08:52:28+00:00"
}
],
"aliases": [],
@ -8132,5 +8271,6 @@
"ext-ctype": "*",
"ext-iconv": "*"
},
"platform-dev": []
"platform-dev": [],
"plugin-api-version": "1.1.0"
}

View File

@ -20,4 +20,5 @@ return [
Oneup\UploaderBundle\OneupUploaderBundle::class => ['all' => true],
Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true],
Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true],
Endroid\QrCodeBundle\EndroidQrCodeBundle::class => ['all' => true],
];

View File

@ -0,0 +1,9 @@
endroid_qr_code:
default:
writer: Endroid\QrCode\Writer\PngWriter
size: 300
margin: 10
encoding: 'UTF-8'
errorCorrectionLevel: 'low'
roundBlockSizeMode: 'margin'
validateResult: false

View File

@ -196,6 +196,18 @@ app_illustration_submit:
path: /user/illustration/submit/{by}/{userid}
defaults: { _controller: App\Controller\IllustrationController:submit }
app_illustration_submits01:
path: /user/illustration/submits01/{by}/{userid}
defaults: { _controller: App\Controller\IllustrationController:submits01 }
app_illustration_submits02:
path: /user/illustration/submits02/{by}/{userid}/{categoryid}
defaults: { _controller: App\Controller\IllustrationController:submits02 }
app_illustration_submits03:
path: /user/illustration/submits03/{by}/{userid}/{categoryid}
defaults: { _controller: App\Controller\IllustrationController:submits03 }
app_illustration_update:
path: /user/illustration/update/{id}/{by}
defaults: { _controller: App\Controller\IllustrationController:update }
@ -269,7 +281,7 @@ app_link_delete:
#== Slide =====================================================================================================
app_slide:
path: /slide
path: /slide/{userpseudo}
defaults: { _controller: App\Controller\SlideController:slide }
#== Home USer==================================================================================================
@ -277,3 +289,7 @@ app_slide:
app_home_user:
path: /{userpseudo}
defaults: { _controller: App\Controller\HomeController:user }
app_home_userhero:
path: /hero/{userpseudo}
defaults: { _controller: App\Controller\HomeController:userhero }

View File

@ -0,0 +1,3 @@
endroid_qr_code:
resource: "@EndroidQrCodeBundle/Resources/config/routes.yaml"
prefix: /qr-code

View File

@ -297,7 +297,7 @@ th.dt-center, td.dt-center { text-align: center; }
text-align: left;
position:absolute;
top: 80px;
left:50px;
padding-left:50px;
z-index: 9000;
}
@ -346,7 +346,7 @@ th.dt-center, td.dt-center { text-align: center; }
@media (max-width: 980px) {
.herobox { display: none; }
.herotitle { width:100%; top: 70px; left:0px; text-align:center; }
.herotitle { width:100%; top: 70px; padding-left:0px; text-align:center; }
.slick-dots { top: 120px; left: 0px; text-align: center; width: 100%; }
.heromenu .facatmenu {display: none;}
.catmenu { display:none }

View File

@ -71,6 +71,22 @@ class HomeController extends AbstractController
]);
}
public function userhero($userpseudo)
{
$em = $this->getDoctrine()->getManager();
$user=$em->getRepository("App:User")->findOneBy(["slug"=>$userpseudo]);
$illustrations = $em->getRepository("App:Illustration")->findByUser($user);
$webzines = $em->getRepository("App:Webzine")->findBy(["user"=>$user], ['set' => 'ASC', 'order' => 'ASC']);
$config = $em->getRepository("App:Config")->getUserConfig($user);
return $this->render('Home/userhero.html.twig',[
"user" => $user,
"config" => $config,
"illustrations" => $illustrations,
"webzines" => $webzines
]);
}
public function feedhome($nb)
{

View File

@ -2,13 +2,15 @@
namespace App\Controller;
use App\Entity\Category;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Entity\Illustration as Entity;
use App\Form\IllustrationType as Form;
use App\Form\IllustrationCategoryType as FormCategory;
use DateTime;
class IllustrationController extends AbstractController
{
@ -57,6 +59,9 @@ class IllustrationController extends AbstractController
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
$nowWithMicroseconds = DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)));
$data->setSubmittime($nowWithMicroseconds);
// Permission
if(!$this->getUser()->hasRole("ROLE_ADMIN")&&($by=="admin"||$by=="update")) {
@ -79,9 +84,10 @@ class IllustrationController extends AbstractController
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$data->setSubmittime(new \DateTime());
$data->setUpdatetime(new \DateTime());
$data = $form->getData();
$nowWithMicroseconds = DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)));
$data->setSubmittime($nowWithMicroseconds);
$data->setUpdatetime($nowWithMicroseconds);
$em->persist($data);
$em->flush();
@ -107,7 +113,120 @@ class IllustrationController extends AbstractController
'userid' => $userid,
]);
}
public function submits01($by, $userid, Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
$nowWithMicroseconds = DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)));
$data->setSubmittime($nowWithMicroseconds);
// Permission
if(!$this->getUser()->hasRole("ROLE_ADMIN")&&($by=="admin"||$by=="update")) {
return $this->redirectToRoute("app_home");
}
// Création du formulaire
if($by=="admin"||$by=="update") {
$form = $this->createForm(FormCategory::class,$data,array("mode"=>"submit","by"=>$by,"user"=>$em->getRepository("App:User")->find($userid)));
} else {
$form = $this->createForm(FormCategory::class,$data,array("mode"=>"submit","by"=>$by,"user"=>$this->getUser()));
}
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$categoryid=$data->getCategory()->getId();
return $this->redirectToRoute('app_illustration_submits02',["by"=>$by,"userid"=>$userid,"categoryid"=>$categoryid]);
}
// Affichage du formulaire
return $this->render($this->render.'submits01.html.twig', [
'useheader' => true,
'usesidebar' => ($by=="admin" || $by=="update"),
$this->data => $data,
'mode' => 'submit',
'form' => $form->createView(),
'by' => $by,
'userid' => $userid,
]);
}
public function submits02($by, $userid, $categoryid, Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
$nowWithMicroseconds = DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)));
$data->setSubmittime($nowWithMicroseconds);
// Permission
if(!$this->getUser()->hasRole("ROLE_ADMIN")&&($by=="admin"||$by=="update")) {
return $this->redirectToRoute("app_home");
}
if($by!="admin"&&$by!="update") {
if($this->getUser()!=$em->getRepository(Category::class)->find($categoryid)->getUser()&&!$this->getUser()->hasRole("ROLE_ADMIN"))
return $this->redirectToRoute("app_home");
}
// Affichage du formulaire
return $this->render($this->render.'submits02.html.twig', [
'useheader' => true,
'usesidebar' => ($by=="admin" || $by=="update"),
$this->data => $data,
'mode' => 'submit',
'by' => $by,
'userid' => $userid,
'categoryid' => $categoryid,
]);
}
public function submits03($by, $userid, $categoryid, Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
$nowWithMicroseconds = DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)));
$data->setSubmittime($nowWithMicroseconds);
$data->setUpdatetime($nowWithMicroseconds);
$category=$em->getRepository(Category::class)->find($categoryid);
// Permission
if(!$this->getUser()->hasRole("ROLE_ADMIN")&&($by=="admin"||$by=="update")) {
return $this->redirectToRoute("app_home");
}
if($by!="admin"&&$by!="update") {
if($this->getUser()!=$category->getUser()&&!$this->getUser()->hasRole("ROLE_ADMIN"))
return $this->redirectToRoute("app_home");
}
$illustration=$request->request->get('illustration');
$width=$request->request->get('width');
$height=$request->request->get('height');
$name=$request->request->get('name');
$data->setName($name);
$data->setIllustration($illustration);
$data->setWidth($width);
$data->setHeight($height);
$data->setCategory($category);
$em->persist($data);
$em->flush();
return new JsonResponse();
}
public function update($id,$by,Request $request)
{
// Initialisation de l'enregistrement

View File

@ -17,229 +17,30 @@ class SlideController extends AbstractController
private $render = "Illustration/";
private $entity = "App:Illustration";
public function slide(Request $request)
public function slide($userpseudo,Request $request)
{
$em = $this->getDoctrine()->getManager();
$datas = $em->getRepository($this->entity)->findAll();
$user=$em->getRepository("App:User")->findOneBy(["slug"=>$userpseudo]);
if(!$user) return $this->redirectToRoute("app_home");
$qb = $em ->createQueryBuilder()
->select('i')
->from("App:Illustration", 'i')
->from("App:Category", 'c')
->from("App:User",'u')
->Where('c=i.category')
->andWhere('u=c.user')
->andWhere('u.slug=:userpseudo')
->setParameter('userpseudo',$userpseudo)
->orderBy('i.submittime','DESC');
$illustrations=$qb->getQuery()->getResult();
return $this->render($this->render.'slide.html.twig',[
$this->data."s" => $datas,
$this->data."s" => $illustrations,
"useheader" => false,
"usesidebar" => false,
"usemonocolor" => true,
"user" => $user,
]);
}
public function view($idcat,$id,Request $request)
{
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
$datanext=$this->getDataAllNext($idcat,$id);
$dataprev=$this->getDataAllPrev($idcat,$id);
$pathinfo=pathinfo($data->getIllustration());
if(!$data) return $this->redirectToRoute('app_home');
return $this->render($this->render.'view.html.twig', array(
$this->data => $data,
"prev" => $dataprev,
"next" => $datanext,
"pathinfo" => $pathinfo,
"usemonocolor" => true,
));
}
public function submit($by, Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$data->setSubmittime(new \DateTime());
$em->persist($data);
$em->flush();
// Retour à la liste
if($by=="console")
return $this->redirectToRoute($this->route);
else
return $this->redirectToRoute("app_home");
}
// Affichage du formulaire
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => false,
$this->data => $data,
'mode' => 'submit',
'form' => $form->createView(),
'by' => $by,
]);
}
public function update($id,$by,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"update"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm($id,$form,$request,$data,"update");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à l'illustration
if($by=="console")
return $this->redirectToRoute($this->route);
else
return $this->redirectToRoute($this->route.'_view',array("idcat"=>$data->getCategory()->getId(),"id"=> $id));
}
// Affichage du formulaire
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => false,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView(),
'by' => $by,
]);
}
public function delete($id,$by,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Controle avant suppression
$error=false;
if($id<0) $error=true;
if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else {
$em->remove($data);
$em->flush();
// Retour à la liste
if($by=="console")
return $this->redirectToRoute($this->route);
else
return $this->redirectToRoute("app_home");
}
}
public function upload()
{
return $this->render($this->render.'upload.html.twig');
}
protected function getDataAllNext($idcat,$id)
{
$em = $this->getDoctrine()->getManager();
$data = $em->createQueryBuilder()
->select('e')
->from($this->entity, 'e')
->where('e.id>:id')
->andWhere('e.category=:idcat')
->getQuery()
->setParameter("id", $id)
->setParameter("idcat", $idcat)
->setMaxResults(1)
->getResult();
// Si pas de suivant on recherche le premier
if(!$data) {
$data = $em->createQueryBuilder()
->select('e')
->from($this->entity, 'e')
->Where('e.category=:idcat')
->getQuery()
->setParameter("idcat", $idcat)
->setMaxResults(1)
->getResult();
}
return $data;
}
protected function getDataAllPrev($idcat,$id)
{
$em = $this->getDoctrine()->getManager();
$data = $em->createQueryBuilder()
->select('e')
->from($this->entity, 'e')
->where('e.id<:id')
->andWhere('e.category=:idcat')
->orderBy('e.id','DESC')
->getQuery()
->setParameter("id", $id)
->setParameter("idcat", $idcat)
->setMaxResults(1)
->getResult();
// Si pas de précedent on recherche le dernier
if(!$data) {
$data = $em->createQueryBuilder()
->select('e')
->from($this->entity, 'e')
->Where('e.category=:idcat')
->orderBy('e.id','DESC')
->getQuery()
->setParameter("idcat", $idcat)
->setMaxResults(1)
->getResult();
}
return $data;
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}
if ($form->get('submit')->isClicked() && $mode=="submit") {
}
if ($form->get('submit')->isClicked() && ($mode=="submit" || $mode=="update")) {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$errors = $form->getErrors();
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
}
}
}

View File

@ -41,7 +41,7 @@ class UserController extends AbstractController
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit"));
$form = $this->createForm(Form::class,$data,array("mode"=>"submit","appNinegateactivate"=>$this->getParameter("appNinegateactivate")));
// Récupération des data du formulaire
$form->handleRequest($request);

View File

@ -284,8 +284,8 @@ class WebzineController extends AbstractController
$page=$em->getRepository("App:Webzinepage")->find($id);
$sets=$em->getRepository($this->entity)->findBy(["set"=>$webzine->getSet()],["order"=>"ASC"]);
$datanext=$this->getDataAllNext($idcat,$id,$webzine);
$dataprev=$this->getDataAllPrev($idcat,$id,$webzine);
$datanext=$this->getDataAllNext($idcat,$page->getOrder(),$webzine);
$dataprev=$this->getDataAllPrev($idcat,$page->getOrder(),$webzine);
$pathinfo=pathinfo($page->getIllustration());
@ -304,17 +304,17 @@ class WebzineController extends AbstractController
}
protected function getDataAllNext($idcat,$id,$webzine)
protected function getDataAllNext($idcat,$order,$webzine)
{
$em = $this->getDoctrine()->getManager();
$data = $em->createQueryBuilder()
->select('e')
->from("App:Webzinepage", 'e')
->where('e.id>:id')
->where('e.order>:order')
->andWhere('e.webzine=:idcat')
->orderBy("e.order","ASC")
->getQuery()
->setParameter("id", $id)
->setParameter("order", $order)
->setParameter("idcat", $idcat)
->setMaxResults(1)
->getResult();
@ -348,17 +348,17 @@ class WebzineController extends AbstractController
return $data;
}
protected function getDataAllPrev($idcat,$id,$webzine)
protected function getDataAllPrev($idcat,$order,$webzine)
{
$em = $this->getDoctrine()->getManager();
$data = $em->createQueryBuilder()
->select('e')
->from("App:Webzinepage", 'e')
->where('e.id<:id')
->where('e.order<:order')
->andWhere('e.webzine=:idcat')
->orderBy("e.order","DESC")
->getQuery()
->setParameter("id", $id)
->setParameter("order", $order)
->setParameter("idcat", $idcat)
->setMaxResults(1)
->getResult();

View File

@ -30,12 +30,12 @@ class Illustration
private $description;
/**
* @ORM\Column(type="datetime")
* @ORM\Column(type="datetime", precision=6)
*/
private $submittime;
/**
* @ORM\Column(type="datetime")
* @ORM\Column(type="datetime", precision=6)
*/
private $updatetime;
@ -96,7 +96,6 @@ class Illustration
public function setSubmittime(\DateTimeInterface $submittime): self
{
$this->submittime = $submittime;
return $this;
}

View File

@ -433,6 +433,7 @@ class User implements UserInterface, \Serializable
{
$this->pseudo = $pseudo?$pseudo:$this->username;
$pseudo=strtolower($this->pseudo);
$pseudo=str_replace("'","",$pseudo);
if($pseudo=="admin"||$pseudo=="user"||$pseudo=="feed"||$pseudo=="_uploader") $pseudo.="home";
$this->slug = $pseudo;
return $this;

View File

@ -0,0 +1,65 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
class IllustrationCategoryType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
if($options["by"]=="admin") {
$builder->add('category',
EntityType::class, [
"class" => "App:Category",
"label" => "Categorie",
"choice_label"=> function($category) {
return $category->getUser()->getUsername(). ' = ' . $category->getName();
},
"group_by" => function($category) {
return $category->getUser()->getUsername();
},
]
);
}
else {
$builder->add('category',
EntityType::class, [
"class" => "App:Category",
"label" => "Categorie",
"choice_label"=> "name",
'query_builder' => function (EntityRepository $er) use ($options): QueryBuilder {
return $er->createQueryBuilder('c')->where('c.user=:user')->setParameter('user',$options['user']->getId())->orderBy('c.order', 'ASC');
},
]
);
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Illustration',
'mode' => 'string',
'by' => 'string',
'user' => 'App\Entity\User'
));
}
}

View File

@ -7,6 +7,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
@ -41,7 +42,16 @@ class IllustrationType extends AbstractType
],
]
);
$builder->add('submittime',
DateTimeType::class, [
"label" =>"Date de Publication",
"date_widget" => "single_text",
"time_widget" => "single_text",
]
);
if($options["by"]=="admin") {
$builder->add('category',
EntityType::class, [

View File

@ -52,6 +52,7 @@ class UserType extends AbstractType
if($options["mode"]!="profil") {
$choices=[];
$choices['Administrateur']='ROLE_ADMIN';
$choices['Membre']='ROLE_MEMBER';
$choices['Utilisateur']='ROLE_USER';
$builder->add('roles',

View File

@ -55,6 +55,9 @@ class uploadListener
case "image/x-png":
$source=imagecreatefrompng($image);
break;
case 'image/webp':
$source = imagecreatefromwebp($image);
break;
}
$newImage = imagecreatetruecolor( $newImageWidth, $newImageHeight );
@ -75,6 +78,8 @@ class uploadListener
case "image/x-png":
imagepng($newImage,$image);
break;
case 'image/webp':
imagewebp($newImage, $image, 90);
}
chmod($image, 0640);

View File

@ -84,6 +84,9 @@
"egulias/email-validator": {
"version": "2.1.17"
},
"endroid/qr-code-bundle": {
"version": "4.1.1"
},
"exsyst/swagger": {
"version": "v0.4.1"
},

View File

@ -0,0 +1,551 @@
{% extends "base.html.twig" %}
{% block localstyle %}
#main {
padding: 0px;
display:none;
margin-bottom:200px;
}
{% if app.session.get("appthumbfilter")=="1" %}
.cssfilter {
filter: grayscale({{app.session.get("appthumbfiltergrayscale")}}%) opacity({{app.session.get("appthumbfilteropacity")}}%) sepia({{app.session.get("appthumbfiltersepia")}}%);
transition: -webkit-filter 0.1s;
}
.cssfilter:hover {
filter: unset;
-webkit-filter: unset;
-moz-filter: unset;
-o-filter: unset;
-ms-filter: unset;
-webkit-transition: -webkit-filter 0.1s;
transition: -webkit-filter 0.1s;
}
{% endif %}
{% endblock %}
{% block body %}
<!-- FOLIOMENU -----------------------------------------------------------------------------------------------------------------------------------------------!-->
<div class="foliomenu">
<a href="#top"><img src="{{ asset("uploads/logo/"~app.session.get("logodark")) }}" class="logo"></a>
<div>
{% if users is not empty %}
<i class="fa fa-circle fa-fw"></i> <a href="#membre">Membres</a>&nbsp;
{% endif %}
{% if illustrations is not empty %}
<i class="fa fa-circle fa-fw"></i> <a href="#illustration">Illustrations</a>&nbsp;
{% endif %}
{% if not webzines is empty %}
<i class="fa fa-circle fa-fw"></i> <a href="#webzine">Webzines</a>&nbsp;
{% endif %}
{% if not links is empty %}
<i class="fa fa-circle fa-fw"></i> <a href="#link">Liens</a>&nbsp;
{% endif %}
</div>
<div class="float-right">
{% if app.user %}
<a href="{{path("app_user_profil")}}">
<img src="{{app.user.avatar|urlavatar}}" class="avatar">
</a>
{% if is_granted('ROLE_ADMIN') %}
<a href={{ path("app_admin") }} class="btn btn-link" title="Configuration">
<i class="fa fa-cog fa-fw"></i>
</a>
{% endif %}
<a href="" data-toggle="modal" data-target="#addmodal">
<i class="fa fa-plus fa-fw"></i>
</a>
<a href={{ path("app_logout") }} class="btn btn-link" title="Déconnexion">
<i class="fa fa-sign-out-alt fa-fw"></i>
</a>
{% else %}
{% if(appNinegateurl and appNinegatemoderegistration!="none") %}
<a href="{{appNinegateurl}}/registration?redirect={{app.request.uri}}" class="btn btn-link" title="Inscription">
<i class="fa fa-user-plus fa-fw"></i>
</a>
{% endif %}
<a href={{ path("app_login") }} class="btn btn-link" title="Connexion">
<i class="fa fa-sign-in-alt fa-fw"></i>
</a>
{% endif %}
</div>
</div>
<div class="foliotop">
<a href="#top"><i class="fa fa-chevron-up"></i></a>
</div>
<!-- HEROHEADER ------------------------------------------------------------------------------------------------------------------------------------------------!-->
<div id="top" class="heroheader" displaynone>
{%if not app.session.get("hero01") is empty %}
<div class="cssfilter" style="background-image:url(/{{appAlias}}/uploads/hero/{{app.session.get("hero01")}})"></div>
{%endif%}
{%if not app.session.get("hero02") is empty %}
<div class="cssfilter"style="background-image:url(/{{appAlias}}/uploads/hero/{{app.session.get("hero02")}})"></div>
{%endif%}
{%if not app.session.get("hero03") is empty %}
<div class="cssfilter"style="background-image:url(/{{appAlias}}/uploads/hero/{{app.session.get("hero03")}})"></div>
{%endif%}
{%if not app.session.get("hero04") is empty %}
<div class="cssfilter"style="background-image:url(/{{appAlias}}/uploads/hero/{{app.session.get("hero04")}})"></div>
{%endif%}
{%if not app.session.get("hero05") is empty %}
<div class="cssfilter"style="background-image:url(/{{appAlias}}/uploads/hero/{{app.session.get("hero05")}})"></div>
{%endif%}
</div>
<div class="herofloatmenu" style="position: absolute; top: 0px; right: 10px;">
{% if app.user %}
<a href="{{path("app_user_profil")}}">
<img src="{{app.user.avatar|urlavatar}}" class="avatar">
</a>
{% if is_granted('ROLE_ADMIN') %}
<a href={{ path("app_admin") }} class="btn btn-link" title="Configuration">
<i class="fa fa-cog fa-fw"></i>
</a>
{% endif %}
<a href="" data-toggle="modal" class="btn btn-link" data-target="#addmodal">
<i class="fa fa-plus fa-fw"></i>
</a>
<a href={{ path("app_logout") }} class="btn btn-link" title="Déconnexion">
<i class="fa fa-sign-out-alt fa-fw"></i>
</a>
{% else %}
{% if(appNinegateurl and appNinegatemoderegistration!="none") %}
<a href="{{appNinegateurl}}/registration?redirect={{app.request.uri}}" class="btn btn-link" title="Inscription">
<i class="fa fa-user-plus fa-fw"></i>
</a>
{% endif %}
<a href={{ path("app_login") }} class="btn btn-link" title="Connexion">
<i class="fa fa-sign-in-alt fa-fw"></i>
</a>
{% endif %}
</div>
<div class="herobox"></div>
<div class="herotitle">
<h1><a href="#site">{{ (app.session.get("appname")) }}</a></h1>
<div class="heromenu" >
{% if not app.session.get("appsubname") is empty %}
<i style="font-size:80%;">{{ app.session.get("appsubname") }}</i><br>
{% endif %}
<div class="linkmenu" style="clear:both">
{% if app.session.get('email') is not empty %}
<a href="mailto:{{ app.session.get('email') }}" target="_blank" title="Email"><i class="fas fa-envelope fa-2x"></i></a>
{% endif %}
{% if app.session.get('facebook') is not empty %}
<a href="{{ app.session.get('facebook') }}" target="_blank" title="Facebook"><i class="fab fa-facebook fa-2x"></i></a>
{% endif %}
{% if app.session.get('instagram') is not empty %}
<a href="{{ app.session.get('instagram') }}" target="_blank" title="Instagram"><i class="fab fa-instagram fa-2x"></i></a>
{% endif %}
{% if app.session.get('twitter') is not empty %}
<a href="{{ app.session.get('twitter') }}" target="_blank" title="Twitter"><i class="fab fa-twitter fa-2x"></i></a>
{% endif %}
{% if app.session.get('google') is not empty %}
<a href="{{ app.session.get('google') }}" target="_blank" title="Google"><i class="fab fa-google-plus fa-2x"></i></a>
{% endif %}
{% if app.session.get('youtube') is not empty %}
<a href="{{ app.session.get('youtube') }}" target="_blank" title="Youtube"><i class="fab fa-youtube fa-2x"></i></a>
{% endif %}
<a href="{{ path("app_feedhome") }}" target="_blank" title="RSS"><i class="fa fa-rss-square fa-2x"></i></a>
</div>
<div class="catmenu">
{% if not users is empty %}
<a href="#membre"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Membres</a><br>
{% endif %}
{% if not illustrations is empty %}
<a href="#illustration"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Illustrations</a><br>
{% endif %}
{% if not webzines is empty %}
<a href="#webzine"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Webzines</a><br>
{% endif %}
{% if not links is empty %}
<a href="#link"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Liens</a><br>
{% endif %}
</div>
{% if not items is empty %}
<div class="itemmenu" style="max-width:360px; display:flex; margin:20px auto 0px auto; flex-wrap: wrap; justify-content: center; zoom: 75%">
{% for item in items %}
{% if item.title|lower != "ninefolio" %}
<a href="{{ item.url }}" target="_blank">
<div class="item" style="display:flex; flex-direction: column; align-items: center; font-size:15px; padding:5px; width:90px;">
<img src="{{ item.icon }}" style="width:50px;height:50px">
<span style="margin-top:5px">{{ item.title }}</span>
</div>
</a>
{% endif %}
{% endfor %}
</div>
{% endif %}
</div>
</div>
<div class="herologo">
<img src="/{{ appAlias }}/uploads/logo/{{ app.session.get('logodark') }}">
</div>
<!-- GRID ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% set style="margin:30px" %}
{% if app.session.get("appmaxthumbwidth")!="0" %}
{% set style="max-width:"~app.session.get("appmaxthumbwidth")~"px; margin:30px auto;" %}
{% endif %}
<div class="grid" style="{{ style }}">
<div class="grid-sizer"></div>
<div class="gutter-sizer"></div>
<!-- SITE ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
<div>
<div id="site" class="grid-item grid-item-full"><h1 class="mt-5 mb-3"></h1></div>
<div class="grid-item grid-item-size grid-item-size-3 grid-item-size-square cssfilter" style="height:200px;background-position: center; background-size: cover; background-image: url(/{{ appAlias }}/uploads/image/{{ app.session.get("imgcontact")}});">
</div>
<div class="grid-item grid-item-size grid-item-size-6 grid-item-size-noresize" style="padding:0px 15px;word-break:break-word;">
<h1 style="border:none; padding:0px;">{{ app.session.get("appname")}}</h1>
{% if not app.session.get("appsubname") is empty %}
{{ app.session.get("appsubname")}}<br>
{%endif%}
{% if not app.session.get("appdescription") is empty %}
<br>{{ app.session.get("appdescription")|raw}}
{%endif%}
{% if app.session.get('email') is not empty or app.session.get('facebook') is not empty or app.session.get('instagram') is not empty or app.session.get('twitter') is not empty or app.session.get('google') is not empty or app.session.get('youtube') is not empty %}
<br><br>
{% endif %}
{% if app.session.get('email') is not empty %}
<i class="fas fa-envelope"></i> Email = <a href="mailto:{{ app.session.get('email') }}" target="_blank" title="Email">{{ app.session.get('email') }}</a><br>
{% endif %}
{% if app.session.get('facebook') is not empty %}
<i class="fab fa-facebook"></i> Facebook = <a href="{{ app.session.get('facebook') }}" target="_blank" title="Facebook">{{ app.session.get('facebook') }}</a><br>
{% endif %}
{% if app.session.get('instagram') is not empty %}
<i class="fab fa-instagram"></i> Instagram = <a href="{{ app.session.get('instagram') }}" target="_blank" title="Instagram">{{ app.session.get('instagram') }}</a><br>
{% endif %}
{% if app.session.get('twitter') is not empty %}
<i class="fab fa-twitter"></i> Twitter = <a href="{{ app.session.get('twitter') }}" target="_blank" title="Twitter">{{ app.session.get('twitter') }}</a><br>
{% endif %}
{% if app.session.get('google') is not empty %}
<i class="fab fa-google-plus"></i> Google = <a href="{{ app.session.get('google') }}" target="_blank" title="Google">{{ app.session.get('google') }}</a><br>
{% endif %}
{% if app.session.get('youtube') is not empty %}
<i class="fab fa-youtube"></i> Youtube = <a href="{{ app.session.get('youtube') }}" target="_blank" title="Youtube">{{ app.session.get('youtube') }}</a><br>
{% endif %}
</div>
</div>
<!-- MEMBRE ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if not users is empty %}
<div>
<div id="membre" class="grid-item grid-item-full"><h1 class="mt-5 mb-3">Membres</h1></div>
{% for user in users %}
{% if user.hasRole('ROLE_MEMBER') %}
<div class="grid-item grid-item-size grid-item-size-15 grid-item-size-small-3 grid-item-size-noresize" style="padding:0px 5px;margin-bottom:10px;">
<a class="member" href="{{path("app_home_user",{userpseudo:user.slug})}}">
<img src="/{{ appAlias }}/uploads/avatar/{{ user.avatar }}" class="mb-2">
<small>{{user.pseudo}}</small>
</a>
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
<!-- ILLUSTRATION ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if not illustrations is empty %}
<div>
<div id="illustration" class="grid-item grid-item-full"><h1 class="mt-5 mb-3">Illustrations</h1></div>
{% for illustration in illustrations %}
{% set appthumbwidth=app.session.get("appthumbwidth") %}
{% set appthumbheight=app.session.get("appthumbheight") %}
{% set classmini="" %}
{% if appthumbwidth==0 %}
{% set class="" %}
{% if loop.index < 40 %}
{% if loop.index == 1 %}
{% set class="grid-item-size-4" %}
{% elseif loop.index is divisible by(28) %}
{% set class="grid-item-size-4" %}
{% elseif loop.index is divisible by(7) %}
{% set class="grid-item-size-2" %}
{% elseif loop.index is divisible by(46) %}
{% set class="grid-item-size-4" %}
{% endif %}
{% elseif loop.index > 48 %}
{% if loop.index == 49 %}
{% set class="grid-item-size-4" %}
{% elseif (loop.index-49) is divisible by(28) %}
{% set class="grid-item-size-4" %}
{% elseif (loop.index-49) is divisible by(7) %}
{% set class="grid-item-size-2" %}
{% endif %}
{% endif %}
{% set position = (loop.index - 1) % 10 + 1 %}
{% if position == 1 or position == 8 %}
{% set classmini = 'grid-item-mini-50' %}
{% else %}
{% set classmini = 'grid-item-mini-25' %}
{% endif %}
{% elseif appthumbwidth==1 %} {% set class="" %}
{% elseif appthumbwidth==2 %} {% set class="grid-item-size-2" %}
{% endif %}
{%if appthumbheight==0 %}
{% set class=class~" grid-item-size-square" %}
{% elseif appthumbheight==1 %}
{% set class=class~" grid-item-size-proportion" %}
{% else %}
{% set class=class~" grid-item-size-page" %}
{% endif %}
{% set source="thumb_"~illustration.illustration %}
{% if appthumbheight!=0 %}
{% set source="thumbori_"~illustration.illustration %}
{% endif %}
{% set source=source~"?"~illustration.updatetime|date('ymdHis') %}
<a href="{{ path("app_illustration_view",{"by":"home","idcat":illustration.category.id,"id":illustration.id}) }}">
<div data-loop="{{loop.index}}" id="illustration{{illustration.id}}" class="grid-item grid-item-size {{class}} {{classmini}} cssfilter" data-width="{{illustration.width}}" data-background-image="/{{ appAlias }}/uploads/illustration/{{source}}" data-height="{{illustration.height}}" style="height:auto;background-position: center ; background-size: cover; background-image: url(/{{ appAlias }}/uploads/illustration/{{source}}");">
</div>
</a>
{% endfor %}
</div>
{% endif %}
<!-- WEBZINE ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if not webzines is empty %}
<div>
<div id="webzine" class="grid-item grid-item-full"><h1 class="mt-5 mb-3">Webzines</h1></div>
{% set setname="" %}
{% for webzine in webzines %}
{% if not webzine.webzinepages is empty %}
{% if setname!=webzine.set %}
{% if not webzine.set is empty %}
<div id="webzine" class="grid-item grid-item-full"><h2 class="mt-3 pl-3">{{webzine.set}}</h2></div>
{% endif %}
{% set setname=webzine.set %}
{% endif %}
{% set page=webzine.webzinepages[0] %}
{% set source="thumbori_"~page.illustration %}
{% set class=" grid-item-size-2 grid-item-size-page" %}
<a href="{{ path("app_webzine_view",{"by":"home","idcat":webzine.id,"id":page.id}) }}">
<div id="webzine{{webzine.id}}" class="grid-item grid-item-size {{class}} cssfilter" data-width="{{page.width}}" data-background-image="/{{ appAlias }}/uploads/webzine/{{source}}" data-height="{{page.height}}" style="height:auto;background-position: center ; background-size: cover; background-image: url(/{{ appAlias }}/uploads/webzine/{{source}}");">
</div>
</a>
{% endif %}
{% endfor %}
</div>
{% endif %}
<!-- LINK ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if not links is empty %}
<div>
<div id="link" class="grid-item grid-item-full"><h1 class="mt-5 mb-3">Liens</h1></div>
<div class="grid-item grid-item-size grid-item-size-3 grid-item-size-square cssfilter" style="height:200px;background-position: center; background-size: cover; background-image: url(/{{ appAlias }}/uploads/image/{{ app.session.get("imglink")}});">
</div>
<div class="grid-item grid-item-size grid-item-size-6 grid-item-size-noresize linkurl" style="padding:0px 15px;">
{% for link in links|sort((a, b) => a.order <=> b.order) %}
<a href="{{link.url}}" target="_blank">{{ link.name }}</a>
{% endfor %}
</div>
</div>
{% endif %}
<!-- BOTTOM ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
<div id="bottom" class="grid-item grid-item-full" style="height:300px;margin-top:60px;">
<div style="text-align:center">
{% set qrCode = qr_code_result(absolute_url(path("app_home"))) %}
<img src="{{ qrCode.dataUri }}" width="200px" />
</div>
</div>
</div>
<!-- ADDMODAL ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if app.user %}
<div id="addmodal" class="modal" tabindex="-1" role="dialog" style="z-index:100000">
<div class="modal-dialog modal-md" role="document">
<div class="modal-content" style="margin-top:120px">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" style="display:flex; flex-direction: column;">
<a href={{ path("app_illustration_submit",{"by":"user","userid":app.user.id}) }} class="btn btn-link" style="font-size:30px;" title="Créer une Illustration">
Ajouter une Illustration
</a>
<a href={{ path("app_illustration_submits01",{"by":"user","userid":app.user.id}) }} class="btn btn-link" style="font-size:30px;" title="Créer une Illustration">
Ajouter des Illustrations en masse
</a>
<a href={{ path("app_webzine_submit",{"by":"user","userid":app.user.id}) }} class="btn btn-link" style="font-size:30px;" title="Créer un Webzine">
Ajouter un Webzine
</a>
</div>
</div>
</div>
</div>
{% endif %}
{% endblock %}
{% block localjavascript %}
$(document).ready(function() {
$('body').imagesLoaded(function() {
height=Math.max(500,$(window).height());
$('.heroheader').height(height);
himg=$('.herologo img').height();
$('.herologo').css({ top: (height-himg-50) +'px' });
$('.heroheader').slick({
slidesToShow: 1,
slidesToScroll: 1,
autoplay: true,
autoplaySpeed: 6000,
dots: true,
touchMove: false,
pauseOnDotsHover: true,
fade: true,
cssEase: 'linear',
prevArrow: false,
nextArrow: false,
customPaging: function(slider, i) {
return '<span class="heroheader-dot fa fa-circle fa-fw"></span>';
}
});
$("#main").show();
resizeThumb();
$('.grid').masonry({
columnWidth: '.grid-sizer',
gutter: '.gutter-sizer',
itemSelector: '.grid-item',
percentPosition: true,
horizontalOrder: false,
});
if (location.hash) {
console.log(location.hash);
$(document).scrollTop( $(location.hash).offset().top -60);
// = location.hash;
}
});
});
$(window).resize(function() {
$(window).scroll();
height=Math.max(500,$(window).height());
$('.heroheader').height(height);
himg=$('.herologo img').height();
$('.herologo').css({ top: (height-himg-50) +'px' });
resizeThumb();
});
$(window).scroll(function () {
if($(window).width()>=980) {
// set distance user needs to scroll before we start fadeIn
if ($(this).scrollTop() > 300) {
if($('.foliomenu').is(":hidden")) $('.foliomenu').show();
} else {
if($('.foliomenu').is(":visible")) $('.foliomenu').hide();
}
}
else {
if($('.foliomenu').is(":hidden")) $('.foliomenu').show();
}
if ($(this).scrollTop() > 300) {
if($('.foliotop').is(":hidden")) $('.foliotop').show();
} else {
if($('.foliotop').is(":visible")) $('.foliotop').hide();
}
});
function resizeThumb() {
{% if app.session.get("appmaxthumbwidth")!="0" %}
width=$(window).width();
maxwidth={{ app.session.get("appmaxthumbwidth") }};
if(maxwidth+30>width) {
$(".grid").css("max-width","none");
$(".grid").css("margin","30px");
}
else {
$(".grid").css("max-width","{{ app.session.get("appmaxthumbwidth") }}px");
$(".grid").css("margin","30px auto");
}
{% endif %}
$(".grid-item-size").each(function() {
if(!$(this).hasClass("grid-item-size-noresize")) {
if($(this).hasClass("grid-item-size-square")) {
$(this).height($(this).width());
}
else if($(this).hasClass("grid-item-size-proportion")) {
var width=$(this).width();
var oriwidth=$(this).data("width")
if(oriwidth>0) {
pourcentage=width*100/oriwidth;
height=$(this).data("height")*pourcentage/100;
$(this).height(height);
}
else {
$(this).height($(this).width());
}
}
else {
$(this).height($(this).width()*30/21);
}
}
});
}
{% endblock %}

View File

@ -88,7 +88,7 @@
</div>
<!-- HEROHEADER ------------------------------------------------------------------------------------------------------------------------------------------------!-->
<div id="top" class="heroheader" displaynone>
<div id="top" class="heroheader">
{%if not app.session.get("hero01") is empty %}
<div class="cssfilter" style="background-image:url(/{{appAlias}}/uploads/hero/{{app.session.get("hero01")}})"></div>
{%endif%}
@ -145,254 +145,98 @@
<div class="herobox"></div>
<div class="herotitle">
<h1><a href="#site">{{ (app.session.get("appname")) }}</a></h1>
<div class="herotitle row" style="width:100%">
<div class="col-lg-2 px-3">
<h1><a href="#site">{{ (app.session.get("appname")) }}</a></h1>
<div class="heromenu" >
{% if not app.session.get("appsubname") is empty %}
<i style="font-size:80%;">{{ app.session.get("appsubname") }}</i><br>
{% endif %}
<div class="linkmenu" style="clear:both">
{% if app.session.get('email') is not empty %}
<a href="mailto:{{ app.session.get('email') }}" target="_blank" title="Email"><i class="fas fa-envelope fa-2x"></i></a>
{% endif %}
{% if app.session.get('facebook') is not empty %}
<a href="{{ app.session.get('facebook') }}" target="_blank" title="Facebook"><i class="fab fa-facebook fa-2x"></i></a>
{% endif %}
{% if app.session.get('instagram') is not empty %}
<a href="{{ app.session.get('instagram') }}" target="_blank" title="Instagram"><i class="fab fa-instagram fa-2x"></i></a>
{% endif %}
{% if app.session.get('twitter') is not empty %}
<a href="{{ app.session.get('twitter') }}" target="_blank" title="Twitter"><i class="fab fa-twitter fa-2x"></i></a>
{% endif %}
{% if app.session.get('google') is not empty %}
<a href="{{ app.session.get('google') }}" target="_blank" title="Google"><i class="fab fa-google-plus fa-2x"></i></a>
{% endif %}
{% if app.session.get('youtube') is not empty %}
<a href="{{ app.session.get('youtube') }}" target="_blank" title="Youtube"><i class="fab fa-youtube fa-2x"></i></a>
{% endif %}
<a href="{{ path("app_feedhome") }}" target="_blank" title="RSS"><i class="fa fa-rss-square fa-2x"></i></a>
</div>
<div class="catmenu">
{% if not users is empty %}
<a href="#membre"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Membres</a><br>
<div class="heromenu" >
{% if not app.session.get("appsubname") is empty %}
<i style="font-size:80%;">{{ app.session.get("appsubname") }}</i><br>
{% endif %}
{% if not illustrations is empty %}
<a href="#illustration"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Illustrations</a><br>
{% endif %}
<div class="linkmenu" style="clear:both">
{% if app.session.get('email') is not empty %}
<a href="mailto:{{ app.session.get('email') }}" target="_blank" title="Email"><i class="fas fa-envelope fa-2x"></i></a>
{% endif %}
{% if app.session.get('facebook') is not empty %}
<a href="{{ app.session.get('facebook') }}" target="_blank" title="Facebook"><i class="fab fa-facebook fa-2x"></i></a>
{% endif %}
{% if app.session.get('instagram') is not empty %}
<a href="{{ app.session.get('instagram') }}" target="_blank" title="Instagram"><i class="fab fa-instagram fa-2x"></i></a>
{% endif %}
{% if app.session.get('twitter') is not empty %}
<a href="{{ app.session.get('twitter') }}" target="_blank" title="Twitter"><i class="fab fa-twitter fa-2x"></i></a>
{% endif %}
{% if app.session.get('google') is not empty %}
<a href="{{ app.session.get('google') }}" target="_blank" title="Google"><i class="fab fa-google-plus fa-2x"></i></a>
{% endif %}
{% if app.session.get('youtube') is not empty %}
<a href="{{ app.session.get('youtube') }}" target="_blank" title="Youtube"><i class="fab fa-youtube fa-2x"></i></a>
{% endif %}
<a href="{{ path("app_feedhome") }}" target="_blank" title="RSS"><i class="fa fa-rss-square fa-2x"></i></a>
</div>
{% if not webzines is empty %}
<a href="#webzine"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Webzines</a><br>
{% endif %}
<div class="catmenu">
{% if not users is empty %}
<a href="#membre"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Membres</a><br>
{% endif %}
{% if not links is empty %}
<a href="#link"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Liens</a><br>
{% endif %}
</div>
{% if not illustrations is empty %}
<a href="#illustration"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Illustrations</a><br>
{% endif %}
{% if not items is empty %}
<div class="itemmenu" style="width:270px; display:flex; margin:20px auto 0px auto; flex-wrap: wrap;">
{% for item in items %}
{% if item.title|lower != "ninefolio" %}
<a href="{{ item.url }}" target="_blank">
<div class="item" style="display:flex; flex-direction: column; align-items: center; font-size:10px; padding:5px; width:90px;">
<img src="{{ item.icon }}" style="width:50px;height:50px">
<span style="margin-top:10px">{{ item.title }}</span>
</div>
</a>
{% endif %}
{% endfor %}
{% if not webzines is empty %}
<a href="#webzine"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Webzines</a><br>
{% endif %}
{% if not links is empty %}
<a href="#link"><i class="fa fa-arrow-circle-right fa-fw facatmenu"></i> Liens</a><br>
{% endif %}
</div>
{% if not items is empty %}
<div class="itemmenu" style="max-width:360px; display:flex; margin:20px auto 30px auto; flex-wrap: wrap; justify-content: center;">
{% for item in items %}
{% if item.title|lower != "ninefolio" %}
<a href="{{ item.url }}" target="_blank">
<div class="item" style="display:flex; flex-direction: column; align-items: center; font-size:15px; padding:5px; width:90px;">
<img src="{{ item.icon }}" style="width:50px;height:50px">
<span style="margin-top:5px">{{ item.title }}</span>
</div>
</a>
{% endif %}
{% endfor %}
</div>
{% endif %}
</div>
</div>
<div class="col-lg-8 text-center">
<img src="/{{ appAlias }}/uploads/logo/{{ app.session.get('logodark') }}" style="width:200px; border-radius:100%">
{% if not app.session.get("appdescription") is empty %}
<div style="max-width:80%; text-align: justify; font-size:120%; margin:20px auto; padding:15px; background-color:var(--colorbgbodydarkdarker); border-radius:10px; opacity: 0.8;">
{{ app.session.get("appdescription")|raw}}
</div>
{% endif %}
{%endif%}
{% for user in users %}
{% if user.hasRole('ROLE_MEMBER') %}
{{ render(path("app_home_userhero",{userpseudo:user.slug})) }}
{% endif %}
{% endfor %}
<div style="text-align:center; padding:50px 0px">
{% set qrCode = qr_code_result(absolute_url(path("app_home"))) %}
<img src="{{ qrCode.dataUri }}" width="200px" />
</div>
</div>
</div>
<div class="herologo">
<img src="/{{ appAlias }}/uploads/logo/{{ app.session.get('logodark') }}">
</div>
<!-- GRID ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% set style="margin:30px" %}
{% if app.session.get("appmaxthumbwidth")!="0" %}
{% set style="max-width:"~app.session.get("appmaxthumbwidth")~"px; margin:30px auto;" %}
{% endif %}
<div class="grid" style="{{ style }}">
<div class="grid-sizer"></div>
<div class="gutter-sizer"></div>
<!-- SITE ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
<div>
<div id="site" class="grid-item grid-item-full"><h1 class="mt-5 mb-3"></h1></div>
<div class="grid-item grid-item-size grid-item-size-3 grid-item-size-square cssfilter" style="height:200px;background-position: center; background-size: cover; background-image: url(/{{ appAlias }}/uploads/image/{{ app.session.get("imgcontact")}});">
</div>
<div class="grid-item grid-item-size grid-item-size-6 grid-item-size-noresize" style="padding:0px 15px;word-break:break-word;">
<h1 style="border:none; padding:0px;">{{ app.session.get("appname")}}</h1>
{% if not app.session.get("appsubname") is empty %}
{{ app.session.get("appsubname")}}<br>
{%endif%}
{% if not app.session.get("appdescription") is empty %}
<br>{{ app.session.get("appdescription")|raw}}
{%endif%}
{% if app.session.get('email') is not empty or app.session.get('facebook') is not empty or app.session.get('instagram') is not empty or app.session.get('twitter') is not empty or app.session.get('google') is not empty or app.session.get('youtube') is not empty %}
<br><br>
{% endif %}
{% if app.session.get('email') is not empty %}
<i class="fas fa-envelope"></i> Email = <a href="mailto:{{ app.session.get('email') }}" target="_blank" title="Email">{{ app.session.get('email') }}</a><br>
{% endif %}
{% if app.session.get('facebook') is not empty %}
<i class="fab fa-facebook"></i> Facebook = <a href="{{ app.session.get('facebook') }}" target="_blank" title="Facebook">{{ app.session.get('facebook') }}</a><br>
{% endif %}
{% if app.session.get('instagram') is not empty %}
<i class="fab fa-instagram"></i> Instagram = <a href="{{ app.session.get('instagram') }}" target="_blank" title="Instagram">{{ app.session.get('instagram') }}</a><br>
{% endif %}
{% if app.session.get('twitter') is not empty %}
<i class="fab fa-twitter"></i> Twitter = <a href="{{ app.session.get('twitter') }}" target="_blank" title="Twitter">{{ app.session.get('twitter') }}</a><br>
{% endif %}
{% if app.session.get('google') is not empty %}
<i class="fab fa-google-plus"></i> Google = <a href="{{ app.session.get('google') }}" target="_blank" title="Google">{{ app.session.get('google') }}</a><br>
{% endif %}
{% if app.session.get('youtube') is not empty %}
<i class="fab fa-youtube"></i> Youtube = <a href="{{ app.session.get('youtube') }}" target="_blank" title="Youtube">{{ app.session.get('youtube') }}</a><br>
{% endif %}
</div>
</div>
<!-- MEMBRE ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if not users is empty %}
<div>
<div id="membre" class="grid-item grid-item-full"><h1 class="mt-5 mb-3">Membres</h1></div>
{% for user in users %}
<div class="grid-item grid-item-size grid-item-size-15 grid-item-size-small-3 grid-item-size-noresize" style="padding:0px 5px;">
<a class="member" href="{{path("app_home_user",{userpseudo:user.slug})}}">
<img src="/{{ appAlias }}/uploads/avatar/{{ user.avatar }}" class="mb-2">
<small>{{user.pseudo}}</small>
</a>
</div>
{% endfor %}
</div>
{% endif %}
<!-- ILLUSTRATION ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if not illustrations is empty %}
<div>
<div id="illustration" class="grid-item grid-item-full"><h1 class="mt-5 mb-3">Illustrations</h1></div>
{% for illustration in illustrations %}
{% set appthumbwidth=app.session.get("appthumbwidth") %}
{% set appthumbheight=app.session.get("appthumbheight") %}
{% set classmini="" %}
{% if appthumbwidth==0 %}
{% set class="" %}
{% if loop.index < 40 %}
{% if loop.index == 1 %}
{% set class="grid-item-size-4" %}
{% elseif loop.index is divisible by(28) %}
{% set class="grid-item-size-4" %}
{% elseif loop.index is divisible by(7) %}
{% set class="grid-item-size-2" %}
{% elseif loop.index is divisible by(46) %}
{% set class="grid-item-size-4" %}
{% endif %}
{% elseif loop.index > 48 %}
{% if loop.index == 49 %}
{% set class="grid-item-size-4" %}
{% elseif (loop.index-49) is divisible by(28) %}
{% set class="grid-item-size-4" %}
{% elseif (loop.index-49) is divisible by(7) %}
{% set class="grid-item-size-2" %}
{% endif %}
{% endif %}
{% set position = (loop.index - 1) % 10 + 1 %}
{% if position == 1 or position == 8 %}
{% set classmini = 'grid-item-mini-50' %}
{% else %}
{% set classmini = 'grid-item-mini-25' %}
{% endif %}
{% elseif appthumbwidth==1 %} {% set class="" %}
{% elseif appthumbwidth==2 %} {% set class="grid-item-size-2" %}
{% endif %}
{%if appthumbheight==0 %}
{% set class=class~" grid-item-size-square" %}
{% elseif appthumbheight==1 %}
{% set class=class~" grid-item-size-proportion" %}
{% else %}
{% set class=class~" grid-item-size-page" %}
{% endif %}
{% set source="thumb_"~illustration.illustration %}
{% if appthumbheight!=0 %}
{% set source="thumbori_"~illustration.illustration %}
{% endif %}
{% set source=source~"?"~illustration.updatetime|date('ymdHis') %}
<a href="{{ path("app_illustration_view",{"by":"home","idcat":illustration.category.id,"id":illustration.id}) }}">
<div data-loop="{{loop.index}}" id="illustration{{illustration.id}}" class="grid-item grid-item-size {{class}} {{classmini}} cssfilter" data-width="{{illustration.width}}" data-background-image="/{{ appAlias }}/uploads/illustration/{{source}}" data-height="{{illustration.height}}" style="height:auto;background-position: center ; background-size: cover; background-image: url(/{{ appAlias }}/uploads/illustration/{{source}}");">
</div>
</a>
{% endfor %}
</div>
{% endif %}
<!-- WEBZINE ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if not webzines is empty %}
<div>
<div id="webzine" class="grid-item grid-item-full"><h1 class="mt-5 mb-3">Webzines</h1></div>
{% set setname="" %}
{% for webzine in webzines %}
{% if not webzine.webzinepages is empty %}
{% if setname!=webzine.set %}
{% if not webzine.set is empty %}
<div id="webzine" class="grid-item grid-item-full"><h2 class="mt-3 pl-3">{{webzine.set}}</h2></div>
{% endif %}
{% set setname=webzine.set %}
{% endif %}
{% set page=webzine.webzinepages[0] %}
{% set source="thumbori_"~page.illustration %}
{% set class=" grid-item-size-2 grid-item-size-page" %}
<a href="{{ path("app_webzine_view",{"by":"home","idcat":webzine.id,"id":page.id}) }}">
<div id="webzine{{webzine.id}}" class="grid-item grid-item-size {{class}} cssfilter" data-width="{{page.width}}" data-background-image="/{{ appAlias }}/uploads/webzine/{{source}}" data-height="{{page.height}}" style="height:auto;background-position: center ; background-size: cover; background-image: url(/{{ appAlias }}/uploads/webzine/{{source}}");">
</div>
</a>
{% endif %}
{% endfor %}
</div>
{% endif %}
<!-- LINK ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if not links is empty %}
<div>
<div id="link" class="grid-item grid-item-full"><h1 class="mt-5 mb-3">Liens</h1></div>
<div class="grid-item grid-item-size grid-item-size-3 grid-item-size-square cssfilter" style="height:200px;background-position: center; background-size: cover; background-image: url(/{{ appAlias }}/uploads/image/{{ app.session.get("imglink")}});">
</div>
<div class="grid-item grid-item-size grid-item-size-6 grid-item-size-noresize linkurl" style="padding:0px 15px;">
{% for link in links|sort((a, b) => a.order <=> b.order) %}
<a href="{{link.url}}" target="_blank">{{ link.name }}</a>
{% endfor %}
</div>
</div>
{% endif %}
<!-- BOTTOM ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
<div id="bottom" class="grid-item grid-item-full" style="height:300px">
</div>
<!-- ADDMODAL ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
{% if app.user %}
<div id="addmodal" class="modal" tabindex="-1" role="dialog" style="z-index:100000">
@ -409,6 +253,10 @@
Ajouter une Illustration
</a>
<a href={{ path("app_illustration_submits01",{"by":"user","userid":app.user.id}) }} class="btn btn-link" style="font-size:30px;" title="Créer une Illustration">
Ajouter des Illustrations en masse
</a>
<a href={{ path("app_webzine_submit",{"by":"user","userid":app.user.id}) }} class="btn btn-link" style="font-size:30px;" title="Créer un Webzine">
Ajouter un Webzine
</a>
@ -459,9 +307,7 @@
});
if (location.hash) {
console.log(location.hash);
$(document).scrollTop( $(location.hash).offset().top -60);
// = location.hash;
}
});
});
@ -496,20 +342,6 @@
});
function resizeThumb() {
{% if app.session.get("appmaxthumbwidth")!="0" %}
width=$(window).width();
maxwidth={{ app.session.get("appmaxthumbwidth") }};
if(maxwidth+30>width) {
$(".grid").css("max-width","none");
$(".grid").css("margin","30px");
}
else {
$(".grid").css("max-width","{{ app.session.get("appmaxthumbwidth") }}px");
$(".grid").css("margin","30px auto");
}
{% endif %}
$(".grid-item-size").each(function() {
if(!$(this).hasClass("grid-item-size-noresize")) {
if($(this).hasClass("grid-item-size-square")) {
@ -532,6 +364,15 @@
}
}
});
setTimeout(() => {
$(".userhero").each(function() {
height=$(this).find(".herouseravatar").height();
$(this).height(height+60);
pos=height+60;
height=$(this).find(".userherocontainer").css({ top: '-'+pos+'px' });
});
}, "100");
}
{% endblock %}

View File

@ -63,7 +63,11 @@
{% if not webzines is empty %}
<i class="fa fa-circle fa-fw"></i> <a href="#webzine">Webzines</a>&nbsp;
{% endif %}
{% if not links is empty %}
<i class="fa fa-circle fa-fw"></i> <a href="#link">Liens</a>&nbsp;
{% endif %}
<i class="fa fa-circle fa-fw"></i> <a href="#contact">Contact</a>&nbsp;
</div>
@ -189,6 +193,7 @@
<a href="{{ config.youtube }}" target="_blank" title="Youtube"><i class="fab fa-youtube fa-2x"></i></a>
{% endif %}
<a href="{{ path("app_feeduser",{userpseudo:user.slug}) }}" target="_blank" title="RSS"><i class="fa fa-rss-square fa-2x"></i></a>
<a href="{{ path("app_slide",{userpseudo:user.slug}) }}" target="_blank" title="Slide show"><i class="ml-1 fa fa-play fa-2x"></i></a>
</div>
@ -355,14 +360,15 @@
{% if not config.appsubname is empty %}
{{ config.appsubname }}<br>
{%endif%}
{% if not config.appdescription is empty %}
<small><br>{{ config.appdescription|raw }}</small><br>
{%endif%}
<br>
{% if user.email is not empty or config.facebook is not empty or config.instagram is not empty or config.twitter is not empty or config.google is not empty or config.youtube is not empty %}
<br><br>
{% endif %}
{% if user.email is not empty %}
<i class="fas fa-envelope"></i> Email = <a href="mailto:{{ user.email }}" target="_blank" title="Email">{{ user.email }}</a><br>
{% endif %}
@ -382,6 +388,15 @@
<i class="fab fa-youtube"></i> Youtube = <a href="{{ config.youtube }}" target="_blank" title="Youtube">{{ config.youtube }}</a><br>
{% endif %}
</div>
<!-- BOTTOM ------------------------------------------------------------------------------------------------------------------------------------------------------!-->
<div id="bottom" class="grid-item grid-item-full" style="height:300px;margin-top:60px;">
<div style="text-align:center">
{% set qrCode = qr_code_result(absolute_url(path("app_home_user",{userpseudo:user.slug}))) %}
<img src="{{ qrCode.dataUri }}" width="200px" />
</div>
</div>
</div>
@ -401,6 +416,11 @@
Ajouter une Illustration
</a>
<a href={{ path("app_illustration_submits01",{"by":"user","userid":app.user.id}) }} class="btn btn-link" style="font-size:30px;" title="Créer une Illustration">
Ajouter des Illustrations en masse
</a>
<a href={{ path("app_webzine_submit",{"by":"user","userid":app.user.id}) }} class="btn btn-link" style="font-size:30px;" title="Créer un Webzine">
Ajouter un Webzine
</a>

View File

@ -0,0 +1,84 @@
{% set style="margin:30px" %}
<div class="userhero" style="padding:0px 15px;margin-bottom:10px; width:100%; height:400px;">
<div class="userherobackground" style="height:100%; text-align:left; background-image:url(/{{appAlias}}/uploads/hero/{{config.hero01}});background-size:cover; background-position: center; border-radius:10px;" >
<div class="userherodarker" style="padding:30px; width:100%; height:100%; position:relative; background-color:var(--colorbgbodydarkdarker); opacity:0.7; border:2px solid #fff; border-radius:10px;"></div>
<div class="userherocontainer" style="position:relative; top:-400px; display:flex; padding:30px; width:100%;"%>
<a class="herouseravatar" href="{{path("app_home_user",{userpseudo:user.slug})}}" style="width:200px">
<div style="padding: 0px 15px 0px 0px; text-align:center;">
<img src="/{{ appAlias }}/uploads/avatar/{{ user.avatar }}" class="mb-2" style="border-radius:100%; width:100px;">
<h2>{{user.pseudo}}</h2>
En voir plus
</div>
</a>
<div class="userherogrid grid grid-user" style="width:100%">
<div class="grid-sizer"></div>
<div class="gutter-sizer"></div>
{% for illustration in illustrations|slice(0, 19) %}
{% set appthumbwidth=app.session.get("appthumbwidth") %}
{% set appthumbheight=app.session.get("appthumbheight") %}
{% set classmini="" %}
{% if appthumbwidth==0 %}
{% set class="" %}
{% if loop.index < 40 %}
{% if loop.index == 1 %}
{% set class="grid-item-size-4" %}
{% elseif loop.index is divisible by(28) %}
{% set class="grid-item-size-4" %}
{% elseif loop.index is divisible by(7) %}
{% set class="grid-item-size-2" %}
{% elseif loop.index is divisible by(46) %}
{% set class="grid-item-size-4" %}
{% endif %}
{% elseif loop.index > 48 %}
{% if loop.index == 49 %}
{% set class="grid-item-size-4" %}
{% elseif (loop.index-49) is divisible by(28) %}
{% set class="grid-item-size-4" %}
{% elseif (loop.index-49) is divisible by(7) %}
{% set class="grid-item-size-2" %}
{% endif %}
{% endif %}
{% set position = (loop.index - 1) % 10 + 1 %}
{% if position == 1 or position == 8 %}
{% set classmini = 'grid-item-mini-50' %}
{% else %}
{% set classmini = 'grid-item-mini-25' %}
{% endif %}
{% elseif appthumbwidth==1 %} {% set class="" %}
{% elseif appthumbwidth==2 %} {% set class="grid-item-size-2" %}
{% endif %}
{%if appthumbheight==0 %}
{% set class=class~" grid-item-size-square" %}
{% elseif appthumbheight==1 %}
{% set class=class~" grid-item-size-proportion" %}
{% else %}
{% set class=class~" grid-item-size-page" %}
{% endif %}
{% set source="thumb_"~illustration.illustration %}
{% if appthumbheight!=0 %}
{% set source="thumbori_"~illustration.illustration %}
{% endif %}
{% set source=source~"?"~illustration.updatetime|date('ymdHis') %}
<a href="{{ path("app_illustration_view",{"by":"home","idcat":illustration.category.id,"id":illustration.id}) }}">
<div data-loop="{{loop.index}}" id="illustration{{illustration.id}}" class="grid-item grid-item-size {{class}} {{classmini}} cssfilter" data-width="{{illustration.width}}" data-background-image="/{{ appAlias }}/uploads/illustration/{{source}}" data-height="{{illustration.height}}" style="height:auto;background-position: center ; background-size: cover; background-image: url(/{{ appAlias }}/uploads/illustration/{{source}}"); min-width:100px;">
</div>
</a>
{% endfor %}
</div>
</div>
</div>
</div>

View File

@ -62,6 +62,7 @@
<div class="card-body">
{{ form_row(form.name) }}
{{ form_row(form.category) }}
{{ form_row(form.submittime) }}
{{ form_row(form.description) }}
</div>

View File

@ -20,8 +20,17 @@
/*box-shadow: 0px 0px 5px 1px rgba(255, 255, 255, 0.45);*/
}
</style>
<img style="display:none;" id="illustration_illustration_img" src="/{{ appAlias }}/uploads/illustration/{{illustrations[0].illustration}}">
<div id="content" style="display:flex">
<div style="width:70%; overflow:hidden;padding-left:35px;test-align:center;">
<img style="display:none;" id="illustration_illustration_img" src="/{{ appAlias }}/uploads/illustration/{{illustrations[0].illustration}}">
</div>
<div style="width:30%; display:flex; flex-direction: column; align-items:center;padding-top:15px">
<img id="avatar" src="{{asset("uploads/avatar/"~user.avatar)}}" style="width:150px; height:150px;border-radius:100%">
<h2 style="flex-grow:1">{{user.pseudo}}</h2>
{% set qrCode = qr_code_result(absolute_url(path("app_home_user",{userpseudo:user.slug}))) %}
<img id="qr" src="{{ qrCode.dataUri }}" width="200px" />
</div>
</div>
{% endblock %}
{% block localjavascript %}
@ -47,17 +56,19 @@
}
function resizeImage() {
console.log("resize")
height=$(window).height()-70;
$("#content").height($(window).height()-35);
$("#illustration_illustration_img").css({height:height,width:'auto'});
$("#avatar").height($(window).height()/6);
$("#avatar").width($(window).height()/6);
$("#qr").height($(window).height()/6);
$("#qr").width($(window).height()/6);
width=$(window).width()-90;
if($("#illustration_illustration_img").width()>width)
$("#illustration_illustration_img").css({width:width,height:'auto'});
height=$("#illustration_illustration_img").height();
$("#bigright").css({height:height,"line-height":height+"px"});
$("#bigleft").css({height:height,"line-height":height+"px"});
height=$("#illustration_illustration_img").height();
}
$(document).ready(function() {
@ -65,7 +76,9 @@
tbimg.push("{{illustration.illustration}}");
{% endfor %}
tbimg=shuffle(tbimg)
tbimg=shuffle(tbimg);
total=tbimg.length;
console.log(total);
$('body').imagesLoaded(function() {
resizeImage();
$("#illustration_illustration_img").fadeIn();
@ -73,6 +86,7 @@
var intervalId = window.setInterval(function(){
posImg++;
if(posImg>=total) posImg=0;
img=tbimg[posImg];
console.log(img);
url="/{{ appAlias }}/uploads/illustration/xxx";

View File

@ -0,0 +1,64 @@
{% extends 'base.html.twig' %}
{% block body %}
{{ form_start(form) }}
<h1 class="page-header">
Création ILLUSTRATIONS EN MASSE
</h1>
{{ form_widget(form.submit) }}
{% if by=="admin" %}
<a class="btn btn-secondary" href={{ path('app_admin_illustration',{'by':by,'userid':-1}) }}>Annuler</a>
{% elseif by=="update" %}
<a class="btn btn-secondary" href={{ path('app_user_update',{id:userid}) }}>Annuler</a>
{% elseif by=="profil" %}
<a class="btn btn-secondary" href={{ path('app_user_profil') }}>Annuler</a>
{% elseif by=="illustration" %}
<a class="btn btn-secondary" href={{ path('app_illustration_view',{'by':"user","idcat":illustration.category.id,"id":illustration.id}) }}>Annuler</a>
{% else %}
<a class="btn btn-secondary" href={{ path('app_home_user',{'userpseudo':app.user.pseudo}) }}>Annuler</a>
{% endif %}
<br><br>
{% if app.session.flashbag.has('error') %}
<div class='alert alert-danger' style='margin: 5px 0px'>
<strong>Erreur</strong><br>
{% for flashMessage in app.session.flashbag.get('error') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
{% if app.session.flashbag.has('notice') %}
<div class='alert alert-info' style='margin: 5px 0px'>
<strong>Information</strong><br>
{% for flashMessage in app.session.flashbag.get('notice') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
<div class="row">
<div class="col-md-6 m-auto">
<div class="card">
<div class="card-header">
<i class="fa fa-pencil-alt fa-fw"></i> Informations
</div>
<div class="card-body">
{{ form_row(form.category) }}
</div>
</div>
</div>
</div>
{{ form_end(form) }}
{% endblock %}
{% block localjavascript %}
$(document).ready(function() {
$("#illustration_category").focus();
});
{% endblock %}

View File

@ -0,0 +1,73 @@
{% extends "base.html.twig" %}
{% block encorelinktags %}
{{ encore_entry_link_tags('dropzone') }}
{% endblock encorelinktags %}
{% block body %}
<h1 class="page-header">
Téléchargez vos Illustrations
</h3>
<a class="btn btn-secondary"href="{{path('app_home')}}">Annuler</a>
<div class="row">
<div class="col-md-6 m-auto">
<form
action="{{ oneup_uploader_endpoint('illustration') }}"
class="dropzone"
id="mydropzone"
data-acceptedMimeTypes="image/*"
data-resizeWidth:2500,
style="margin-top:10px">
</form>
</div>
</div>
{% endblock %}
{% block encorescripttags %}
{{ encore_entry_script_tags('dropzone') }}
{% endblock %}
{% block localjavascript %}
function dropzoneinit( elt ) {
}
function dropzonesuccess( file, response ) {
parent.$("#illustration_illustration").val(response["file"]);
parent.$("#illustration_width").val(response["width"]);
parent.$("#illustration_height").val(response["height"]);
parent.$("#illustration_name").val(response["originalname"]);
parent.$("#illustration_illustration_img").attr("src","/{{ appAlias }}/uploads/illustration/"+response["file"]);
console.log('here');
console.log(response["file"]);
$.ajax({
method: "POST",
url: "{{ path('app_illustration_submits03',{"by":by,"userid":userid,"categoryid":categoryid}) }}",
data: {
illustration:response["file"],
width:response["width"],
height:response["height"],
name:response["originalname"]
}
});
}
function dropzonequeuecomplete(file) {
{% if by=="admin" %}
url='{{ path('app_admin_illustration',{'by':by,'userid':-1}) }}';
{% elseif by=="update" %}
url='{{ path('app_user_update',{id:userid}) }}';
{% elseif by=="profil" %}
url='{{ path('app_user_profil') }}';
{% elseif by=="illustration" %}
url='{{ path('app_illustration_view',{'by':"user","idcat":illustration.category.id,"id":illustration.id}) }}';
{% else %}
url='{{ path('app_home_user',{'userpseudo':app.user.slug}) }}';
{% endif %}
window.location.href=url;
}
{% endblock %}

View File

@ -49,8 +49,8 @@ UTILISATEURS
Administrateur<br>
{%elseif role=="ROLE_MODO" %}
Modérateur<br>
{%elseif role=="ROLE_MASTER" %}
Master<br>
{%elseif role=="ROLE_MEMBER" %}
Membre<br>
{%elseif role=="ROLE_USER" %}
Utilisateur<br>
{%endif%}