diff --git a/cli-config.php b/cli-config.php new file mode 100644 index 0000000..92a0dbd --- /dev/null +++ b/cli-config.php @@ -0,0 +1,9 @@ + new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper( + $container->get('doctrine.entity_manager.orm_default') + ), +]); diff --git a/composer.json b/composer.json index 81b8bfb..5c6c8c0 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,11 @@ }, "require": { "php": "^7.1", + "dasprid/container-interop-doctrine": "^1.1", + "gedmo/doctrine-extensions": "^2.4", "knplabs/knp-menu": "^2.3", + "league/commonmark": "^0.17.5", + "los/loslog": "^3.1", "roave/security-advisories": "dev-master", "zendframework/zend-component-installer": "^2.1.1", "zendframework/zend-config-aggregator": "^1.0", diff --git a/composer.lock b/composer.lock index b8925a0..e70ae32 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,52 @@ "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": "c69f030bec47024ad8db770baf2b1cd9", + "content-hash": "5e320134b1fd52af2d7ed879f51b3602", "packages": [ + { + "name": "behat/transliterator", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Transliterator.git", + "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", + "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "chuyskywalker/rolling-curl": "^3.1", + "php-yaoi/php-yaoi": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Transliterator": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Artistic-1.0" + ], + "description": "String transliterator", + "keywords": [ + "i18n", + "slug", + "transliterator" + ], + "time": "2017-04-04T11:38:05+00:00" + }, { "name": "container-interop/container-interop", "version": "1.2.0", @@ -37,6 +81,659 @@ "homepage": "https://github.com/container-interop/container-interop", "time": "2017-02-14T19:40:03+00:00" }, + { + "name": "dasprid/container-interop-doctrine", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/container-interop-doctrine.git", + "reference": "b9f3afc00ce997e469d7fdd6fed7b8d400763290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/container-interop-doctrine/zipball/b9f3afc00ce997e469d7fdd6fed7b8d400763290", + "reference": "b9f3afc00ce997e469d7fdd6fed7b8d400763290", + "shasum": "" + }, + "require": { + "doctrine/common": "^2.6", + "doctrine/dbal": "^2.5", + "doctrine/orm": "^2.5", + "php": "^5.5|^7.0", + "psr/container": "^1.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "squizlabs/php_codesniffer": "^2.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "ContainerInteropDoctrine\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "Doctrine factories for container-interop", + "homepage": "https://github.com/DASPRiD/container-interop-doctrine", + "time": "2018-01-24T23:25:49+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-12-06T07:11:42+00:00" + }, + { + "name": "doctrine/cache", + "version": "v1.7.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/b3217d58609e9c8e661cd41357a54d926c4a2a1a", + "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a", + "shasum": "" + }, + "require": { + "php": "~7.1" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^5.7", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "time": "2017-08-25T07:02:50+00:00" + }, + { + "name": "doctrine/collections", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf", + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "~0.1@dev", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "time": "2017-07-22T10:37:32+00:00" + }, + { + "name": "doctrine/common", + "version": "v2.8.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", + "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": "~7.1" + }, + "require-dev": { + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" + ], + "time": "2017-08-31T08:43:38+00:00" + }, + { + "name": "doctrine/dbal", + "version": "v2.7.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "11037b4352c008373561dc6fc836834eed80c3b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/11037b4352c008373561dc6fc836834eed80c3b5", + "reference": "11037b4352c008373561dc6fc836834eed80c3b5", + "shasum": "" + }, + "require": { + "doctrine/common": "^2.7.1", + "ext-pdo": "*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "^4.0", + "phpunit/phpunit": "^7.0", + "phpunit/phpunit-mock-objects": "!=3.2.4,!=3.2.5", + "symfony/console": "^2.0.5||^3.0", + "symfony/phpunit-bridge": "^3.4.5|^4.0.5" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\DBAL\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Database Abstraction Layer", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "persistence", + "queryobject" + ], + "time": "2018-04-07T18:44:18+00:00" + }, + { + "name": "doctrine/inflector", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2018-01-09T20:05:19+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "doctrine/orm", + "version": "v2.6.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/doctrine2.git", + "reference": "87ee409783a4a322b5597ebaae558661404055a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/87ee409783a4a322b5597ebaae558661404055a7", + "reference": "87ee409783a4a322b5597ebaae558661404055a7", + "shasum": "" + }, + "require": { + "doctrine/annotations": "~1.5", + "doctrine/cache": "~1.6", + "doctrine/collections": "^1.4", + "doctrine/common": "^2.7.1", + "doctrine/dbal": "^2.6", + "doctrine/instantiator": "~1.1", + "ext-pdo": "*", + "php": "^7.1", + "symfony/console": "~3.0|~4.0" + }, + "require-dev": { + "doctrine/coding-standard": "^1.0", + "phpunit/phpunit": "^6.5", + "squizlabs/php_codesniffer": "^3.2", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + }, + "bin": [ + "bin/doctrine" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "lib/Doctrine/ORM" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "orm" + ], + "time": "2018-02-27T07:30:56+00:00" + }, { "name": "fig/http-message-util", "version": "1.1.2", @@ -87,6 +784,87 @@ ], "time": "2017-02-09T16:10:21+00:00" }, + { + "name": "gedmo/doctrine-extensions", + "version": "v2.4.34", + "source": { + "type": "git", + "url": "https://github.com/Atlantic18/DoctrineExtensions.git", + "reference": "f61d14436c30d0faa35b1e7f53b3855597c46c5a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/f61d14436c30d0faa35b1e7f53b3855597c46c5a", + "reference": "f61d14436c30d0faa35b1e7f53b3855597c46c5a", + "shasum": "" + }, + "require": { + "behat/transliterator": "~1.2", + "doctrine/common": "~2.4", + "php": ">=5.3.2" + }, + "conflict": { + "doctrine/annotations": "<1.2" + }, + "require-dev": { + "doctrine/common": ">=2.5.0", + "doctrine/mongodb-odm": ">=1.0.2", + "doctrine/orm": ">=2.5.0", + "phpunit/phpunit": "^4.8.35|^5.7|^6.5", + "symfony/yaml": "~2.6|~3.0|~4.0" + }, + "suggest": { + "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", + "doctrine/orm": "to use the extensions with the ORM" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Gedmo\\": "lib/Gedmo" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Buchmann", + "email": "david@liip.ch" + }, + { + "name": "Gediminas Morkevicius", + "email": "gediminas.morkevicius@gmail.com" + }, + { + "name": "Gustavo Falco", + "email": "comfortablynumb84@gmail.com" + } + ], + "description": "Doctrine2 behavioral extensions", + "homepage": "http://gediminasm.org/", + "keywords": [ + "Blameable", + "behaviors", + "doctrine2", + "extensions", + "gedmo", + "loggable", + "nestedset", + "sluggable", + "sortable", + "timestampable", + "translatable", + "tree", + "uploadable" + ], + "time": "2018-04-13T13:49:18+00:00" + }, { "name": "knplabs/knp-menu", "version": "2.3.0", @@ -151,6 +929,75 @@ ], "time": "2017-11-18T20:49:26+00:00" }, + { + "name": "league/commonmark", + "version": "0.17.5", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "82d7ab62d7f68391cb9d323f3ccce50be24a5369" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/82d7ab62d7f68391cb9d323f3ccce50be24a5369", + "reference": "82d7ab62d7f68391cb9d323f3ccce50be24a5369", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.6.5" + }, + "replace": { + "colinodell/commonmark-php": "*" + }, + "require-dev": { + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.28", + "erusev/parsedown": "~1.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.2", + "phpunit/phpunit": "^5.7|^6.5", + "scrutinizer/ocular": "^1.1", + "symfony/finder": "^3.0|^4.0" + }, + "suggest": { + "league/commonmark-extras": "Library of useful extensions including smart punctuation" + }, + "bin": [ + "bin/commonmark" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.18-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Markdown parser for PHP based on the CommonMark spec", + "homepage": "https://github.com/thephpleague/commonmark", + "keywords": [ + "commonmark", + "markdown", + "parser" + ], + "time": "2018-03-29T14:35:19+00:00" + }, { "name": "league/plates", "version": "3.3.0", @@ -206,6 +1053,74 @@ ], "time": "2016-12-28T00:14:17+00:00" }, + { + "name": "los/loslog", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/Lansoweb/LosLog.git", + "reference": "a6dc0138f2db721ffa134d495972c20b2da2e7b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Lansoweb/LosLog/zipball/a6dc0138f2db721ffa134d495972c20b2da2e7b6", + "reference": "a6dc0138f2db721ffa134d495972c20b2da2e7b6", + "shasum": "" + }, + "require": { + "php": "^7.1", + "psr/container": "^1.0", + "psr/log": "^1.0", + "zendframework/zend-diactoros": "^1.7", + "zendframework/zend-log": "^2.9", + "zendframework/zend-stratigility": "^3.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpstan/phpstan": "^0.9.2", + "phpunit/phpunit": "^7.0", + "rollbar/rollbar": "^1.4", + "satooshi/php-coveralls": "^2.0", + "squizlabs/php_codesniffer": "^2.7", + "zendframework/zend-coding-standard": "^1.0" + }, + "suggest": { + "rollbar/rollbar": "Needed if you want to use Rollbar logger" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "LosMiddleware\\LosLog\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Leandro Silva", + "email": "leandro@leandrosilva.info", + "homepage": "http://leandrosilva.info" + } + ], + "description": "LosLog provides some log utility", + "homepage": "http://github.com/Lansoweb/LosLog", + "keywords": [ + "expressive", + "log", + "los", + "module", + "zf2", + "zf3" + ], + "time": "2018-03-16T13:02:56+00:00" + }, { "name": "nikic/fast-route", "version": "v1.3.0", @@ -457,6 +1372,53 @@ ], "time": "2018-01-22T17:08:31+00:00" }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, { "name": "roave/security-advisories", "version": "dev-master", @@ -620,6 +1582,133 @@ "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", "time": "2018-04-30T07:23:33+00:00" }, + { + "name": "symfony/console", + "version": "v4.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/3e820bc2c520a87ca209ad8fa961c97f42e0b4ae", + "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log-implementation": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2018-04-30T01:23:47+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "3296adf6a6454a050679cde90f95350ad604b171" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", + "reference": "3296adf6a6454a050679cde90f95350ad604b171", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-04-26T10:06:28+00:00" + }, { "name": "zendframework/zend-component-installer", "version": "2.1.1", @@ -1277,6 +2366,77 @@ ], "time": "2018-02-21T20:33:02+00:00" }, + { + "name": "zendframework/zend-log", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-log.git", + "reference": "9cec3b092acb39963659c2f32441cccc56b3f430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-log/zipball/9cec3b092acb39963659c2f32441cccc56b3f430", + "reference": "9cec3b092acb39963659c2f32441cccc56b3f430", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "psr/log": "^1.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^5.7.15 || ^6.0.8", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-db": "^2.6", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-filter": "^2.5", + "zendframework/zend-mail": "^2.6.1", + "zendframework/zend-validator": "^2.10.1" + }, + "suggest": { + "ext-mongo": "mongo extension to use Mongo writer", + "ext-mongodb": "mongodb extension to use MongoDB writer", + "zendframework/zend-console": "Zend\\Console component to use the RequestID log processor", + "zendframework/zend-db": "Zend\\Db component to use the database log writer", + "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML log formatter", + "zendframework/zend-mail": "Zend\\Mail component to use the email log writer", + "zendframework/zend-validator": "Zend\\Validator component to block invalid log messages" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" + }, + "zf": { + "component": "Zend\\Log", + "config-provider": "Zend\\Log\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Log\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "component for general purpose logging", + "homepage": "https://github.com/zendframework/zend-log", + "keywords": [ + "log", + "logging", + "zf2" + ], + "time": "2018-04-09T21:59:51+00:00" + }, { "name": "zendframework/zend-servicemanager", "version": "3.3.2", @@ -1459,60 +2619,6 @@ } ], "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "^6.2.3", - "squizlabs/php_codesniffer": "^3.0.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2017-07-22T11:58:36+00:00" - }, { "name": "filp/whoops", "version": "2.1.14", @@ -2370,53 +3476,6 @@ ], "time": "2018-04-11T04:50:36+00:00" }, - { - "name": "psr/log", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2016-10-10T12:19:37+00:00" - }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", @@ -3058,133 +4117,6 @@ ], "time": "2017-05-22T02:43:20+00:00" }, - { - "name": "symfony/console", - "version": "v4.0.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3e820bc2c520a87ca209ad8fa961c97f42e0b4ae", - "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0" - }, - "suggest": { - "psr/log-implementation": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2018-04-30T01:23:47+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2018-04-26T10:06:28+00:00" - }, { "name": "theseer/tokenizer", "version": "1.1.0", diff --git a/config/autoload/doctrine.global.php b/config/autoload/doctrine.global.php new file mode 100644 index 0000000..3d9e7eb --- /dev/null +++ b/config/autoload/doctrine.global.php @@ -0,0 +1,76 @@ + [ + 'aliases' => [ + Doctrine\ORM\EntityManager::class => 'doctrine.entity_manager.orm_default', + ], + 'factories' => [ + 'doctrine.entity_manager.orm_default' => ContainerInteropDoctrine\EntityManagerFactory::class, + ], + ], + 'doctrine' => [ + 'driver' => [ + 'orm_default' => [ + 'class' => Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain::class, + 'drivers' => [ + 'App\Entity' => 'app_entity', + ], + ], + 'app_entity' => [ + 'class' => Doctrine\ORM\Mapping\Driver\AnnotationDriver::class, + 'cache' => 'array', + 'paths' => __DIR__ . '/../../src/App/Entity', + ], + ], + 'configuration' => [ + 'orm_default' => [ +// 'datetime_functions' => [ +// 'date' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'time' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'timestamp' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'convert_tz' => Oro\ORM\Query\AST\Functions\DateTime\ConvertTz::class, +// ], + 'numeric_functions' => [ +// 'timestampdiff' => Oro\ORM\Query\AST\Functions\Numeric\TimestampDiff::class, +// 'dayofyear' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'dayofmonth' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'dayofweek' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'week' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'day' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'hour' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'minute' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'month' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'quarter' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'second' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'year' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'sign' => Oro\ORM\Query\AST\Functions\Numeric\Sign::class, +// 'pow' => Oro\ORM\Query\AST\Functions\Numeric\Pow::class, + ], +// 'string_functions' => [ +// 'md5' => Oro\ORM\Query\AST\Functions\SimpleFunction::class, +// 'group_concat' => Oro\ORM\Query\AST\Functions\String\GroupConcat::class, +// 'cast' => Oro\ORM\Query\AST\Functions\Cast::class, +// 'concat_ws' => Oro\ORM\Query\AST\Functions\String\ConcatWs::class +// ] +// 'filters' => [ +// 'soft-deleteable' => Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter::class, +// ], + ], + ], + 'event_manager' => [ + 'orm_default' => [ + 'subscribers' => [ +// Gedmo\Timestampable\TimestampableListener::class, + // 'Gedmo\Tree\TreeListener', + // 'Gedmo\SoftDeleteable\SoftDeleteableListener', + // 'Gedmo\Translatable\TranslatableListener', + // 'Gedmo\Blameable\BlameableListener', + // 'Gedmo\Loggable\LoggableListener', +// Gedmo\Sortable\SortableListener::class, + Gedmo\Sluggable\SluggableListener::class, + ], + ], + ], + ], +]; diff --git a/config/autoload/doctrine.local.dist.php b/config/autoload/doctrine.local.dist.php new file mode 100644 index 0000000..6549fbe --- /dev/null +++ b/config/autoload/doctrine.local.dist.php @@ -0,0 +1,14 @@ + [ + 'connection' => [ + 'orm_default' => [ + 'params' => [ + 'url' => 'mysqli://user:passwd@host/database', + 'charset' => 'UTF8', + ], + ], + ], + ], +]; diff --git a/config/autoload/loslog.global.php b/config/autoload/loslog.global.php new file mode 100644 index 0000000..11b6289 --- /dev/null +++ b/config/autoload/loslog.global.php @@ -0,0 +1,28 @@ + [ + 'factories' => [ + LosMiddleware\LosLog\LosLog::class => LosMiddleware\LosLog\LosLogFactory::class, + LosMiddleware\LosLog\HttpLog::class => LosMiddleware\LosLog\HttpLogFactory::class, + Psr\Log\LoggerInterface::class => LosMiddleware\LosLog\LoggerFactory::class, + ], + 'delegators' => [ + ErrorHandler::class => [ + LosMiddleware\LosLog\ErrorHandlerListenerDelegatorFactory::class, + ], + ], + ], + 'loslog' => [ + 'log_dir' => 'data/logs', + 'error_logger_file' => 'error.log', + 'exception_logger_file' => 'exception.log', + 'static_logger_file' => 'static.log', + 'http_logger_file' => 'http.log', + 'log_request' => false, + 'log_response' => false, + 'full' => false, + ], +]; diff --git a/config/autoload/navigation.global.php b/config/autoload/navigation.global.php index 518d0d5..0eb5b5a 100644 --- a/config/autoload/navigation.global.php +++ b/config/autoload/navigation.global.php @@ -6,6 +6,7 @@ return [ 'plates' => [ 'extensions' => [ App\Plates\NavigationExtension::class, + App\Plates\StringExtension::class, ] ], ]; diff --git a/config/config.php b/config/config.php index a09366b..7fcd778 100644 --- a/config/config.php +++ b/config/config.php @@ -13,6 +13,7 @@ $cacheConfig = [ ]; $aggregator = new ConfigAggregator([ + \Zend\Log\ConfigProvider::class, \Zend\Expressive\Router\FastRouteRouter\ConfigProvider::class, \Zend\HttpHandlerRunner\ConfigProvider::class, \Zend\Expressive\Plates\ConfigProvider::class, diff --git a/config/routes.php b/config/routes.php index 00308c8..01ee3b3 100644 --- a/config/routes.php +++ b/config/routes.php @@ -36,13 +36,15 @@ return function (Application $app, MiddlewareFactory $factory, ContainerInterfac $app->get('/', App\Handler\HomePageHandler::class, 'home'); $app->get('/api/ping', App\Handler\PingHandler::class, 'api.ping'); - $app->get('/the-prize', App\Handler\HomePageHandler::class, 'the-prize'); - $app->get('/the-prize/background-and-purpose', App\Handler\HomePageHandler::class, 'the-prize.bg'); - $app->get('/the-prize/description-and-values', App\Handler\HomePageHandler::class, 'the-prize.desc'); - $app->get('/the-prize/aspect-for-selection', App\Handler\HomePageHandler::class, 'the-prize.aspect'); - $app->get('/the-prize/gran-prize-award-events', App\Handler\HomePageHandler::class, 'the-prize.events'); + $app->get('/the-prize', App\Handler\PrizeRedirectHandler::class, 'the-prize'); + $app->get( + '/the-prize/{article:background-and-purpose|description-and-values|aspect-for-selection|gran-prize-award-events}', + App\Handler\ArticleHandler::class, + 'the-prize.article' + ); - $app->get('/judges', App\Handler\HomePageHandler::class, 'judges'); - $app->get('/awardees', App\Handler\HomePageHandler::class, 'awardees'); - $app->get('/awardees/{year:\d+}', App\Handler\HomePageHandler::class, 'awardees-by-year'); + $app->get('/judges', App\Handler\JudgesHandler::class, 'judges'); + $app->get('/awardees', App\Handler\AwardeeRedirectHandler::class, 'awardees'); + $app->get('/awardees/{year:\d+}', App\Handler\AwardeeHandler::class, 'awardees-by-year'); + $app->get('/awardee/{slug}', App\Handler\ProfileHandler::class, 'awardee'); }; diff --git a/data/.gitignore b/data/.gitignore index 5381e79..7926668 100644 --- a/data/.gitignore +++ b/data/.gitignore @@ -1,4 +1,6 @@ * !cache !cache/.gitkeep +!logs +!logs/.gitignore !.gitignore diff --git a/data/logs/.gitignore b/data/logs/.gitignore new file mode 100644 index 0000000..397b4a7 --- /dev/null +++ b/data/logs/.gitignore @@ -0,0 +1 @@ +*.log diff --git a/public/img/aspects_for_selection.png b/public/img/aspects_for_selection.png new file mode 100644 index 0000000..7c44659 Binary files /dev/null and b/public/img/aspects_for_selection.png differ diff --git a/public/img/awardees/2013-bertalan-mesko-atadas.jpg b/public/img/awardees/2013-bertalan-mesko-atadas.jpg new file mode 100644 index 0000000..34607a6 Binary files /dev/null and b/public/img/awardees/2013-bertalan-mesko-atadas.jpg differ diff --git a/public/img/awardees/2013-bertalan-mesko.jpg b/public/img/awardees/2013-bertalan-mesko.jpg new file mode 100644 index 0000000..eacca4d Binary files /dev/null and b/public/img/awardees/2013-bertalan-mesko.jpg differ diff --git a/public/img/awardees/2014-marton-andras-juhasz-atadas.jpg b/public/img/awardees/2014-marton-andras-juhasz-atadas.jpg new file mode 100644 index 0000000..70f2ec1 Binary files /dev/null and b/public/img/awardees/2014-marton-andras-juhasz-atadas.jpg differ diff --git a/public/img/awardees/2014-marton-andras-juhasz.jpg b/public/img/awardees/2014-marton-andras-juhasz.jpg new file mode 100644 index 0000000..cdf0472 Binary files /dev/null and b/public/img/awardees/2014-marton-andras-juhasz.jpg differ diff --git a/public/img/awardees/2015-professor-noszticzius-zoltan-atadas.jpg b/public/img/awardees/2015-professor-noszticzius-zoltan-atadas.jpg new file mode 100644 index 0000000..647f5bc Binary files /dev/null and b/public/img/awardees/2015-professor-noszticzius-zoltan-atadas.jpg differ diff --git a/public/img/awardees/2015-professor-noszticzius-zoltan.jpg b/public/img/awardees/2015-professor-noszticzius-zoltan.jpg new file mode 100644 index 0000000..65f1746 Binary files /dev/null and b/public/img/awardees/2015-professor-noszticzius-zoltan.jpg differ diff --git a/public/img/awardees/2016-dr-istvan-kezsmarki-atadas.jpg b/public/img/awardees/2016-dr-istvan-kezsmarki-atadas.jpg new file mode 100644 index 0000000..0f33e6f Binary files /dev/null and b/public/img/awardees/2016-dr-istvan-kezsmarki-atadas.jpg differ diff --git a/public/img/awardees/2016-dr-istvan-kezsmarki.jpg b/public/img/awardees/2016-dr-istvan-kezsmarki.jpg new file mode 100644 index 0000000..cc3ce12 Binary files /dev/null and b/public/img/awardees/2016-dr-istvan-kezsmarki.jpg differ diff --git a/public/img/awardees/2016-dr-tamas-haidegger-atadas.jpg b/public/img/awardees/2016-dr-tamas-haidegger-atadas.jpg new file mode 100644 index 0000000..4883211 Binary files /dev/null and b/public/img/awardees/2016-dr-tamas-haidegger-atadas.jpg differ diff --git a/public/img/awardees/2016-dr-tamas-haidegger.jpg b/public/img/awardees/2016-dr-tamas-haidegger.jpg new file mode 100644 index 0000000..16ad0bc Binary files /dev/null and b/public/img/awardees/2016-dr-tamas-haidegger.jpg differ diff --git a/public/img/awardees/2017-dr-andras-guttman-atadas.jpg b/public/img/awardees/2017-dr-andras-guttman-atadas.jpg new file mode 100644 index 0000000..1339f08 Binary files /dev/null and b/public/img/awardees/2017-dr-andras-guttman-atadas.jpg differ diff --git a/public/img/awardees/2017-dr-andras-guttman.jpg b/public/img/awardees/2017-dr-andras-guttman.jpg new file mode 100644 index 0000000..d06b659 Binary files /dev/null and b/public/img/awardees/2017-dr-andras-guttman.jpg differ diff --git a/public/img/background_and_purpose.jpg b/public/img/background_and_purpose.jpg new file mode 100644 index 0000000..b017683 Binary files /dev/null and b/public/img/background_and_purpose.jpg differ diff --git a/public/img/description_and_value.jpg b/public/img/description_and_value.jpg new file mode 100644 index 0000000..0f29932 Binary files /dev/null and b/public/img/description_and_value.jpg differ diff --git a/public/img/gran_prize_award_and_events.png b/public/img/gran_prize_award_and_events.png new file mode 100644 index 0000000..64847ec Binary files /dev/null and b/public/img/gran_prize_award_and_events.png differ diff --git a/public/img/gran_prize_award_and_events_prefered.jpg b/public/img/gran_prize_award_and_events_prefered.jpg new file mode 100644 index 0000000..3e51036 Binary files /dev/null and b/public/img/gran_prize_award_and_events_prefered.jpg differ diff --git a/public/img/home_1.png b/public/img/home_1.png new file mode 100644 index 0000000..078f295 Binary files /dev/null and b/public/img/home_1.png differ diff --git a/public/img/home_2.png b/public/img/home_2.png new file mode 100644 index 0000000..dfe701c Binary files /dev/null and b/public/img/home_2.png differ diff --git a/public/img/home_3.png b/public/img/home_3.png new file mode 100644 index 0000000..e0e1941 Binary files /dev/null and b/public/img/home_3.png differ diff --git a/public/img/judges/agnes_soos.jpg b/public/img/judges/agnes_soos.jpg new file mode 100644 index 0000000..4061fe0 Binary files /dev/null and b/public/img/judges/agnes_soos.jpg differ diff --git a/public/img/judges/balazs_nagy_lantos.jpg b/public/img/judges/balazs_nagy_lantos.jpg new file mode 100644 index 0000000..23d9003 Binary files /dev/null and b/public/img/judges/balazs_nagy_lantos.jpg differ diff --git a/public/img/judges/bertalan_mesko.jpg b/public/img/judges/bertalan_mesko.jpg new file mode 100644 index 0000000..d9a245f Binary files /dev/null and b/public/img/judges/bertalan_mesko.jpg differ diff --git a/public/img/judges/edit_nemeth.jpg b/public/img/judges/edit_nemeth.jpg new file mode 100644 index 0000000..42d3188 Binary files /dev/null and b/public/img/judges/edit_nemeth.jpg differ diff --git a/public/img/judges/erno_keszei.jpg b/public/img/judges/erno_keszei.jpg new file mode 100644 index 0000000..fbc026e Binary files /dev/null and b/public/img/judges/erno_keszei.jpg differ diff --git a/public/img/judges/gabor_kopek.jpg b/public/img/judges/gabor_kopek.jpg new file mode 100644 index 0000000..3108e4d Binary files /dev/null and b/public/img/judges/gabor_kopek.jpg differ diff --git a/public/img/judges/gabor_nemeth.jpg b/public/img/judges/gabor_nemeth.jpg new file mode 100644 index 0000000..80485b0 Binary files /dev/null and b/public/img/judges/gabor_nemeth.jpg differ diff --git a/public/img/judges/gabor_szabo.jpg b/public/img/judges/gabor_szabo.jpg new file mode 100644 index 0000000..0183809 Binary files /dev/null and b/public/img/judges/gabor_szabo.jpg differ diff --git a/public/img/judges/gyorgy_nagy.jpg b/public/img/judges/gyorgy_nagy.jpg new file mode 100644 index 0000000..c2cd3f7 Binary files /dev/null and b/public/img/judges/gyorgy_nagy.jpg differ diff --git a/public/img/judges/gyula_patko.jpg b/public/img/judges/gyula_patko.jpg new file mode 100644 index 0000000..ace1704 Binary files /dev/null and b/public/img/judges/gyula_patko.jpg differ diff --git a/public/img/judges/ildiko_csejtei.jpg b/public/img/judges/ildiko_csejtei.jpg new file mode 100644 index 0000000..d738eae Binary files /dev/null and b/public/img/judges/ildiko_csejtei.jpg differ diff --git a/public/img/judges/istvan_salgo.jpg b/public/img/judges/istvan_salgo.jpg new file mode 100644 index 0000000..2492481 Binary files /dev/null and b/public/img/judges/istvan_salgo.jpg differ diff --git a/public/img/judges/janos_durr.jpg b/public/img/judges/janos_durr.jpg new file mode 100644 index 0000000..06f7a3b Binary files /dev/null and b/public/img/judges/janos_durr.jpg differ diff --git a/public/img/judges/janos_takacs.jpg b/public/img/judges/janos_takacs.jpg new file mode 100644 index 0000000..053812e Binary files /dev/null and b/public/img/judges/janos_takacs.jpg differ diff --git a/public/img/judges/jozsef_fulop.jpg b/public/img/judges/jozsef_fulop.jpg new file mode 100644 index 0000000..33bb594 Binary files /dev/null and b/public/img/judges/jozsef_fulop.jpg differ diff --git a/public/img/judges/jozsef_peter_martin.jpg b/public/img/judges/jozsef_peter_martin.jpg new file mode 100644 index 0000000..86cf653 Binary files /dev/null and b/public/img/judges/jozsef_peter_martin.jpg differ diff --git a/public/img/judges/luszcz_viktor.jpg b/public/img/judges/luszcz_viktor.jpg new file mode 100644 index 0000000..35becdf Binary files /dev/null and b/public/img/judges/luszcz_viktor.jpg differ diff --git a/public/img/judges/maria_judit_molnar.jpg b/public/img/judges/maria_judit_molnar.jpg new file mode 100644 index 0000000..6482fdc Binary files /dev/null and b/public/img/judges/maria_judit_molnar.jpg differ diff --git a/public/img/judges/marton_juhasz.jpg b/public/img/judges/marton_juhasz.jpg new file mode 100644 index 0000000..27fc8a1 Binary files /dev/null and b/public/img/judges/marton_juhasz.jpg differ diff --git a/public/img/judges/melinda_kamasz.jpg b/public/img/judges/melinda_kamasz.jpg new file mode 100644 index 0000000..26ff3c0 Binary files /dev/null and b/public/img/judges/melinda_kamasz.jpg differ diff --git a/public/img/judges/miklos_antalovits.jpg b/public/img/judges/miklos_antalovits.jpg new file mode 100644 index 0000000..a1dad56 Binary files /dev/null and b/public/img/judges/miklos_antalovits.jpg differ diff --git a/public/img/judges/miklos_bendzsel.jpg b/public/img/judges/miklos_bendzsel.jpg new file mode 100644 index 0000000..f615720 Binary files /dev/null and b/public/img/judges/miklos_bendzsel.jpg differ diff --git a/public/img/judges/peter_szauer.jpg b/public/img/judges/peter_szauer.jpg new file mode 100644 index 0000000..db11cdb Binary files /dev/null and b/public/img/judges/peter_szauer.jpg differ diff --git a/public/img/judges/richard_bogdan.jpg b/public/img/judges/richard_bogdan.jpg new file mode 100644 index 0000000..ed07f06 Binary files /dev/null and b/public/img/judges/richard_bogdan.jpg differ diff --git a/public/img/judges/rita_istivan.jpg b/public/img/judges/rita_istivan.jpg new file mode 100644 index 0000000..55241a2 Binary files /dev/null and b/public/img/judges/rita_istivan.jpg differ diff --git a/public/img/judges/roland_jakab.jpg b/public/img/judges/roland_jakab.jpg new file mode 100644 index 0000000..9a30b27 Binary files /dev/null and b/public/img/judges/roland_jakab.jpg differ diff --git a/public/img/judges/szabolcs_farkas.jpg b/public/img/judges/szabolcs_farkas.jpg new file mode 100644 index 0000000..828bd1f Binary files /dev/null and b/public/img/judges/szabolcs_farkas.jpg differ diff --git a/public/img/judges/zoltan_bruckner.jpg b/public/img/judges/zoltan_bruckner.jpg new file mode 100644 index 0000000..d3963c3 Binary files /dev/null and b/public/img/judges/zoltan_bruckner.jpg differ diff --git a/public/img/logo/ericsson_logo.png b/public/img/logo/ericsson_logo.png new file mode 100644 index 0000000..1ccf0ef Binary files /dev/null and b/public/img/logo/ericsson_logo.png differ diff --git a/public/img/logo/gran_prize_logo.png b/public/img/logo/gran_prize_logo.png new file mode 100644 index 0000000..9d30881 Binary files /dev/null and b/public/img/logo/gran_prize_logo.png differ diff --git a/public/img/logo/sigma_logo.png b/public/img/logo/sigma_logo.png new file mode 100644 index 0000000..186e9f4 Binary files /dev/null and b/public/img/logo/sigma_logo.png differ diff --git a/public/styles/main.css b/public/styles/main.css index a6649b6..e9a8263 100644 --- a/public/styles/main.css +++ b/public/styles/main.css @@ -5,34 +5,6 @@ body { --header-size: 22pt; } -.app-container { - margin: auto; - display: grid; - grid-column-gap: 20px; - grid-row-gap: 0; - min-height: 100%; -} - -.content-container { - grid-area: content; - display: grid; - grid-template-columns: auto; - grid-template-rows: 200px auto; - grid-template-areas: - "title" - "main"; -} - -.content-container > article, -.content-block > section { - border-left: 1px solid #003b70; - padding: 0 10px 0 10px; -} - -.content-block { - grid-area: content; -} - h1 { font-family: 'PT Serif', serif; font-size: var(--header-size); @@ -57,12 +29,135 @@ section { font-size: 16pt; } +/* app main grid container */ +.app-container { + margin: auto; + display: grid; + grid-column-gap: 20px; + grid-row-gap: 0; + min-height: 100%; +} + +section.home { + padding-left: 20px; + border-left: 1px solid #003b70; + grid-area: content; + display: grid; + grid-column-gap: 20px; + grid-row-gap: 20px; +} + +section.article { + padding-left: 20px; + padding-right: 20px; + border-left: 1px solid #003b70; + grid-area: content; + display: grid; + grid-column-gap: 20px; + grid-row-gap: 20px; +} + /* mobile */ @media only screen and (max-width: 779px) { .app-container { grid-template-columns: auto; - grid-template-rows: 170px auto auto auto 70px; - grid-template-areas: "header" "nav" "content" "sidebar" "footer"; + grid-template-rows: 170px 150px auto 70px; + grid-template-areas: + "header" + "nav" + "content" + "footer"; + } + + section.home { + grid-template-columns: auto auto; + grid-template-rows: 370px 175px auto 175px; + grid-template-areas: + "bigimg bigimg" + "article article" + "smallimg1 smallimg2"; + } + + section.article { + grid-template-columns: auto; + grid-template-rows: auto auto; + grid-template-areas: + "article" + "sidebar"; + } + + section.article > .sidebar { + display: none; + } + + img.embedded-image { + max-width: 30%; + float: right; + margin-left: 10px; + margin-bottom: 10px; + } + + section.judge { + width: calc(100% - 40px); + margin-left: 20px; + margin-right: 20px; + float: left; + } + + a.awardee { + float: left; + margin-right: 20px; + grid-template-columns: 180px auto; + } + + section.awardee { + grid-template-columns: 180px auto; + } + + a.awardee { + width: auto; + padding-left: 20px; + padding-right: 20px; + } + + header, + footer, + nav { + padding-left: 20px; + padding-right: 20px; + } + + section.profile { + grid-template-columns: auto; + grid-template-rows: auto auto; + grid-template-areas: + "profile" + "sidebar"; + } + + section.awardee { + margin-left: 20px; + margin-right: 20px; + } + + nav > ul { + position: relative; + } + + nav > ul > li { + display: inline-block; + width: 30% + } + + nav ul.menu_level_1 { + left: 0; + position: absolute; + } + + nav ul.menu_level_1 > li { + position: relative; + display: inline-block; + max-width: 20%; } } @@ -70,38 +165,271 @@ section { @media only screen and (min-width: 780px) and (max-width: 1179px) { .app-container { grid-template-columns: auto 180px 580px auto; - grid-template-rows: 170px auto auto 70px; + grid-template-rows: 170px auto 70px; grid-template-areas: ". header header ." ". nav content ." - ". nav sidebar ." "footer footer footer footer"; } + section.home { + grid-template-columns: 280px 280px; + grid-template-rows: 370px 175px auto; + grid-template-areas: + "bigimg bigimg" + "smallimg1 smallimg2" + "article article"; + } + + section.article { + grid-template-columns: 580px 380px; + grid-template-rows: auto; + grid-template-areas: + "article" + "sidebar"; + } + + section.article > .sidebar { + display: none; + } + .footer-content { margin: auto; width: 780px; } + + img.embedded-image { + max-width: 580px; + } + + section.judge { + width: 440px; + margin-right: 20px; + float: left; + } + + a.awardee { + float: left; + margin-right: 20px; + margin-left: 20px; + grid-template-columns: 180px 270px; + } + + section.awardee { + grid-template-columns: 180px 380px; + } + + a.awardee { + width: 470px; + } + + section.profile { + grid-template-columns: 580px; + grid-template-rows: auto auto; + grid-template-areas: + "profile" + "sidebar"; + } + + nav ul.menu_level_1 > li { + display: block; + } } /* monitor */ @media only screen and (min-width: 1180px) { .app-container { - grid-template-columns: auto 180px 580px 380px auto; + grid-template-columns: auto 180px 980px auto; grid-template-rows: 170px auto 70px; grid-template-areas: - ". header header header ." - ". nav content sidebar ." - "footer footer footer footer footer"; + ". header header ." + ". nav content ." + "footer footer footer footer"; + } + + section.home { + grid-template-columns: 560px 280px; + grid-template-rows: 175px 175px auto; + grid-template-areas: + "bigimg smallimg1" + "bigimg smallimg2" + "article article"; + } + + section.article { + grid-template-columns: 580px 380px; + grid-template-rows: auto; + grid-template-areas: + "article sidebar"; } .footer-content { margin: auto; width: 1180px; } + + img.embedded-image { + display: none; + } + + section.judge { + width: 440px; + margin-right: 20px; + float: left; + } + + a.awardee { + float: left; + margin-right: 20px; + grid-template-columns: 180px 270px; + } + + section.awardee { + grid-template-columns: 180px 380px; + } + + a.awardee { + width: 470px; + } + + section.profile { + grid-template-columns: 580px 380px; + grid-template-rows: auto; + grid-template-areas: + "profile sidebar" + } + + section.profile > aside.sidebar > img { + margin-top: 340px; + } + + nav ul.menu_level_1 > li { + display: block; + } } -header.main-header { +/* home page */ +section.home > img.bimg { + grid-area: bigimg; +} + +section.home > img.simg1 { + grid-area: smallimg1; +} + +section.home > img.simg2 { + grid-area: smallimg2; +} + +section.home > article { + grid-area: article; +} + +/* the prize (article) */ +section.article > article { + grid-area: article; +} + +section.article > .sidebar { + grid-area: sidebar; +} + +section.article > .sidebar > img { + max-width: 380px; +} + +/* judges */ +section.judges { + grid-area: content; +} + +section.judge > img.profile { + float: left; + width: 80px; + height: 80px; + border-radius: 40px; + margin-right: 20px; + margin-bottom: 20px; +} + +section.judge > .title { + font-size: 18pt; +} + +section.judge > .description { + font-size: 12pt; +} + +/* awardees */ +section.awardees { + grid-area: content; +} + +section.awardees > .awardee > img.profile, +section.profile> .awardee > img.profile { + width: 180px; + height: 180px; + border-radius: 90px; +} + +/* awardee (profile) */ +section.profile { + grid-area: content; + display: grid; + grid-column-gap: 20px; + grid-row-gap: 20px; +} + +section.profile > article { + border-left: 1px solid #003b70; + padding: 0 10px 0 10px; +} + +section.profile > aside.sidebar > img { + max-width: 100%; + display: block; + margin-left: auto; + margin-right: auto; +} + +section.profile > aside.sidebar > .image-label { + margin: 20px; + font-size: 20pt; + font-style: italic; + font-weight: bold; +} + +a.awardee, +section.awardee { + display: grid; + grid-column-gap: 20px; + grid-template-rows: 80px 100px auto; + grid-template-areas: + "image year" + "image name" + "content content"; +} + +.awardee .year { + grid-area: year; + font-size: 32pt; + align-self: end; +} + +.awardee .name { + grid-area: name; + font-size: 34pt; + line-height: 32pt; + font-weight: bold; +} + +.awardee > .description { + grid-area: content; +} + +/* common parts */ + +header.main { grid-area: header; } @@ -115,28 +443,27 @@ header .description { letter-spacing: 1.75pt; } -header .logo { - -} - -nav.main-nav { +nav.main { grid-area: nav; } -section.profile-title { - grid-area: title; -} - -article.profile { - grid-area: main; -} - -aside.profile-image { - grid-area: sidebar; -} - footer.main-footer { grid-area: footer; + line-height: 70px; +} + +footer .footer-lead { + display: inline-block; + width: 200px; +} + +footer .sigma-logo { + vertical-align: -10px; +} + +footer .ericsson-logo { + vertical-align: -4px; + margin-left: 50px; } footer { @@ -182,7 +509,6 @@ nav ul.menu_level_1 { nav ul.menu_level_1 > li { font-size: 14pt; line-height: 18pt; - display: block; padding-left: 15px; margin-bottom: 10px; } diff --git a/src/App/ConfigProvider.php b/src/App/ConfigProvider.php index 70ab354..f03aa13 100644 --- a/src/App/ConfigProvider.php +++ b/src/App/ConfigProvider.php @@ -34,11 +34,22 @@ class ConfigProvider return [ 'invokables' => [ Handler\PingHandler::class => Handler\PingHandler::class, + + Service\JudgeManager::class => Service\JudgeManager::class, ], 'factories' => [ Handler\HomePageHandler::class => Handler\HomePageHandlerFactory::class, + Handler\ArticleHandler::class => Handler\ArticleHandlerFactory::class, + Handler\AwardeeHandler::class => Handler\AwardeeHandlerFactory::class, + Handler\JudgesHandler::class => Handler\JudgesHandlerFactory::class, + Handler\ProfileHandler::class => Handler\ProfileHandlerFactory::class, + Handler\AwardeeRedirectHandler::class => Handler\AwardeeRedirectHandlerFactory::class, + Handler\PrizeRedirectHandler::class => Handler\PrizeRedirectHandlerFactory::class, + + Plates\StringExtension::class => Plates\StringExtensionFactory::class, Plates\NavigationExtension::class => Plates\NavigationExtensionFactory::class, + Service\AwardeeManager::class => Service\AwardeeManagerFactory::class, ], ]; } diff --git a/src/App/Entity/Awardee.php b/src/App/Entity/Awardee.php new file mode 100644 index 0000000..1b22b4f --- /dev/null +++ b/src/App/Entity/Awardee.php @@ -0,0 +1,177 @@ +id; + } + + /** + * @param int $id + * @return Awardee + */ + public function setId(int $id): Awardee + { + $this->id = $id; + return $this; + } + + /** + * @return int + */ + public function getYear(): int + { + return $this->year; + } + + /** + * @param int $year + * @return Awardee + */ + public function setYear(int $year): Awardee + { + $this->year = $year; + return $this; + } + + /** + * @return string + */ + public function getName(): string + { + return $this->name; + } + + /** + * @param string $name + * @return Awardee + */ + public function setName(string $name): Awardee + { + $this->name = $name; + return $this; + } + + /** + * @return string + */ + public function getText(): string + { + return $this->text; + } + + /** + * @param string $text + * @return Awardee + */ + public function setText(string $text): Awardee + { + $this->text = $text; + return $this; + } + + /** + * @return string + */ + public function getImageLabel(): string + { + return $this->imageLabel; + } + + /** + * @param string $imageLabel + * @return Awardee + */ + public function setImageLabel(string $imageLabel): Awardee + { + $this->imageLabel = $imageLabel; + return $this; + } + + /** + * @return string + */ + public function getSlug(): string + { + return $this->slug; + } + + /** + * @param string $slug + * @return Awardee + */ + public function setSlug(string $slug): Awardee + { + $this->slug = $slug; + return $this; + } + + /** + * @return array + */ + public function jsonSerialize() + { + return [ + 'id' => $this->getId(), + 'year' => $this->getYear(), + 'name' => $this->getYear(), + 'text' => $this->getText(), + 'imageLabel' => $this->getImageLabel(), + 'slug' => $this->getSlug(), + ]; + } +} diff --git a/src/App/Handler/ArticleHandler.php b/src/App/Handler/ArticleHandler.php new file mode 100644 index 0000000..ddcef75 --- /dev/null +++ b/src/App/Handler/ArticleHandler.php @@ -0,0 +1,27 @@ +template = $template; + } + + public function handle(ServerRequestInterface $request) : ResponseInterface + { + $articleTemplate = $request->getAttribute('article'); + return new HtmlResponse($this->template->render("app::{$articleTemplate}")); + } +} diff --git a/src/App/Handler/ArticleHandlerFactory.php b/src/App/Handler/ArticleHandlerFactory.php new file mode 100644 index 0000000..4db016c --- /dev/null +++ b/src/App/Handler/ArticleHandlerFactory.php @@ -0,0 +1,19 @@ +get(TemplateRendererInterface::class); + return new ArticleHandler($template); + } +} diff --git a/src/App/Handler/AwardeeHandler.php b/src/App/Handler/AwardeeHandler.php new file mode 100644 index 0000000..5faef7e --- /dev/null +++ b/src/App/Handler/AwardeeHandler.php @@ -0,0 +1,39 @@ +template = $template; + $this->awardeeManager = $awardeeManager; + } + + public function handle(ServerRequestInterface $request) : ResponseInterface + { + $year = $request->getAttribute('year'); + $awardees = $this->awardeeManager->getJudgesByYear((int)$year); + return new HtmlResponse($this->template->render("app::awardees", [ + 'year' => $year, + 'awardees' => $awardees, + ])); + } +} diff --git a/src/App/Handler/AwardeeHandlerFactory.php b/src/App/Handler/AwardeeHandlerFactory.php new file mode 100644 index 0000000..3290573 --- /dev/null +++ b/src/App/Handler/AwardeeHandlerFactory.php @@ -0,0 +1,20 @@ +get(TemplateRendererInterface::class); + $awardeeManager = $container->get(AwardeeManager::class); + return new AwardeeHandler($template, $awardeeManager); + } +} diff --git a/src/App/Handler/AwardeeRedirectHandler.php b/src/App/Handler/AwardeeRedirectHandler.php new file mode 100644 index 0000000..8c2a6e4 --- /dev/null +++ b/src/App/Handler/AwardeeRedirectHandler.php @@ -0,0 +1,49 @@ +urlHelper = $urlHelper; + $this->entityManager = $entityManager; + } + + /** + * @param ServerRequestInterface $request + * @return ResponseInterface + * @throws \Doctrine\ORM\NonUniqueResultException + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $qb = $this->entityManager->createQueryBuilder(); + $maxYear = $qb->select('max(a.year)') + ->from(Awardee::class, 'a') + ->getQuery() + ->getSingleScalarResult(); + + $url = $this->urlHelper->generate('awardees-by-year', [ + 'year' => $maxYear, + ]); + return new RedirectResponse($url); + } +} diff --git a/src/App/Handler/AwardeeRedirectHandlerFactory.php b/src/App/Handler/AwardeeRedirectHandlerFactory.php new file mode 100644 index 0000000..4ced167 --- /dev/null +++ b/src/App/Handler/AwardeeRedirectHandlerFactory.php @@ -0,0 +1,20 @@ +get(UrlHelper::class); + $entityManager = $container->get(EntityManager::class); + return new AwardeeRedirectHandler($urlHelper, $entityManager); + } +} diff --git a/src/App/Handler/JudgesHandler.php b/src/App/Handler/JudgesHandler.php new file mode 100644 index 0000000..e46dd32 --- /dev/null +++ b/src/App/Handler/JudgesHandler.php @@ -0,0 +1,35 @@ +template = $template; + $this->judgeManager = $judgeManager; + } + + public function handle(ServerRequestInterface $request) : ResponseInterface + { + $data['judges'] = $this->judgeManager->getJudges(); + return new HtmlResponse($this->template->render("app::judges", $data)); + } +} diff --git a/src/App/Handler/JudgesHandlerFactory.php b/src/App/Handler/JudgesHandlerFactory.php new file mode 100644 index 0000000..3f42b7c --- /dev/null +++ b/src/App/Handler/JudgesHandlerFactory.php @@ -0,0 +1,20 @@ +get(TemplateRendererInterface::class); + $judgeManager = $container->get(JudgeManager::class); + return new JudgesHandler($template, $judgeManager); + } +} diff --git a/src/App/Handler/PrizeRedirectHandler.php b/src/App/Handler/PrizeRedirectHandler.php new file mode 100644 index 0000000..348b610 --- /dev/null +++ b/src/App/Handler/PrizeRedirectHandler.php @@ -0,0 +1,30 @@ +urlHelper = $urlHelper; + } + + public function handle(ServerRequestInterface $request): ResponseInterface + { + $url = $this->urlHelper->generate('the-prize.article', [ + 'article' => 'background-and-purpose', + ]); + return new RedirectResponse($url); + } +} diff --git a/src/App/Handler/PrizeRedirectHandlerFactory.php b/src/App/Handler/PrizeRedirectHandlerFactory.php new file mode 100644 index 0000000..f151e0e --- /dev/null +++ b/src/App/Handler/PrizeRedirectHandlerFactory.php @@ -0,0 +1,18 @@ +get(UrlHelper::class); + return new PrizeRedirectHandler($urlHelper); + } +} diff --git a/src/App/Handler/ProfileHandler.php b/src/App/Handler/ProfileHandler.php new file mode 100644 index 0000000..4147de1 --- /dev/null +++ b/src/App/Handler/ProfileHandler.php @@ -0,0 +1,41 @@ +template = $template; + $this->entityManager = $entityManager; + } + + public function handle(ServerRequestInterface $request) : ResponseInterface + { + $slug = $request->getAttribute('slug'); + $awardee = $this->entityManager->getRepository(Awardee::class)->findOneBy([ + 'slug' => $slug, + ]); + return new HtmlResponse($this->template->render("app::profile", [ + 'awardee' => $awardee, + ])); + } +} diff --git a/src/App/Handler/ProfileHandlerFactory.php b/src/App/Handler/ProfileHandlerFactory.php new file mode 100644 index 0000000..89ff12f --- /dev/null +++ b/src/App/Handler/ProfileHandlerFactory.php @@ -0,0 +1,20 @@ +get(TemplateRendererInterface::class); + $entityManager = $container->get(EntityManager::class); + return new ProfileHandler($template, $entityManager); + } +} diff --git a/src/App/Plates/NavigationExtension.php b/src/App/Plates/NavigationExtension.php index cc3a64f..3ebb59b 100644 --- a/src/App/Plates/NavigationExtension.php +++ b/src/App/Plates/NavigationExtension.php @@ -4,10 +4,11 @@ declare(strict_types=1); namespace App\Plates; +use App\Entity\Awardee; +use Doctrine\ORM\EntityManager; use Knp\Menu\ItemInterface; use Knp\Menu\Matcher\Matcher; use Knp\Menu\Matcher\Voter\UriVoter; -use Knp\Menu\Matcher\Voter\VoterInterface; use Knp\Menu\MenuFactory; use Knp\Menu\MenuItem; use Knp\Menu\Renderer\ListRenderer; @@ -20,12 +21,19 @@ class NavigationExtension implements ExtensionInterface /** @var RouterInterface */ private $router; + /** @var EntityManager */ + private $entityManager; + /** @var MenuItem */ private $menu; - public function __construct(RouterInterface $router) + public function __construct( + RouterInterface $router, + EntityManager $entityManager + ) { $this->router = $router; + $this->entityManager = $entityManager; } /** @@ -62,16 +70,16 @@ class NavigationExtension implements ExtensionInterface 'uri' => $this->getUriFromRouter('the-prize') ]); $prizeMenu->addChild("Background and Purpose", [ - 'uri' => $this->getUriFromRouter('the-prize.bg') + 'uri' => $this->getUriFromRouter('the-prize.article', ['article' => 'background-and-purpose']) ]); $prizeMenu->addChild("Description and Values", [ - 'uri' => $this->getUriFromRouter('the-prize.desc') + 'uri' => $this->getUriFromRouter('the-prize.article', ['article' => 'description-and-values']) ]); $prizeMenu->addChild("Aspect for Selection", [ - 'uri' => $this->getUriFromRouter('the-prize.aspect') + 'uri' => $this->getUriFromRouter('the-prize.article', ['article' => 'aspect-for-selection']) ]); $prizeMenu->addChild("Gran Prize Award and Events", [ - 'uri' => $this->getUriFromRouter('the-prize.events') + 'uri' => $this->getUriFromRouter('the-prize.article', ['article' => 'gran-prize-award-events']) ]); $this->menu->addChild(strtoupper("Judges"), [ @@ -91,11 +99,20 @@ class NavigationExtension implements ExtensionInterface private function populateAwardeesSubmenu(ItemInterface $awardeesMenu) { - $year = (int)date("Y"); + $qb = $this->entityManager->createQueryBuilder(); + $result = $qb->select('a.year') + ->from(Awardee::class, 'a') + ->orderBy('a.year', 'DESC') + ->getQuery() + ->getScalarResult(); - for ($i = $year; $i > 2012; $i--) { - $awardeesMenu->addChild($i, [ - 'uri' => $this->getUriFromRouter('awardees-by-year', ['year' => $i]) + $years = array_unique(array_map(function ($item) { + return $item['year']; + }, $result)); + + foreach ($years as $year) { + $awardeesMenu->addChild($year, [ + 'uri' => $this->getUriFromRouter('awardees-by-year', ['year' => $year]) ]); } } diff --git a/src/App/Plates/NavigationExtensionFactory.php b/src/App/Plates/NavigationExtensionFactory.php index 2973bbc..d38e846 100644 --- a/src/App/Plates/NavigationExtensionFactory.php +++ b/src/App/Plates/NavigationExtensionFactory.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Plates; +use Doctrine\ORM\EntityManager; use Psr\Container\ContainerInterface; use Zend\Expressive\Plates\Exception\MissingHelperException; use Zend\Expressive\Router\RouterInterface; @@ -21,6 +22,7 @@ class NavigationExtensionFactory } $router = $container->get(RouterInterface::class); - return new NavigationExtension($router); + $entityManager = $container->get(EntityManager::class); + return new NavigationExtension($router, $entityManager); } } diff --git a/src/App/Plates/StringExtension.php b/src/App/Plates/StringExtension.php new file mode 100644 index 0000000..d584b0c --- /dev/null +++ b/src/App/Plates/StringExtension.php @@ -0,0 +1,51 @@ +converter = $converter; + } + + /** + * Register functions with the Plates engine. + * + * Registers: + * + * - mdtohtml(string $markdown) : string + * - excerpt(string $text, int $length) : string + * + * @param Engine $engine + */ + public function register(Engine $engine): void + { + $engine->registerFunction('mdtohtml', [$this, 'markdownToHtml']); + $engine->registerFunction('excerpt', [$this, 'excerpt']); + } + + public function markdownToHtml(string $markdown): string + { + return $this->converter->convertToHtml($markdown); + } + + + public function excerpt(string $text, int $length = 190): string + { + $length = abs((int)$length); + if (strlen($text) > $length) { + $text = preg_replace("/^(.{1,$length})(\s.*|$)/s", '\\1...', $text); + } + return($text); + } +} diff --git a/src/App/Plates/StringExtensionFactory.php b/src/App/Plates/StringExtensionFactory.php new file mode 100644 index 0000000..8d3acef --- /dev/null +++ b/src/App/Plates/StringExtensionFactory.php @@ -0,0 +1,17 @@ +entityManager = $entityManager; + } + + /** + * @param int $year + * @return Awardee[] + */ + public function getJudgesByYear(int $year): ?array + { + return $this->entityManager->getRepository(Awardee::class)->findBy([ + 'year' => $year, + ]); + } + + /** + * @param string $slug + * @return Awardee|null + */ + public function getJudgeFromSlug(string $slug): ?Awardee + { + /** @var Awardee $awardee */ + $awardee = $this->entityManager->getRepository(Awardee::class)->findOneBy([ + 'slug' => $slug, + ]); + return $awardee; + } +} diff --git a/src/App/Service/AwardeeManagerFactory.php b/src/App/Service/AwardeeManagerFactory.php new file mode 100644 index 0000000..daf265f --- /dev/null +++ b/src/App/Service/AwardeeManagerFactory.php @@ -0,0 +1,17 @@ +get(EntityManager::class); + return new AwardeeManager($entityManager); + } +} diff --git a/src/App/Service/JudgeManager.php b/src/App/Service/JudgeManager.php new file mode 100644 index 0000000..a1fa33a --- /dev/null +++ b/src/App/Service/JudgeManager.php @@ -0,0 +1,121 @@ + 'agnes_soos', + 'name' => 'Dr Ágnes Soós', + 'desc' => 'National Institute for Sports Medicine, Director General', + ], [ + 'image' => 'balazs_nagy_lantos', + 'name' => 'Balázs Nagy Lantos', + 'desc' => 'Mensa HungarIQa,Former President', + ], [ + 'image' => 'bertalan_mesko', + 'name' => 'Dr Bertalan Meskó', + 'desc' => 'Winner of GRAN PRIZE 2013, medical futurist, founder of Webicina', + ], [ + 'image' => 'edit_nemeth', + 'name' => 'Dr Edit Németh', + 'desc' => 'ELTE Institute of Business Economics, Management and Business Law Faculty', + ], [ + 'image' => 'erno_keszei', + 'name' => 'Prof. Ernő Keszei', + 'desc' => 'Eötvös Loránd University, Former Vice-Rector for Science, Research, and Innovation', + ], [ + 'image' => 'gabor_kopek', + 'name' => 'Gábor Kopek', + 'desc' => 'Moholy-Nagy University of Art and Design Budapest, Former Rector', + ], [ + 'image' => 'gabor_nemeth', + 'name' => 'Dr Gábor Németh', + 'desc' => 'Hungarian Intellectual Property Office, Director', + ], [ + 'image' => 'gabor_szabo', + 'name' => 'Dr Gábor Szabó', + 'desc' => 'University of Szeged, Rector; Hungarian Association for Innovation, President', + ], [ + 'image' => 'gyorgy_nagy', + 'name' => 'György Nagy', + 'desc' => 'Sigma Technology, Managing Director; Swedish Chamber of Commerce in Hungary, Vice-President', + ], [ + 'image' => 'gyula_patko', + 'name' => 'Dr Gyula Patkó', + 'desc' => 'University of Miskolc, Former Rector', + ], [ + 'image' => 'ildiko_csejtei', + 'name' => 'Ildikó B. Csejtei', + 'desc' => 'Independent Media Group, Owner, Director', + ], [ + 'image' => 'istvan_salgo', + 'name' => 'István Salgó', + 'desc' => 'Business Council for Sustainable Development in Hungary, Honorary President', + ], [ + 'image' => 'janos_durr', + 'name' => 'János Dürr', + 'desc' => 'Club of Hungarian Science Journalists, President', + ], [ + 'image' => 'janos_takacs', + 'name' => 'János Takács', + 'desc' => 'Swedish Chamber of Commerce, President', + ], [ + 'image' => 'jozsef_fulop', + 'name' => 'József Fülöp', + 'desc' => 'Moholy-Nagy University of Art and Design Budapest, Rector', + ], [ + 'image' => 'jozsef_peter_martin', + 'name' => 'Dr József Péter Martin', + 'desc' => 'Transparency International Hungary, Managing Director', + ], [ + 'image' => 'maria_judit_molnar', + 'name' => 'Dr Mária Judit Molnár', + 'desc' => 'SOTE Institute of Genomic Medicine and Rare Disorders, Head of the Institute', + ], [ + 'image' => 'melinda_kamasz', + 'name' => 'Melinda Kamasz', + 'desc' => 'Figyelő, Deputy Editor in Chief, Figyelő Trend, Editor in Chief', + ], [ + 'image' => 'miklos_antalovits', + 'name' => 'Dr Miklós Antalovits', + 'desc' => 'Budapest University of Technology and Economics, Professor Emeritus', + ], [ + 'image' => 'miklos_bendzsel', + 'name' => 'Dr Miklós Bendzsel', + 'desc' => 'Hungarian Academy of Engineers, Vice-President; Hungarian Intellectual Property Office, Former President', + ], [ + 'image' => 'peter_szauer', + 'name' => 'Péter Szauer', + 'desc' => 'HVG, President and Chief Executive Officer', + ], [ + 'image' => 'richard_bogdan', + 'name' => 'Richárd Bogdán', + 'desc' => 'Mensa HungarIQa, President', + ], [ + 'image' => 'rita_istivan', + 'name' => 'Rita Istiván', + 'desc' => 'BME, Honorary Associate Professor; Swedish Chamber of Commerce, Secretary General', + ], [ + 'image' => 'roland_jakab', + 'name' => 'Roland Jakab', + 'desc' => 'Ericsson Hungary, Managing Director; Swedish Chamber of Commerce, Member of the Board', + ], [ + 'image' => 'szabolcs_farkas', + 'name' => 'Dr Szabolcs Farkas', + 'desc' => 'Hungarian Intellectual Property Office, Vice-President', + ], [ + 'image' => 'zoltan_bruckner', + 'name' => 'Zoltán Bruckner', + 'desc' => 'Primus Capital Management, Investment Director, Managing Partner', +// ], [ +// 'image' => '', +// 'name' => 'Dr Viktor Łuszcz', +// 'desc' => 'Hungarian Intellectual Property Office, President', + ] + ]; + } +} \ No newline at end of file diff --git a/templates/app/aspect-for-selection.phtml b/templates/app/aspect-for-selection.phtml new file mode 100644 index 0000000..298b010 --- /dev/null +++ b/templates/app/aspect-for-selection.phtml @@ -0,0 +1,19 @@ +layout('layout::default', ['title' => 'Aspect for Selection']) ?> +
+
+

During the selection, the Board of Judges takes into consideration the following aspects:

+ + +
+ +
diff --git a/templates/app/awardees.phtml b/templates/app/awardees.phtml new file mode 100644 index 0000000..f98dc67 --- /dev/null +++ b/templates/app/awardees.phtml @@ -0,0 +1,11 @@ +layout('layout::default', ['title' => sprintf("%s's %s", $year, count($awardees) > 1 ? 'awardees' : 'awardee')]) ?> +
+ + + +
+
getName() ?>
+
batch($awardee->getText(), 'excerpt|mdtohtml') ?>
+
+ +
diff --git a/templates/app/background-and-purpose.phtml b/templates/app/background-and-purpose.phtml new file mode 100644 index 0000000..3d7851b --- /dev/null +++ b/templates/app/background-and-purpose.phtml @@ -0,0 +1,13 @@ +layout('layout::default', ['title' => 'Background and Purpose']) ?> +
+
+

The Gran Prize was officially established on 12th December, 2012, by the Swedish Chamber of Commerce in Hungary (SCCH) to stimulate innovative thinking aimed at improving the quality of life. The Chamber chose a popular Swedish symbol, the pine tree, as the emblem of the prize. For most of the planet, the pine tree represents Christmas and is also a metaphor for nature.

+ +

Ancient philosophers discussed happiness and living in harmony with nature, and this aspiration is becoming vital to modern man too. Gran in Swedish means pine tree, pointing to the characteristics of this award focused on sustainable development and environmental protection.

+

The Chamber's aim with this prize is twofold; firstly, to support and award outstanding innovative achievements, and secondly, to facilitate intercultural communication.

+

In the spirit of open, consensus-based thinking, which is such a vital part of Swedish society, and with the aim of furthering Swedish-Hungarian cooperation, the SCCH has opened entry to the Gran Prize for every progressive company and private person in Hungary.

+
+ +
diff --git a/templates/app/description-and-values.phtml b/templates/app/description-and-values.phtml new file mode 100644 index 0000000..99fa90d --- /dev/null +++ b/templates/app/description-and-values.phtml @@ -0,0 +1,13 @@ +layout('layout::default', ['title' => 'Description and Values']) ?> +
+
+

The Gran Prize is an annual prize awarded for outstandingly innovative solutions in response to the most pressing issues of our planet, in the field of environmental protection, sustainable development, design, medicine, health preservation and development, and education.

+

The prize can be awarded to private persons, groups, companies, associations, organisations, institutions, students or student teams, as decided by the judging panel of the Gran Prize. The judging panel has the right to invite persons, associations, and companies to submit applications for the competition.

+ +

The Gran Prize judging panel consists of leading authorities, scientists, and media representatives. The Board of Directors also decided to ensure the highest quality throughout the process of the Gran Prize initiative, including the choice of professional partners and the judging panel. The members of the judging panel may change from year to year, the permanent members being three directors from the Chamber.

+

As announced publically by the SCCH to the press, the Chamber set aside HUF 5 million from its capital to finance this innovative prize from the annually accrued interest, and will invite other progressive decision makers and private individuals to participate with their sponsorship.

+
+ +
diff --git a/templates/app/gran-prize-award-events.phtml b/templates/app/gran-prize-award-events.phtml new file mode 100644 index 0000000..54fbfe1 --- /dev/null +++ b/templates/app/gran-prize-award-events.phtml @@ -0,0 +1,12 @@ +layout('layout::default', ['title' => 'Gran Prize Award and Events']) ?> +
+
+

The Gran Prize is a piece of art created by Swedish artist Ann Lundin and Hungarian artist Károly Szász. The sculpture is made of pebble and glass with a pine relief on its top; the amalgam of a timeless survivor with a human touch on innovation. It should be different each year, but always made of pebble and glass with a Gran pine relief.

+ +

As part of the prize, the awardee receives, as a token of appreciation, a Swedish pine tree, CITRUS ATLANTICUS, from the Folly Arboretum founded in 1878, to be planted at the awardee's alma mater.

+

The Award Giving Ceremony Gran Gala is held annually in May. Each year, in the week following the award gala, the so-called GRAN WEEK is held, when the winner of the award presents the winning entry and members of the SCCH hold presentations for university students.

+
+ +
diff --git a/templates/app/home-page.phtml b/templates/app/home-page.phtml index a0a8a1d..ecd6043 100644 --- a/templates/app/home-page.phtml +++ b/templates/app/home-page.phtml @@ -1,23 +1,10 @@ -layout('layout::default', ['title' => 'Home']) ?> -
-
- -
-
-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed quis ipsum ut turpis mollis commodo et id nisl. Vestibulum sed sem pellentesque, fermentum felis in, sollicitudin mauris. Integer mollis commodo velit, in volutpat nisl sagittis id. Vestibulum porttitor nulla convallis consectetur volutpat. Nam faucibus in felis a aliquet. Ut vitae malesuada ex. Integer eget pulvinar quam, a blandit leo. Nulla a felis sed nulla aliquet molestie. Donec tortor ligula, rhoncus et justo eget, ultrices posuere velit. Morbi finibus purus sed mauris semper tempus. Etiam lobortis magna id orci vestibulum, eu vulputate diam congue. Maecenas consectetur ipsum in mollis porttitor. Nullam vitae eros at massa viverra commodo. Etiam gravida eu turpis ac auctor.

- -

Cras eget lobortis ex, nec eleifend tellus. Suspendisse potenti. Vivamus auctor diam at fermentum dignissim. Aliquam semper facilisis risus, eu interdum urna ultrices quis. Integer ut cursus lacus. Nunc vel lacus quis erat consequat bibendum ac at mi. Mauris pulvinar commodo semper. Nunc sed accumsan leo. Aliquam rhoncus tellus ut mollis commodo. Aenean euismod nunc vehicula, tincidunt magna at, porta turpis.

- -

Nullam ut ullamcorper enim, sollicitudin faucibus est. Quisque vestibulum velit nec odio accumsan pharetra. Duis ante sem, bibendum id sodales in, lacinia sed turpis. Sed sagittis diam eu aliquet rutrum. Donec at lobortis lorem. Maecenas non condimentum nunc, sed ullamcorper massa. Aliquam placerat vehicula eros at pharetra. Pellentesque nec convallis eros, vitae scelerisque ligula. Vestibulum cursus, augue id fermentum ultrices, tortor augue eleifend lorem, ut dignissim erat lectus in nisl. Phasellus aliquam nunc nec orci pulvinar tincidunt. Etiam a facilisis turpis, at cursus mauris. Mauris dictum vitae nunc non maximus. Quisque consectetur est justo, nec blandit leo aliquam sit amet. Nullam in ligula mi. Sed sollicitudin velit a eleifend pellentesque.

-
- -
-

Nunc eu massa non est mollis tempus. Duis posuere pharetra hendrerit. Vivamus egestas dictum interdum. Aliquam quam libero, dignissim at augue nec, laoreet efficitur ex. Aenean sollicitudin nibh placerat, mollis nisi eget, accumsan metus. Praesent in erat vel nisl hendrerit blandit vel eget turpis. Morbi fermentum, neque ac pretium vulputate, lectus arcu vehicula elit, ac consequat nibh tortor nec leo. Aliquam consequat hendrerit tempor. Sed eu viverra lacus. Nulla lacinia purus dapibus lobortis sollicitudin. In eget orci ligula. Nullam aliquet feugiat nunc, et facilisis justo. Duis quis est feugiat, tincidunt diam quis, facilisis neque. Duis tincidunt nisi ac rutrum lobortis. Proin nibh lorem, bibendum id nibh id, malesuada hendrerit diam.

- -

Ut sodales, nunc varius lacinia iaculis, mi purus facilisis orci, sit amet feugiat lorem massa sit amet sapien. Ut vitae mauris nunc. Vivamus turpis quam, sollicitudin id dictum ac, pretium sed diam. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean tempus neque tortor, ac vulputate turpis consequat luctus. Nam auctor leo ut convallis euismod. Mauris fringilla eros a dui mollis, vel varius quam convallis. Phasellus erat dolor, sodales a porttitor sed, vestibulum ac orci. Praesent eu massa accumsan, tincidunt lectus sit amet, volutpat velit. Sed maximus, ante nec luctus tincidunt, tortor sapien sagittis lectus, at gravida arcu neque ac ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ornare nisl eu nunc porta interdum.

+layout('layout::default', ['title' => 'The Gran Prize']) ?> +
+ + + +
+

The Gran Prize

+

is an annual prize awarded for outstandingly innovative solutions in response to the most pressing issues of our planet, in the field of environmental protection, sustainable development, design, medicine, health preservation and development and education.

- - \ No newline at end of file diff --git a/templates/app/judges.phtml b/templates/app/judges.phtml new file mode 100644 index 0000000..6153626 --- /dev/null +++ b/templates/app/judges.phtml @@ -0,0 +1,10 @@ +layout('layout::default', ['title' => 'Judges']) ?> +
+ +
+ +
+ +
+ +
diff --git a/templates/app/profile.phtml b/templates/app/profile.phtml new file mode 100644 index 0000000..a1ee9d7 --- /dev/null +++ b/templates/app/profile.phtml @@ -0,0 +1,15 @@ +layout('layout::default', ['title' => $awardee->getName()]) ?> +
+
+ +
getYear() ?>
+
getName() ?>
+
mdtohtml($awardee->getText()) ?>
+
+ +
diff --git a/templates/layout/default.phtml b/templates/layout/default.phtml index d6b1ed1..2731d26 100644 --- a/templates/layout/default.phtml +++ b/templates/layout/default.phtml @@ -4,7 +4,7 @@ - <?= $this->e($title) ?> - zend-expressive + <?= $this->e($title) ?> - Swedish Chamber @@ -13,21 +13,24 @@
-
-
Gran Prize
+
+
+ Gran Prize + +
Interdisciplinary
Innovative
Award
- + section('content') ?>