diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..4872c5af --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: +- package-ecosystem: npm + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 diff --git a/build.sh b/build.sh index 0f7e47db..faf72ade 100755 --- a/build.sh +++ b/build.sh @@ -10,7 +10,7 @@ then fi # Generate the docs using daux.io -if vendor/bin/daux generate --source=. --destination=html ; then +if php vendor/bin/daux generate --source=. --destination=html ; then # Remove the empty placeholder file from the generated html folder if [ -f html/modmore-documentation.zip ]; @@ -19,7 +19,7 @@ if vendor/bin/daux generate --source=. --destination=html ; then fi # Generate a zip file containing the complete static site, placing it inside the html folder again - zip -r html/modmore-documentation.zip html + #zip -r html/modmore-documentation.zip html else echo "Failed generating documentation"; exit 1; @@ -32,4 +32,4 @@ rm -rf html/themes; # Create symlink to central themes folder cd html; ln -s ../themes/ themes; cd ..; -echo "Build complete!"; \ No newline at end of file +echo "Build complete!"; diff --git a/composer.json b/composer.json index 411e1810..1ed16e13 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,10 @@ { + "config": { + "platform": { + "php": "7.4" + } + }, "require": { - "justinwalsh/daux.io": "dev-development" + "daux/daux.io": "0.x" } } diff --git a/composer.lock b/composer.lock index 7cc17496..8a36f455 100644 --- a/composer.lock +++ b/composer.lock @@ -1,40 +1,203 @@ { "_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" ], - "hash": "0389a259cd183bd7d9f213ffbe46b84b", - "content-hash": "e99e6338b927a9955825a72070b3b104", + "content-hash": "11fdb4e4b554a7045cad2f25afe4b346", "packages": [ + { + "name": "daux/daux.io", + "version": "0.17.2", + "source": { + "type": "git", + "url": "https://github.com/dauxio/daux.io.git", + "reference": "ef1a72ce597c70fc863ef117ae842cd93699aac6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dauxio/daux.io/zipball/ef1a72ce597c70fc863ef117ae842cd93699aac6", + "reference": "ef1a72ce597c70fc863ef117ae842cd93699aac6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "~6.0 || ~7.0", + "league/commonmark": "^2.0.0", + "league/plates": "~3.1", + "php": ">=7.4", + "scrivo/highlight.php": "^9.15", + "symfony/console": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "^1.10", + "symfony/process": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "replace": { + "justinwalsh/daux.io": "*" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6" + }, + "suggest": { + "ext-intl": "Allows to translate the modified at date" + }, + "bin": [ + "bin/daux" + ], + "type": "project", + "autoload": { + "psr-4": { + "Todaymade\\Daux\\": "libs/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stéphane Goetz", + "homepage": "http://onigoetz.ch/" + }, + { + "name": "Justin Walsh", + "homepage": "http://todaymade.com/" + } + ], + "description": "Documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly", + "homepage": "https://dauxio.github.io/", + "keywords": [ + "docs", + "documentation", + "markdown", + "md" + ], + "support": { + "issues": "https://github.com/dauxio/daux.io/issues", + "source": "https://github.com/dauxio/daux.io/tree/0.17.2" + }, + "time": "2022-01-03T20:27:17+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, { "name": "guzzlehttp/guzzle", - "version": "6.2.3", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/8d6c6cc55186db87b7dc5009827429ba4e9dc006", - "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" + "ext-json": "*", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "phpunit/phpunit": "^4.0", - "psr/log": "^1.0" + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "6.2-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { @@ -50,246 +213,415 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", "framework", "http", "http client", + "psr-18", + "psr-7", "rest", "web service" ], - "time": "2017-02-28 22:50:30" + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { - "php": ">=5.5.0" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.4-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { "psr-4": { "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle promises library", "keywords": [ "promise" ], - "time": "2016-12-20 10:07:11" + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "21dc724a0583619cd1652f673303492272778051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" }, "provide": { + "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.4-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { "psr-4": { "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, { "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20 17:10:46" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.8.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2025-08-23T21:21:41+00:00" }, { - "name": "justinwalsh/daux.io", - "version": "dev-development", + "name": "league/commonmark", + "version": "2.8.0", "source": { "type": "git", - "url": "https://github.com/justinwalsh/daux.io.git", - "reference": "0966d18839cd732e780056467a82f372904e0e5d" + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinwalsh/daux.io/zipball/0966d18839cd732e780056467a82f372904e0e5d", - "reference": "0966d18839cd732e780056467a82f372904e0e5d", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb", + "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~6.0", - "league/commonmark": "^0.15", - "league/plates": "~3.1", - "myclabs/deep-copy": "^1.5", - "php": ">=5.5", - "symfony/console": "~3.0", - "symfony/finder": "~3.0", - "symfony/process": "^3.1", - "webuni/commonmark-table-extension": "0.6.*", - "webuni/front-matter": "^1.0.0" + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "~4" + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.9-dev" + } }, - "bin": [ - "bin/daux" - ], - "type": "project", "autoload": { "psr-4": { - "Todaymade\\Daux\\": "libs/" + "League\\CommonMark\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Justin Walsh", - "homepage": "http://todaymade.com/" + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" } ], - "description": "Documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly", - "homepage": "http://daux.io/", + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", "keywords": [ - "docs", - "documentation", + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", "markdown", - "md" + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } ], - "time": "2017-03-02 17:17:29" + "time": "2025-11-26T21:48:24+00:00" }, { - "name": "league/commonmark", - "version": "0.15.3", + "name": "league/config", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "c8b43ee5821362216f8e9ac684f0f59de164edcc" + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c8b43ee5821362216f8e9ac684f0f59de164edcc", - "reference": "c8b43ee5821362216f8e9ac684f0f59de164edcc", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=5.4.8" - }, - "replace": { - "colinodell/commonmark-php": "*" + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" }, "require-dev": { - "cebe/markdown": "~1.0", - "erusev/parsedown": "~1.0", - "jgm/commonmark": "0.27", - "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "~1.2.0", - "phpunit/phpunit": "~4.3|~5.0", - "scrutinizer/ocular": "~1.1", - "symfony/finder": "~2.3|~3.0" - }, - "suggest": { - "league/commonmark-extras": "Library of useful extensions including smart punctuation" + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" }, - "bin": [ - "bin/commonmark" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "0.16-dev" + "dev-main": "1.2-dev" } }, "autoload": { "psr-4": { - "League\\CommonMark\\": "src/" + "League\\Config\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -304,36 +636,60 @@ "role": "Lead Developer" } ], - "description": "Markdown parser for PHP based on the CommonMark spec", - "homepage": "https://github.com/thephpleague/commonmark", + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", "keywords": [ - "commonmark", - "markdown", - "parser" + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } ], - "time": "2016-12-19 00:11:43" + "time": "2022-12-11T20:36:23+00:00" }, { "name": "league/plates", - "version": "3.3.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/thephpleague/plates.git", - "reference": "b1684b6f127714497a0ef927ce42c0b44b45a8af" + "reference": "a6a3238e46c6e19af7318fdc36bfbe49b0620231" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/plates/zipball/b1684b6f127714497a0ef927ce42c0b44b45a8af", - "reference": "b1684b6f127714497a0ef927ce42c0b44b45a8af", + "url": "https://api.github.com/repos/thephpleague/plates/zipball/a6a3238e46c6e19af7318fdc36bfbe49b0620231", + "reference": "a6a3238e46c6e19af7318fdc36bfbe49b0620231", "shasum": "" }, "require": { - "php": "^5.3 | ^7.0" + "php": "^7.0|^8.0" }, "require-dev": { - "mikey179/vfsstream": "^1.4", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { @@ -355,10 +711,15 @@ "name": "Jonathan Reinink", "email": "jonathan@reinink.ca", "role": "Developer" + }, + { + "name": "RJ Garcia", + "email": "ragboyjr@icloud.com", + "role": "Developer" } ], "description": "Plates, the native PHP template system that's fast, easy to use and easy to extend.", - "homepage": "http://platesphp.com", + "homepage": "https://platesphp.com", "keywords": [ "league", "package", @@ -366,76 +727,234 @@ "templating", "views" ], - "time": "2016-12-28 00:14:17" + "support": { + "issues": "https://github.com/thephpleague/plates/issues", + "source": "https://github.com/thephpleague/plates/tree/v3.5.0" + }, + "time": "2023-01-16T20:25:45+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.6.1", + "name": "nette/schema", + "version": "v1.2.5", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" + "url": "https://github.com/nette/schema.git", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", + "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", "shasum": "" }, "require": { - "php": ">=5.4.0" + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": "7.1 - 8.3" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" }, "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } ], - "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "config", + "nette" ], - "time": "2017-04-12 18:52:22" + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.5" + }, + "time": "2023-10-05T20:37:59+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "nette/utils", + "version": "v3.2.10", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/nette/utils.git", + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/nette/utils/zipball/a4175c62652f2300c8017fb7e640f9ccb11648d2", + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2 <8.4" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.2-dev" } }, "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.10" + }, + "time": "2023-07-30T15:38:18+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -448,45 +967,204 @@ "homepage": "http://www.php-fig.org/" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ "http", - "http-message", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", "psr", + "psr-17", "psr-7", "request", "response" ], - "time": "2016-08-06 14:39:51" + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" }, { - "name": "psr/log", - "version": "1.0.2", + "name": "psr/http-message", + "version": "2.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -494,62 +1172,802 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "scrivo/highlight.php", + "version": "v9.18.1.10", + "source": { + "type": "git", + "url": "https://github.com/scrivo/highlight.php.git", + "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/850f4b44697a2552e892ffe71490ba2733c2fc6e", + "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.7", + "sabberworm/php-css-parser": "^8.3", + "symfony/finder": "^2.8|^3.4|^5.4", + "symfony/var-dumper": "^2.8|^3.4|^5.4" + }, + "suggest": { + "ext-mbstring": "Allows highlighting code with unicode characters and supports language with unicode keywords" + }, + "type": "library", + "autoload": { + "files": [ + "HighlightUtilities/functions.php" + ], + "psr-0": { + "Highlight\\": "", + "HighlightUtilities\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Geert Bergman", + "homepage": "http://www.scrivo.org/", + "role": "Project Author" + }, + { + "name": "Vladimir Jimenez", + "homepage": "https://allejo.io", + "role": "Maintainer" + }, + { + "name": "Martin Folkers", + "homepage": "https://twobrain.io", + "role": "Contributor" + } + ], + "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js", + "keywords": [ + "code", + "highlight", + "highlight.js", + "highlight.php", + "syntax" + ], + "support": { + "issues": "https://github.com/scrivo/highlight.php/issues", + "source": "https://github.com/scrivo/highlight.php" + }, + "funding": [ + { + "url": "https://github.com/allejo", + "type": "github" + } + ], + "time": "2022-12-17T21:53:22+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "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": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.47" + }, + "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-11-06T11:30:55+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918", + "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "files": [ + "function.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": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4" + }, + "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-09-25T14:11:13+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.4.50", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "1a0706e8b8041046052ea2695eb8aeee04f97609" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/1a0706e8b8041046052ea2695eb8aeee04f97609", + "reference": "1a0706e8b8041046052ea2695eb8aeee04f97609", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "^1.0|^2.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "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": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.4.50" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-03T12:58:48+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/8c1b9b3e5b52981551fc6044539af1d974e39064", + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4", + "symfony/serializer": "<5.4.35|>=6,<6.3.12|>=6.4,<6.4.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4|^6.4", + "symfony/property-access": "^4.4|^5.1|^6.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/serializer": "^5.4.35|~6.3.12|^6.4.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "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": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.4.45" + }, + "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-23T20:18:32+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "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 intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance and support of other locales than \"en\"" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Icu\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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 intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-20T22:24:30+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", "keywords": [ - "log", - "psr", - "psr-3" + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2016-10-10 12:19:37" + "time": "2024-09-10T14:38:51+00:00" }, { - "name": "symfony/console", - "version": "v3.2.7", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "c30243cc51f726812be3551316b109a2f5deaf8d" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c30243cc51f726812be3551316b109a2f5deaf8d", - "reference": "c30243cc51f726812be3551316b109a2f5deaf8d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/filesystem": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "php": ">=7.2" }, "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/filesystem": "", - "symfony/process": "" + "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.2-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Console\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -558,56 +1976,85 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", - "time": "2017-04-04 14:33:42" + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/debug", - "version": "v3.2.7", + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "56f613406446a4a0a031475cfd0a01751de22659" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/56f613406446a4a0a031475cfd0a01751de22659", - "reference": "56f613406446a4a0a031475cfd0a01751de22659", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { - "php": ">=5.5.9", - "psr/log": "~1.0" + "ext-iconv": "*", + "php": ">=7.2" }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "provide": { + "ext-mbstring": "*" }, - "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.2-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -615,47 +2062,79 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", - "time": "2017-03-28 21:38:24" + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" }, { - "name": "symfony/finder", - "version": "v3.2.7", + "name": "symfony/polyfill-php73", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "b20900ce5ea164cd9314af52725b0bb5a758217a" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b20900ce5ea164cd9314af52725b0bb5a758217a", - "reference": "b20900ce5ea164cd9314af52725b0bb5a758217a", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.2-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Finder\\": "" + "Symfony\\Polyfill\\Php73\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -664,50 +2143,78 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", - "time": "2017-03-20 09:32:19" + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "name": "symfony/polyfill-php80", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.3-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -715,6 +2222,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -724,40 +2235,56 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", "polyfill", "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/process", - "version": "v3.2.7", + "version": "v5.4.51", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "57fdaa55827ae14d617550ebe71a820f0a5e2282" + "reference": "467bfc56f18f5ef6d5ccb09324d7e988c1c0a98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/57fdaa55827ae14d617550ebe71a820f0a5e2282", - "reference": "57fdaa55827ae14d617550ebe71a820f0a5e2282", + "url": "https://api.github.com/repos/symfony/process/zipball/467bfc56f18f5ef6d5ccb09324d7e988c1c0a98f", + "reference": "467bfc56f18f5ef6d5ccb09324d7e988c1c0a98f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" @@ -780,46 +2307,70 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "time": "2017-03-27 18:07:02" + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.51" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-26T15:53:37+00:00" }, { - "name": "symfony/yaml", - "version": "v3.2.7", + "name": "symfony/service-contracts", + "version": "v2.5.4", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "62b4cdb99d52cb1ff253c465eb1532a80cebb621" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/62b4cdb99d52cb1ff253c465eb1532a80cebb621", - "reference": "62b4cdb99d52cb1ff253c465eb1532a80cebb621", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" }, - "require-dev": { - "symfony/console": "~2.8|~3.0" + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "symfony/service-implementation": "" }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "2.5-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\Service\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -827,52 +2378,85 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", - "time": "2017-03-20 09:45:15" + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" + }, + "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-09-25T14:11:13+00:00" }, { - "name": "webuni/commonmark-table-extension", - "version": "0.6.1", + "name": "symfony/string", + "version": "v5.4.47", "source": { "type": "git", - "url": "https://github.com/webuni/commonmark-table-extension.git", - "reference": "ebbd69b63436283ec726658835b213ec634485e8" + "url": "https://github.com/symfony/string.git", + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webuni/commonmark-table-extension/zipball/ebbd69b63436283ec726658835b213ec634485e8", - "reference": "ebbd69b63436283ec726658835b213ec634485e8", + "url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799", + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799", "shasum": "" }, "require": { - "league/commonmark": "^0.14|^0.15", - "php": "^5.5|^7.0" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^1.9", - "phpunit/phpunit": "^4.3|^5.0", - "sllh/php-cs-fixer-styleci-bridge": "^2.0", - "symfony/var-dumper": "^2.7|^3.0" + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.7-dev" - } - }, "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Webuni\\CommonMark\\TableExtension\\": "src" - } + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -880,66 +2464,82 @@ ], "authors": [ { - "name": "Martin Hasoň", - "email": "martin.hason@gmail.com", - "role": "Lead Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Webuni s.r.o.", - "homepage": "https://www.webuni.cz" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The table extension for CommonMark PHP implementation", - "homepage": "https://github.com/webuni/commonmark-table-extension", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", "keywords": [ - "commonmark", - "markdown", - "table" + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.47" + }, + "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": "2017-01-11 14:52:17" + "time": "2024-11-10T20:33:58+00:00" }, { - "name": "webuni/front-matter", - "version": "1.0.0", + "name": "symfony/yaml", + "version": "v5.4.45", "source": { "type": "git", - "url": "https://github.com/webuni/front-matter.git", - "reference": "2c655c21e327e50708a847c5c6a4b52f1a111fdb" + "url": "https://github.com/symfony/yaml.git", + "reference": "a454d47278cc16a5db371fe73ae66a78a633371e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webuni/front-matter/zipball/2c655c21e327e50708a847c5c6a4b52f1a111fdb", - "reference": "2c655c21e327e50708a847c5c6a4b52f1a111fdb", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a454d47278cc16a5db371fe73ae66a78a633371e", + "reference": "a454d47278cc16a5db371fe73ae66a78a633371e", "shasum": "" }, "require": { - "php": "^5.6|^7.0", - "symfony/yaml": "^2.3|^3.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^1.9", - "mthaml/mthaml": "^1.2", - "nette/neon": "^2.2", - "phpunit/phpunit": "^5.4", - "sllh/php-cs-fixer-styleci-bridge": "^2.0", - "symfony/var-dumper": "^3.0", - "twig/twig": "^1.27|^2.0", - "yosymfony/toml": "~0.3" + "symfony/console": "^5.3|^6.0" }, "suggest": { - "nette/neon": "If you want to use NEON as front matter", - "yosymfony/toml": "If you want to use TOML as front matter" + "symfony/console": "For validating YAML files using the lint command" }, + "bin": [ + "Resources/bin/yaml-lint" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { "psr-4": { - "Webuni\\FrontMatter\\": "src" - } + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -947,34 +2547,46 @@ ], "authors": [ { - "name": "Martin Hasoň", - "email": "martin.hason@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Webuni s.r.o.", - "homepage": "https://www.webuni.cz" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Front matter parser and dumper for PHP", - "homepage": "https://github.com/webuni/front-matter", - "keywords": [ - "front-matter", - "json", - "neon", - "toml", - "yaml" + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v5.4.45" + }, + "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": "2016-12-30 14:37:21" + "time": "2024-09-25T14:11:13+00:00" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "justinwalsh/daux.io": 20 - }, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], - "platform-dev": [] + "platform-dev": [], + "platform-overrides": { + "php": "7.4" + }, + "plugin-api-version": "2.6.0" } diff --git a/en/01_Agenda/v1/01_Installation.md b/en/01_Agenda/v1/01_Installation.md new file mode 100755 index 00000000..c795e9ad --- /dev/null +++ b/en/01_Agenda/v1/01_Installation.md @@ -0,0 +1,24 @@ +The MODX installer should install the package automatically from the modmore +repository. + +A custom manager page called _Agenda_ is installed within the _Extras_ menu. +Also, some [snippets](04_Snippets/index.md) in the element category named +_Agenda_ are created. + +There are some system settings available in the namespace _agenda_. These can +also be edited in the [settings](02_Custom_Manager_Page/08_Settings.md) (cog +icon) tab of the _Agenda_ custom manager page. + +If you want to connect events, categories, calendars or locations to MODX +resources, you have to enter the parents of those resources in the system +settings. + +To use the map and the geolocation option in the location address tab, you have +to enter a [Google Maps API +Key](https://developers.google.com/maps/documentation/javascript/get-api-key) in +the Agenda [system setting](02_Custom_Manager_Page/08_Settings.md) +`agenda.google_maps_api_key`. You have to activate the Maps JavaScript API and +the Geocoding API in the created Google Cloud Platform project. + +After the installation you have to set up a cronjob, if you want to use more than +100 repeats of a repeating event or if you want to set up feeds. diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/01_Overview.md b/en/01_Agenda/v1/02_Custom_Manager_Page/01_Overview.md new file mode 100755 index 00000000..b417a6ee --- /dev/null +++ b/en/01_Agenda/v1/02_Custom_Manager_Page/01_Overview.md @@ -0,0 +1,107 @@ +This tab contains a calendar view of the current month. + + + +You can create a new event with a click on the plus sign at beneath the day +number in the month view (or the date/weekday in the week/day view). There is +also a create event button on the top left of the tab. + +The calendar can be filtered by calendar or category dropdown selects and by a +search input on the top right of the tab. It can also be filtered by the +publication status of an event. + +The arrow buttons on the top left can be used to switch the event month (in +the month view). If you click on today, the calendar will show the current day +in the selected view. + +The view mode can be changed on top right to the month view, the week view, +the day view and the list view. + +Each event can be edited by a click on the edit icon displayed on an event. It +can be deleted after a confirmation with a click on the trash icon. + +There is also a hover popup for each event, that shows a short information for +the hovered event. + + + +## Create/Edit + +The create/edit window for one event has a lot of options, that can be set. + + + +### Event Tab + +In the event tab you have to set the event title and the event calendar, where +the event is shown in. An event must have a start date/time and an end +date/time, and it can have a location. The location can be created/edited +directly on the event tab. + +The event can be linked with a MODX resource. This combo field is only shown, +when the system setting `agenda.parents_event` is filled with a comma separated +list of resources, that are parents for the resources selectable with the combo +field. This combo has a select, a preview and a quickedit button. The resource +can be edited in a new window with an alt click on the quickedit button. + +The event could be restricted to a context, it has to be tagged with at least +one category, and it could be toggled to inactive. If the `All Day Event` +checkbox is checked, the events don't have a time input. + +If the event is set as repeating event, an additional section is visible. There +you could set the repeating type. On base of the repeating type, you have +different inputs visible. + +With the interval the event repeats could be restricted to every `X` +days/months/weeks/years. The repeats will be calculated until the date set in +the last occurence input. There is a maximum of 100 repeating events that are +generated during saving an event. This maximum could be changed with the +optional createable `agenda.repeating_max_occurance` system setting. With the +`weekly` repeating type, you could set the weekdays, where the event will start. +The start date/time will then be recalculated on base of the first repeating +event. With the `monthly by weekday` repeating type, you could set the event +i.e. to the second wednesday or last tuesday of a month. With the `custom` +repeating type, you can create your own event dates in the repeats grid. + +The fields on the event tab can be extended by the [Extended Event +Fields](../06_Extended_Fields.md) system setting. + +### Repeats Tab + +In the repeats tab you could view the repeats of the current event. You could +edit and delete each repeat. If the repeat type is `custom` you can add your own +event dates. The title column of a repeat is light gray, when is uses the +default title. When one field of the repeat does not use the default value, the +modified column contains a green tick. + +The grid can be toggled to show past/future repeats. It also can be filtered by +a search input on the top right above the repeats grid. + +During editing a repeat, you can change the repeat dates, the title and the +description for each repeat. + +The fields in the repeat edit window can be extended by the [Extended Repeat +Fields](../06_Extended_Fields.md) system setting. + +The repeats are marked to be reset, when the repeat options of an event are +changed or the event dates are modified. When all repeating events will be +changed or removed during saving the event a warning will be shown. + +### Description/Content Tab + +In the description tab you could set the description for the current event. In +the content tab you could set the content for the current event. The editor type +of the content/description input could be set with the `agenda.editor_type` +system setting to htmleditor (the system-wide richtext editor), modx-texteditor +(the system-wide code editor) or textarea. + +### Images/Videos Tab + +After an event is saved, you could attach images and videos to the saved event +in the images/videos tab. Each image/video could have a title and a description. +It could also be toggled to inactive. + +### User Tab + +In the user tab you could restrict the event to multiple users and/or multiple +usergroups. diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/02_Events.md b/en/01_Agenda/v1/02_Custom_Manager_Page/02_Events.md new file mode 100755 index 00000000..b29a5527 --- /dev/null +++ b/en/01_Agenda/v1/02_Custom_Manager_Page/02_Events.md @@ -0,0 +1,36 @@ +This tab contains a paginated grid with all future (or past) events. + + + +You can create a new event with a click on the create event button on the top +left above the events grid. + +If the manger user has `agenda_export` or `agend_import` permissions an export +and import button is displayed right of the create event button. This allows the +user to [export and import](../07_Export_Import_Events.md) the events. + +The grid can be toggled to show past or future events. When the grid shows past +events, the toggle button is shown in red. It can be filtered by calendar and +filtered by category. It can also be filtered by the publication status of an +event and its recurrences. In addition, it can be filtered by a search entry at +the top right above the event grid. + +Each event can be edited by clicking on the edit icon in the event's row. It can +be duplicated by clicking on the duplicate icon in the row of the event. It can +be deleted after confirmation by clicking on the trash icon in the row of the +event. + +The row of each event shows the event source, the title, the calendar, the +categories, the start and the end date and the active state of an entry. The +title can be edited inline with a double click on the text. An event would +normally have a `Local` source. If the event is created by a feed it will have a +`Feed` source. + +If the [extended event fields](../06_Extended_Fields.md) are set, the columns of +those extended fields are shown after the `active` column. + +## Create/Edit + +The create/edit window for one event has a lot of options, that can be set. The +information about those options can be found in the [Tab +Overview](01_Overview.md#createedit) documentation. diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/03_Categories.md b/en/01_Agenda/v1/02_Custom_Manager_Page/03_Categories.md new file mode 100755 index 00000000..7581cb19 --- /dev/null +++ b/en/01_Agenda/v1/02_Custom_Manager_Page/03_Categories.md @@ -0,0 +1,36 @@ +This tab contains a paginated grid with all categories. + + + +You can create a new category with a click on the create category button on the top +left above the categories grid. + +The grid can be filtered by a search input on the top right above the +categories grid. + +Each category can be edited by a click on the edit icon in the row of the +category. And it can be deleted after a confirmation with a click on the trash +icon in the row of the category. + +The row of each category shows the color icon, the name, the alias and the +active state of an entry. The name and the alias can be edited inline with +a double click on the text. + +## Create/Edit + +The create/edit window for one category has some options, that can be set. + + + +You can set the category name, the category alias, and you can toggle it to +inactive. And you can set the category text and background color with a color +picker. + +The category can be linked with a MODX resource. This combo field is only +shown, when the system setting `agenda.parents_category` is filled with a comma +separated list of resources, that are parents for the resources selectable with +the combo field. This combo has a select, a preview and a quickedit button. The +resource can be edited in a new window with an alt click on the quickedit +button. + + diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/04_Calendars.md b/en/01_Agenda/v1/02_Custom_Manager_Page/04_Calendars.md new file mode 100755 index 00000000..55a48e59 --- /dev/null +++ b/en/01_Agenda/v1/02_Custom_Manager_Page/04_Calendars.md @@ -0,0 +1,35 @@ +This tab contains a paginated grid with all calendars. + + + +You can create a new calendar with a click on the create calendar button on the top +left above the calendars grid. + +The grid can be filtered by a search input on the top right above the +calendars grid. + +Each calendar can be edited by a click on the edit icon in the row of the +calendar. And it can be deleted after a confirmation with a click on the trash +icon in the row of the calendar. + +The row of each calendar shows the color icon, the name, the alias and the +active state of an entry. The name and the alias can be edited inline with +a double click on the text. + +## Create/Edit + +The create/edit window for one calendar has some options, that can be set. + + + +You can set the calendar name, and you can toggle it to inactive. And you +can set the calendar text and background color with a color picker. + +The calendar can be linked with a MODX resource. This combo field is only +shown, when the system setting `agenda.parents_calendar` is filled with a comma +separated list of resources, that are parents for the resources selectable with +the combo field. This combo has a select, a preview and a quickedit button. The +resource can be edited in a new window with an alt click on the quickedit +button. + + diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/05_Locations.md b/en/01_Agenda/v1/02_Custom_Manager_Page/05_Locations.md new file mode 100755 index 00000000..707e2879 --- /dev/null +++ b/en/01_Agenda/v1/02_Custom_Manager_Page/05_Locations.md @@ -0,0 +1,45 @@ +This tab contains a paginated grid with all locations. + + + +You can create a new location with a click on the create location button on the top +left above the locations grid. + +The grid can be filtered by a search input on the top right above the +locations grid. + +Each location can be edited by a click on the edit icon in the row of the +location. And it can be deleted after a confirmation with a click on the trash +icon in the row of the location. + +The row of each location shows the name, the formatted address, the active state +and the show on map setting (if you have set the Google Maps API key in the +system settings) of an entry. The name and the address can be edited inline +with a double click on the text. + +## Create/Edit + +The create/edit window for one location has some options, that can be set. + + + +### Location Tab + +On the location tab you can set the location name, toggle it to inactive (and +toggle the display on a map, if you have set the Google Maps API key in the +system settings). + +The fields on the location tab can be extended by the [Extended Repeat +Fields](../06_Extended_Fields.md) system setting. + + + +### Address Tab + +On the address tab you can enter the address. If you have set the Google Maps +API key in the system settings, you can geocode that address with the search +button on the map. If marker on the map is not set right, you can drag it +around (the location latitude and longitude values will be changed). Also, the +map content can be dragged with the mouse (the map latitude and longitude +values will be changed). The zoom level of the map can be changed by clicking +on the plus/minus signs (the zoom value will be changed). diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/06_Feeds.md b/en/01_Agenda/v1/02_Custom_Manager_Page/06_Feeds.md new file mode 100755 index 00000000..91dd7842 --- /dev/null +++ b/en/01_Agenda/v1/02_Custom_Manager_Page/06_Feeds.md @@ -0,0 +1,34 @@ +This tab contains a paginated grid with all feeds. + + + +You can create a new feed with a click on the create feed button on the top +left above the feeds grid. + +The grid can be filtered by a search input on the top right above the +feeds grid. + +Each feed can be edited by a click on the edit icon in the row of the feed. And +it can be deleted after a confirmation with a click on the trash icon in the row +of the feed. The feed can be refreshed with a click on the refresh icon. + +The row of each feed shows the feed url, date/time of the last run and the +next run by the cronjob, the feed type the calendar, the categories and the +active state of an entry. The feed url and the feed type can be edited inline +with a double click on the text. + +## Create/Edit + +The create/edit window for one feed has some options, that can be set. + + + +You can set the feed URL the events are retrieved from. You can select the +calendar, where the feed events are imported into. You can set the categories, +the feed events will get. You can set the update interval and frequency for +the cronjob update of the feed. You can set the feed type (iCal or XML) and +you can toggle the feed to inactive. + +The cronjob URL can't use the webcal protocol. Please try to change the url from +`webcal://calendar.domain/url.path` to `https://calendar.domain/url.path` in +that case. diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/07_Modules.md b/en/01_Agenda/v1/02_Custom_Manager_Page/07_Modules.md new file mode 100755 index 00000000..78d6bf1a --- /dev/null +++ b/en/01_Agenda/v1/02_Custom_Manager_Page/07_Modules.md @@ -0,0 +1,12 @@ +This tab contains a paginated grid with all modules installed in Agenda. + + + +It is visible only to a user who has enabled the `agenda_modules` permission. A +module can be added by entering a package name in lowercase. An installed module +can be activated, deactivated and removed with one click in the context menu of +the module row. The `active` column ‘Active’ can be edited inline and the trash +icon can remove a module. At least the modules can be sorted by drag & drop. + +The creation of custom modules will be described later. Until then, we will +send the code of a skeleton module on demand. diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/08_Settings.md b/en/01_Agenda/v1/02_Custom_Manager_Page/08_Settings.md new file mode 100755 index 00000000..28dd3a9f --- /dev/null +++ b/en/01_Agenda/v1/02_Custom_Manager_Page/08_Settings.md @@ -0,0 +1,7 @@ +This tab contains a paginated grid with all settings of the agenda namespace. + + + +It is only visible for a user that has the `setting` or the `agenda_settings` +permission enabled. Each setting can be edited the same as in the MODX system +settings panel. diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/calendar-colorpicker.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/calendar-colorpicker.png new file mode 100644 index 00000000..e9a9ab49 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/calendar-colorpicker.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/calendar-edit.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/calendar-edit.png new file mode 100644 index 00000000..8614d0b2 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/calendar-edit.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/calendars.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/calendars.png new file mode 100644 index 00000000..7394b57d Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/calendars.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/categories.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/categories.png new file mode 100644 index 00000000..fae150c8 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/categories.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/category-colorpicker.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/category-colorpicker.png new file mode 100644 index 00000000..4fda9f44 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/category-colorpicker.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/category-edit.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/category-edit.png new file mode 100644 index 00000000..9d1765e1 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/category-edit.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/event-edit.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/event-edit.png new file mode 100644 index 00000000..56480361 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/event-edit.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/events.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/events.png new file mode 100644 index 00000000..8af0ace7 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/events.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/feed-edit.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/feed-edit.png new file mode 100644 index 00000000..24bee67f Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/feed-edit.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/feeds.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/feeds.png new file mode 100644 index 00000000..0878db82 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/feeds.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/location-edit-address.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/location-edit-address.png new file mode 100644 index 00000000..91d9a0fe Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/location-edit-address.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/location-edit-location.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/location-edit-location.png new file mode 100644 index 00000000..99ed6e1e Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/location-edit-location.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/locations.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/locations.png new file mode 100644 index 00000000..dc1d18fc Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/locations.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/modules.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/modules.png new file mode 100644 index 00000000..36284803 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/modules.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/overview-hover.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/overview-hover.png new file mode 100644 index 00000000..90bc953e Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/overview-hover.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/overview.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/overview.png new file mode 100644 index 00000000..25882500 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/overview.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/img/settings.png b/en/01_Agenda/v1/02_Custom_Manager_Page/img/settings.png new file mode 100644 index 00000000..e4c0bdf4 Binary files /dev/null and b/en/01_Agenda/v1/02_Custom_Manager_Page/img/settings.png differ diff --git a/en/01_Agenda/v1/02_Custom_Manager_Page/index.md b/en/01_Agenda/v1/02_Custom_Manager_Page/index.md new file mode 100755 index 00000000..9fcfa653 --- /dev/null +++ b/en/01_Agenda/v1/02_Custom_Manager_Page/index.md @@ -0,0 +1,35 @@ +You can create and edit your event data on the custom manager page of _Agenda_. +This page contains up to eight tabs where you can manage different parts of the +events. + +#### Overview + +This tab contains a calendar [overview](01_Overview.md) of the current month. + +#### Events + +This tab contains a grid view of all [events](02_Events.md). + +#### Categories + +This tab contains a grid view of all [categories](03_Categories.md). + +#### Calendars + +This tab contains a grid view of all [calendars](04_Calendars.md). + +#### Locations + +This tab contains a grid view of all [locations](05_Locations.md). + +#### Feeds + +This tab contains a grid view of all [feeds](06_Feeds.md). + +#### Modules (puzzle icon) + +This tab contains a grid view of all [modules](07_Modules.md). + +#### Settings (cog icon) + +This tab contains a grid view of all [settings](08_Settings.md). diff --git a/en/01_Agenda/v1/03_System_Settings.md b/en/01_Agenda/v1/03_System_Settings.md new file mode 100755 index 00000000..86a76bf5 --- /dev/null +++ b/en/01_Agenda/v1/03_System_Settings.md @@ -0,0 +1,53 @@ +_Agenda_ contains some _system settings_ in the `agenda` namespace. + +These are available in the MODX system settings panel and in the +[settings](02_Custom_Manager_Page/08_Settings.md) tab (cog icon) of the _Agenda_ +custom manager page. + +| Key | Name | Description | Default | +|---------------------------------|----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| +| agenda.blur_data | Blur Data | ** Since 1.5.6 ** Blur data to present the functionality without revealing personal data. | No | +| agenda.category_required | Category Required | An event requires a category. | Yes | +| agenda.cronjob_id | Cronjob ID | String, that has to be added to the cronjob url as cronjob_id parameter. | - | +| agenda.debug | Debug | Log debug information in the MODX error log. | No | +| agenda.default_timezone | Default Timezone | Default [time zone](https://www.php.net/manual/en/timezones.php) for events. | Europe/Berlin | +| agenda.detail_id | Detail ID | ID of a resource containing AgendaDetail snippet call. | - | +| agenda.editor_type | Editor Type | Editor type for text fields (htmleditor, modx-texteditor or textarea). | htmleditor | +| agenda.extended_event_fields | Extended Event Fields | JSON encoded array of extended event fields. | - | +| agenda.extended_location_fields | Extended Location Fields | ** Since 1.4.0 ** JSON encoded array of extended location fields. | - | +| agenda.extended_repeat_fields | Extended Repeat Fields | ** Since 1.4.0 ** JSON encoded array of extended repeat fields. | - | +| agenda.extended_xtypes_script | Extended xtypes Script | ** Since 1.4.0 ** Url to a script, that defines custom xtypes. Relative to the manager url or (if absolute) to the base url. | - | +| agenda.google_maps_api_key | Google Maps API Key | [Request](https://developers.google.com/maps/documentation/javascript/get-api-key) a Google Maps API Key. | - | +| agenda.google_maps_default_lat | Google Maps Default Latitude | Default latitude for the displayed map when creating/editing a location. | 51.977825 | +| agenda.google_maps_default_lng | Google Maps Default Longitude | Default longitude for the displayed map when creating/editing a location. | 7.291066 | +| agenda.google_maps_default_zoom | Google Maps Standard Zoom | Default zoom for the displayed map when creating/editing a location. | 9 | +| agenda.google_maps_region | Google Maps API Preferred Region | [Preferred region](https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingRegionCodes) for the geocoding result. | - | +| agenda.image_mediasource | Image Media Source | Media source for event images. | 1 | +| agenda.import_export_type | Import/Export Type | ** Since 1.5.0 ** File type of the imported/exported files. Can be set to 'csv', 'excel', 'yaml' | csv | +| agenda.list_id | List ID | ID of a resource containing an AgendaList snippet call. | - | +| agenda.locale | Locale | Set the locale for Agenda. Leave blank to use the MODX system setting 'locale'. See [the PHP documentation](https://www.php.net/setlocale) for more information. | - | +| agenda.manager_date_alt_formats | Date Alt Formats | ** Since 1.4.0 ** Multiple date formats separated by "|" that are tried when a user input value is parsed and it does not match the defined format. Each format must be valid according to [Ext JS Date](https://docs.sencha.com/extjs/3.4.0/#!/api/Date). | (lexicon) | +| agenda.manager_date_format | Date Format | The format must be valid according to [Ext JS Date](https://docs.sencha.com/extjs/3.4.0/#!/api/Date). | (lexicon) | +| agenda.manager_date_format_long | Date Format (long) | The format must be valid according to [Ext JS Date](https://docs.sencha.com/extjs/3.4.0/#!/api/Date). | (lexicon) | +| agenda.manager_time_format | Time Format | The format must be valid according to [Ext JS Date](https://docs.sencha.com/extjs/3.4.0/#!/api/Date). | (lexicon) | +| agenda.manager_time_increment | Time Steps | Number of minutes between individual time values in the time selection field. | 15 | +| agenda.parents_calendar | Calendar Parent Resources | Comma-separated list of parent resources to select a resource connected with a calendar. | - | +| agenda.parents_category | Category Parent Resources | Comma-separated list of parent resources to select a resource connected with a category. | - | +| agenda.parents_event | Event Parent Resources | Comma separated list of parent resources to select a resource connected with an event. | - | +| agenda.parents_location | Location Parent Resources | Comma separated list of parent resources to select a resource connected with a location. | - | +| agenda.repeating_max_occurance | Maximum Occurance | Maximum orccurance of repeating events. | 100 | +| agenda.show_ids | Show ID Columns | ** Since 1.5.5 ** Show ID columns in the tables. | No | +| agenda.use_activate_at | Use Activate | ** Since 1.6.0 ** Show the ‘Activate/Deactivate At’ input in the event, the repeat, the location, the image, the video, the category and the calendar edit window. The data will be activated/deactivated during a page request. | No | +| agenda.use_category | Use Category | Show the category input in the events editing window. Show the categories column in the events grid. Show the categories tab in the Agenda custom manager page. | Yes | +| agenda.use_content | Use Event Content | ** Since 1.6.3 ** Show the content tab in the event edit window. | Yes | +| agenda.use_context | Use Contexts | Show the context input in the event edit window. | Yes | +| agenda.use_images | Use Event Images | ** Since 1.6.3 ** Show the images tab in the event edit window. | Yes | +| agenda.use_location | Use Location | Show the location input in the event edit window. Show the locations tab in the Agenda custom manager page. | Yes | +| agenda.use_users | Use Event Users | ** Since 1.6.3 ** Show the users tab in the event edit window. | Yes | +| agenda.use_videos | Use Event Videos | ** Since 1.6.3 ** Show the videos tab in the event edit window. | Yes | +| agenda.video_mediasource | Video Media Source | Media Source for Event Videos. | 1 | + +The settings `agenda.extended_event_fields`, `agenda.extended_repeat_fields` and +`agenda.extended_location_fields` can use `@FILE` or `@CHUNK` bindings. Path +placeholders like `{core_path}`, `{base_path}` and `{assets_path}` can be used. +All paths have to stay inside the MODX base path because of security reasons. diff --git a/en/01_Agenda/v1/04_Snippets/01_AgendaList.md b/en/01_Agenda/v1/04_Snippets/01_AgendaList.md new file mode 100755 index 00000000..8267d6f6 --- /dev/null +++ b/en/01_Agenda/v1/04_Snippets/01_AgendaList.md @@ -0,0 +1,162 @@ +This snippet displays events in a list view. + +## Properties + +It uses the following snippet properties: + +| Property | Description | Default | +|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------| +| active | **Since 1.6.3** If this option is disabled, the active status of an event is not regarded. | 1 (Yes) | +| ajax | **Since 1.4.0** If set, the snippet output will be directly returned to the browser as a JSON result when the page is requested with the same value in the ajax request parameter. | 0 (No) | +| allowedRequestKeys | Comma-separated list of request keys, that can be used to filter the displayed events. Defaults to all allowed. | - | +| calendars | Comma-separated list of aliases of calendars to filter the displayed events. | - | +| categories | Comma separated list of aliases of categories to filter the displayed events. | - | +| categoryTpl | Name of a chunk that contains the template of one category in the category list of an event. | tplAgendaEventCategory | +| contexts | Comma separated list of context keys to filter the displayed events. | - | +| daterangeFormat | Format of the daterange displayed in an event. | - | +| daterangeSeparator | Separator in the daterange displayed in an event. | - | +| detailId | ID of a resource containing an AgendaDetail snippet call. | - | +| durationParts | Number of detail parts of the event duration output. | 1 | +| durationRound | **Since 1.5.0** Rounding type for event duration. | ceil | +| emptyTpl | Name of a chunk that contains the template for an empty list of events. | tplAgendaEventEmpty | +| end | The end date to filter the displayed events. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | today +1 month 0:00 | +| events | Comma separated list of event IDs to filter the displayed events and their repeats. Supersedes the repeats property. | - | +| excludeEvents | Comma separated list of event IDs to exclude from the displayed events. | - | +| excludeRepeats | Comma separated list of repeating event IDs to exclude from the displayed events. | - | +| groupby | **Since 1.5.0** xPDO group by clause to filter the events. | - | +| imageTpl | Name of a chunk that contains the template for one image in the image list of an event. | tplAgendaEventImage | +| limit | Limit the number of events in the result. Use "0" for unlimited events. | 20 | +| listId | ID of a resource containing an AgendaList snippet call. | - | +| locale | The locale for the displayed formatted date. Defaults to the current system/context locale setting. | - | +| locations | Comma separated list of aliases of locations to filter the displayed events. | - | +| locationTpl | Name of a chunk that contains the template for the location of an event. | tplAgendaEventLocation | +| offset | The offset of events to skip. | - | +| outputSeparator | An optional string to separate each tpl instance. | - | +| repeats | Comma separated list of repeating event IDs to filter the displayed repeating events. Overridden by the events property. | - | +| resourceTpl | Name of a chunk that contains the template for the linked resource of an event. | - | +| sortby | Sort field for sorting the output. It could also contain a JSON object to sort the ouput by multiple fields like
{"AgendaEvents.title":"ASC","all_startdate":"ASC"}. | all_startdate |
+| sortdir | Sort direction for sorting the output. Unused when the sortby property contains a valid JSON object. | ASC |
+| start | The start date to filter the displayed events. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | today 0:00 |
+| toPlaceholder | If set, the snippet result will be assigned to this placeholder instead of outputting it directly. | - |
+| totalVar | The key of a placeholder that indicates the total number of events. | agendalist.total |
+| tpl | Name of a chunk that contains the template for one event. | tplAgendaEventRow |
+| usergroups | Comma separated list of user group names to filter the displayed events. | - |
+| users | Comma separated list of user IDs to filter the displayed events. | - |
+| videoTpl | Name of a chunk that contains the template for one video in the video list of an event. | tplAgendaEventVideo |
+| where | **Since 1.5.0** JSON encoded xPDO where clause to filter the displayed events. | - |
+| wrapperTpl | Name of a chunk that contains the wrapper template for all events. | tplAgendaEventWrapper |
+
+## Placeholders
+
+The following placeholders are available in the different (default) chunks. Each
+snippet property will be set as placeholder in each template chunk, i.e. a
+snippet call ```[[!AgendaDetail? &subtitle=`whatever`]]``` will fill the
+placeholder subtitle in each used chunk with the value `whatever`.
+
+**CAUTION:** The default template chunks for both snippets are overwritten
+during each package update, so please rename the chunks before editing them.
+
+### tplAgendaEventRow
+
+| Placeholder | Description |
+|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| allday | Contains 1 if the event is an all day event (otherwise 0). |
+| calendar_background | The background color of the calendar of the event. |
+| calendar_foreground | The foreground color of the calendar of the event. |
+| calendar_name | The calendar name. |
+| categories | All categories of the event formatted by the chunk set with the categoryTpl property |
+| description | The description of the event. |
+| detail_url | The url that shows the event detail. Will be generated with the system/context setting `agenda.detail_id`. This resource should contain an AgendaDetail snippet call. |
+| duration | The formatted duration of the event. The details of the duration could be set with the `durationParts` snippet property. |
+| enddate | The start date of the event formatted in ISO 8601 (could be formatted i.e. with ```[[+enddate:strtotime:date=`%a. %d.%m.%Y`]]```). |
+| idx | The number of the event starting with 1. |
+| images | All images of the event formatted by the chunk set with the imageTpl property |
+| imageurls | An array of all image urls. The placeholder `[[+imageurls.1]]` contains the url of the first image |
+| location | The location of the event formatted by the chunk set with the locationTpl property |
+| range | The formatted date range of the event. The format is defined with the lexicon entries `agenda.php_format_daterange` and `agenda.php_format_separator` and could be overridden by the `daterangeFormat` snippet property. The [format rules](#range-placeholder-format) are described below. |
+| repeating | Contains 1 if the event is an repeating event (otherwise 0). |
+| resource_id | The id of a linked resource of the event. |
+| startdate | The start date of the event formatted in ISO 8601 (could be formatted i.e. with ```[[+startdate:strtotime:date=`%a. %d.%m.%Y`]]```). |
+| title | The title of the event. |
+| videos | All videos of the event formatted by the chunk set with the videosTpl property |
+| videourls | An array of all video urls. The placeholder `[[+videourls.1]]` contains the url of the first video |
+
+[Extended fields](../06_Extended_Fields) are available as placeholder with the prefix `extended` in the
+event row template.
+
+### tplAgendaEventWrapper
+
+| Placeholder | Description |
+|-------------|---------------------------------------------------------------------------------------------|
+| count | Count of the events filtered by the snippet properties (without limit/offset) |
+| output | All events collected by the snippet separated by the string in the outputSeparator property |
+
+### tplAgendaEventEmpty
+
+Only the current script properties are available as placeholders.
+
+### tplAgendaEventCategory
+
+| Placeholder | Description |
+|-------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| alias | The alias of the category. |
+| background | The background color of the category of the event. |
+| foreground | The foreground color of the category of the event. |
+| name | The name of the category. |
+| resource_id | The id of a linked resource of the category. |
+| selected | Contains `selected="selected"`, when the category request value is equal to the alias of the category. |
+| url | The url that shows the event list filtered by the displayed category. Will be generated with the system/context setting `agenda.list_id`. This resource should contain an AgendaList snippet call. |
+
+### tplAgendaEventImage
+
+| Placeholder | Description |
+|-------------|------------------------------------------|
+| description | The description of the image. |
+| idx | The number of the image starting with 1. |
+| title | The title of the image. |
+| url | The url that shows the event image. |
+
+### tplAgendaEventLocation
+
+| Placeholder | Description |
+|-------------|--------------------------------------------------------------------------------------------------------|
+| address | The address of the location. |
+| alias | The alias of the location. |
+| center_lat | The latitude of the center of a map of the location. |
+| center_lng | The longitude of the center of a map of the location. |
+| description | The description of the location. |
+| lat | The latitude of the location. |
+| lng | The longitude of the location. |
+| name | The name of the location. |
+| resource_id | The id of a linked resource of the location. |
+| selected | Contains `selected="selected"`, when the location request value is equal to the alias of the location. |
+| zoom | The zoom level of a map of the location. |
+
+### tplAgendaEventVideo
+
+| Placeholder | Description |
+|-------------|------------------------------------------|
+| description | The description of the video. |
+| idx | The number of the video starting with 1. |
+| title | The title of the video. |
+| url | The url that shows the event video. |
+
+## Range placeholder format
+
+The `range` placeholder could be formatted with the lexicon entries
+`agenda.php_format_daterange` and `agenda.php_format_separator` or the snippet
+properties `daterangeFormat` and `daterangeSeparator`. The format string has to
+use exactly 7 parts separated by `|`. The default english lexicon entry is
+`j.| F |Y|, |g|:i a|`.
+
+The daterrange is formatted with the following rules:
+
+- If both dates are different and the hour/minute of start and end is 0, parts 4-7 are removed from start and end date.
+- If both dates are different and the hour/minute of start and end is 0 and year of start and end is equal, parts 4-7 are removed from start and end date and part 3 is removed from start date.
+- If both dates are different and the hour/minute of start and end is 0 and year and month of start and end are equal, parts 4-7 are removed from start and end date and parts 2-3 are removed from start date.
+- If both dates are different and the hour/minute of start and end is 0 and year, month and day of start and end are equal, parts 4-7 are removed from start and end date and parts 1-3 are removed from start date.
+- If both dates are different and the hour/minute of start and end is not 0 and one detail of year, month and day of start and end is not equal, all parts are used in the start and end date.
+- If both dates are different and the hour/minute of start and the hour of end is 0 and all details of year, month and day of start and end are equal, parts 4-7 are removed from start date.
+- If both dates are different and the hour or minute of start or the hour of end not 0 and all details of year, month and day of start and end are equal, part 7 is removed from start date.
+- If both dates are equal and the hour/minute of start is 0, part 4-7 is removed from the start date and separator and end date are removed.
+- If both dates are equal and the hour/minute of start is not 0, separator and end date are removed.
diff --git a/en/01_Agenda/v1/04_Snippets/02_AgendaCalendar.md b/en/01_Agenda/v1/04_Snippets/02_AgendaCalendar.md
new file mode 100755
index 00000000..b7072e97
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/02_AgendaCalendar.md
@@ -0,0 +1,146 @@
+This snippet displays events in a list view separared into intervals. The
+snippet was introduced with Agenda 1.1.0.
+
+## Properties
+
+It uses the following snippet properties:
+
+| Property | Description | Default |
+|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|
+| active | **Since 1.6.3** If this option is disabled, the active status of an event is not regarded. | 1 (Yes) |
+| ajax | **Since 1.4.0** If set, the snippet output will be directly returned to the browser as a JSON result when the page is requested with the same value in the ajax request parameter. | 0 (No) |
+| allowedRequestKeys | Comma-separated list of request keys, that can be used to filter the displayed events. Defaults to all allowed. | - |
+| calendars | Comma-separated list of aliases of calendars to filter the displayed events. | - |
+| categories | Comma separated list of aliases of categories to filter the displayed events. | - |
+| categoryTpl | Name of a chunk that contains the template of one category in the category list of an event. | tplAgendaEventCategory |
+| contexts | Comma separated list of context keys to filter the displayed events. | - |
+| daterangeFormat | Format of the daterange displayed in an event. | - |
+| daterangeSeparator | Separator in the daterange displayed in an event. | - |
+| detailId | ID of a resource containing an AgendaDetail snippet call. | - |
+| durationParts | Number of detail parts of the event duration output. | 1 |
+| durationRound | **Since 1.5.0** Rounding type for event duration. | ceil |
+| end | The end date to filter the displayed events. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | - |
+| excludeEvents | Comma separated list of event IDs to exclude from the displayed events. | - |
+| excludeRepeats | Comma separated list of repeating event IDs to exclude from the displayed events. | - |
+| imageTpl | Name of a chunk that contains the template for one image in the image list of an event. | tplAgendaEventImage |
+| interval | The interval into which the period between start and end date is divided. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | - |
+| intervalTpl | Name of a chunk that contains the template for an interval. | tplAgendaEventInterval |
+| listId | ID of a resource containing an AgendaList snippet call. | - |
+| locale | The locale for the displayed formatted date. Defaults to the current system/context locale setting. | - |
+| locations | Comma separated list of aliases of locations to filter the displayed events. | - |
+| locationTpl | Name of a chunk that contains the template for the location of an event. | tplAgendaEventLocation |
+| outputSeparator | An optional string to separate each tpl instance. | - |
+| resourceTpl | Name of a chunk that contains the template for the linked resource of an event. | - |
+| start | The start date to filter the displayed events. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | - |
+| toPlaceholder | If set, the snippet result will be assigned to this placeholder instead of outputting it directly. | - |
+| tpl | Name of a chunk that contains the template for one event. | tplAgendaEventRow |
+| usergroups | Comma separated list of user group names to filter the displayed events. | - |
+| users | Comma separated list of user IDs to filter the displayed events. | - |
+| videoTpl | Name of a chunk that contains the template for one video in the video list of an event. | tplAgendaEventVideo |
+| where | **Since 1.5.0** JSON encoded xPDO where clause to filter the displayed events. | - |
+| wrapperTpl | Name of a chunk that contains the wrapper template for all events. | tplAgendaEventWrapper |
+
+## Placeholders
+
+The following placeholders are available in the different (default) chunks. Each
+snippet property will be set as placeholder in each template chunk, i.e. a
+snippet call ```[[!AgendaDetail? &subtitle=`whatever`]]``` will fill the
+placeholder subtitle in each used chunk with the value `whatever`.
+
+**CAUTION:** The default template chunks for both snippets are overwritten
+during each package update, so please rename the chunks before editing them.
+
+### tplAgendaEventRow
+
+| Placeholder | Description |
+|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| allday | Contains 1 if the event is an all day event (otherwise 0). |
+| calendar_background | The background color of the calendar of the event. |
+| calendar_foreground | The foreground color of the calendar of the event. |
+| calendar_name | The calendar name. |
+| categories | All categories of the event formatted by the chunk set with the categoryTpl property |
+| description | The title of the event. |
+| detail_url | The url that shows the event detail. Will be generated with the system/context setting `agenda.detail_id`. This resource should contain an AgendaDetail snippet call. |
+| duration | The formatted duration of the event. The details of the duration can be set with the `durationParts` snippet property. |
+| enddate | The start date of the event formatted in ISO 8601 (can be formatted i.e. with ```[[+startdate:strtotime:date=`%a. %d.%m.%Y`]]```). |
+| idx | The number of the event starting with 1. |
+| images | All images of the event formatted by the chunk set with the imageTpl property |
+| imageurls | An array of all image urls. The placeholder `[[+imageurls.1]]` contains the url of the first image |
+| location | The location of the event formatted by the chunk set with the locationTpl property |
+| range | The formatted date range of the event. The format is defined with the lexicon entries `agenda.php_format_daterange` and `agenda.php_format_separator` and can be overridden by the `daterangeFormat` snippet property. The [format rules](01_AgendaList#range-placeholder-format) are described on the AgendaList page. |
+| repeating | Contains 1 if the event is an repeating event (otherwise 0). |
+| resource_id | The id of a linked resource of the event. |
+| startdate | The start date of the event formatted in ISO 8601 (can be formatted i.e. with ```[[+startdate:strtotime:date=`%a. %d.%m.%Y`]]```). |
+| title | The title of the event. |
+| videos | All videos of the event formatted by the chunk set with the videosTpl property |
+| videourls | An array of all video urls. The placeholder `[[+videourls.1]]` contains the url of the first video |
+
+[Extended fields](../06_Extended_Fields) are available as placeholder with the prefix `extended` in the
+event row template.
+
+### tplAgendaInterval
+
+| Placeholder | Description |
+|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| count | Count of the events filtered by the snippet properties (without limit/offset) |
+| output | All events in one interval collected by the snippet separated by the string in the outputSeparator property |
+| startdate | The start date of the interval formatted in ISO 8601 (could be formatted i.e. with ```[[+startdate:strtotime:date=`%a. %d.%m.%Y`]]```). |
+| enddate | The end date of the interval formatted in ISO 8601 (could be formatted i.e. with ```[[+startdate:strtotime:date=`%a. %d.%m.%Y`]]```). |
+| range | The formatted date range of the interval. The format is defined with the lexicon entries `agenda.php_format_daterange` and `agenda.php_format_separator` and could be overridden by the `daterangeFormat` snippet property. The [format rules](01_AgendaList#range-placeholder-format) are described below. |
+| idy | The number of the interval starting with 1. |
+
+### tplAgendaEventWrapper
+
+| Placeholder | Description |
+|-------------|------------------------------------------------------------------------------------------------|
+| output | All intervals collected by the snippet separated by the string in the outputSeparator property |
+
+### tplAgendaEventEmpty
+
+Only the current script properties are available as placeholders.
+
+### tplAgendaEventCategory
+
+| Placeholder | Description |
+|-------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| alias | The alias of the category. |
+| background | The background color of the category of the event. |
+| foreground | The foreground color of the category of the event. |
+| name | The name of the category. |
+| resource_id | The id of a linked resource of the category. |
+| selected | Contains `selected="selected"`, when the category request value is equal to the alias of the category. |
+| url | The url that shows the event list filtered by the displayed category. Will be generated with the system/context setting `agenda.list_id`. This resource should contain an AgendaList snippet call. |
+
+### tplAgendaEventImage
+
+| Placeholder | Description |
+|-------------|------------------------------------------|
+| description | The description of the image. |
+| idx | The number of the image starting with 1. |
+| title | The title of the image. |
+| url | The url that shows the event image. |
+
+### tplAgendaEventLocation
+
+| Placeholder | Description |
+|-------------|--------------------------------------------------------------------------------------------------------|
+| address | The address of the location. |
+| alias | The alias of the location. |
+| center_lat | The latitude of the center of a map of the location. |
+| center_lng | The longitude of the center of a map of the location. |
+| description | The description of the location. |
+| lat | The latitude of the location. |
+| lng | The longitude of the location. |
+| name | The name of the location. |
+| resource_id | The id of a linked resource of the location. |
+| selected | Contains `selected="selected"`, when the location request value is equal to the alias of the location. |
+| zoom | The zoom level of a map of the location. |
+
+### tplAgendaEventVideo
+
+| Placeholder | Description |
+|-------------|------------------------------------------|
+| description | The description of the video. |
+| idx | The number of the video starting with 1. |
+| title | The title of the video. |
+| url | The url that shows the event video. |
diff --git a/en/01_Agenda/v1/04_Snippets/03_AgendaDetail.md b/en/01_Agenda/v1/04_Snippets/03_AgendaDetail.md
new file mode 100755
index 00000000..0e37b88d
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/03_AgendaDetail.md
@@ -0,0 +1,129 @@
+This snippet displays one event in a detail view.
+
+## Properties
+
+It uses the following snippet properties:
+
+| Property | Description | Default |
+|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|
+| active | If this option is disabled, the active status of an event is not regarded. | 1 (Yes) |
+| ajax | **Since 1.4.0** If set, the snippet output will be directly returned to the browser as a JSON result when the page is requested with the same value in the ajax request parameter. | 0 (No) |
+| allowedRequestKeys | Comma-separated list of request keys, that can be used to filter the displayed event. Defaults to all allowed. | - |
+| calendars | Comma-separated list of aliases of calendars to filter the displayed event. | - |
+| categories | Comma separated list of aliases of categories to filter the displayed event. | - |
+| categoryTpl | Name of a chunk that contains the template of one category in the category list of an event. | tplAgendaEventCategory |
+| contexts | Comma separated list of context keys to filter the displayed event. | - |
+| daterangeFormat | Format of the daterange displayed in an event. | - |
+| daterangeSeparator | Separator in the daterange displayed in an event. | - |
+| detailId | ID of a resource containing an AgendaDetail snippet call. | - |
+| durationParts | Number of detail parts of the event duration output. | 1 |
+| durationRound | **Since 1.5.0** Rounding type for event duration. | ceil |
+| emptyTpl | Name of a chunk that contains the template for not found event. | tplAgendaEventEmpty |
+| id | ID of one event to retrieve the displayed event. | - |
+| imageTpl | Name of a chunk that contains the template for one image in the image list of an event. | tplAgendaEventImage |
+| listId | ID of a resource containing an AgendaList snippet call. | - |
+| locale | The locale for the displayed formatted date. Defaults to the current system/context locale setting. | - |
+| locations | Comma separated list of aliases of locations to filter the displayed event. | - |
+| locationTpl | Name of a chunk that contains the template for the location of an event. | tplAgendaEventLocation |
+| repeating | ID of one repeating event to retrieve the displayed event. | - |
+| resourceTpl | Name of a chunk that contains the template for the linked resource of an event. | - |
+| toPlaceholder | If set, the snippet result will be assigned to this placeholder instead of outputting it directly. | - |
+| tpl | Name of a chunk that contains the template for one event. | tplAgendaEventDetail |
+| usergroups | Comma separated list of user group names to filter the displayed event. | - |
+| users | Comma separated list of user IDs to filter the displayed event. | - |
+| videoTpl | Name of a chunk that contains the template for one video in the video list of an event. | tplAgendaEventVideo |
+| where | **Since 1.5.0** JSON encoded xPDO where clause to filter the event. | - |
+
+## Placeholders
+
+The following placeholders are available in the different (default) chunks. Each
+snippet property will be set as placeholder in each template chunk, i.e. a
+snippet call ```[[!AgendaDetail? &subtitle=`whatever`]]``` will fill the
+placeholder subtitle in each used chunk with the value `whatever`.
+
+**CAUTION:** The default template chunks for both snippets are overwritten
+during each package update, so please rename the chunks before editing them.
+
+### tplAgendaEventDetail
+
+| Placeholder | Description |
+|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| allday | Contains 1 if the event is an all day event (otherwise 0). |
+| calendar_background | The background color of the calendar of the event. |
+| calendar_foreground | The foreground color of the calendar of the event. |
+| calendar_name | The calendar name. |
+| categories | All categories of the event formatted by the chunk set with the categoryTpl property |
+| description | The title of the event. |
+| detail_url | The url that shows the event detail. Will be generated with the system/context setting `agenda.detail_id`. This resource should contain an AgendaDetail snippet call. |
+| duration | The formatted duration of the event. The details of the duration can be set with the `durationParts` snippet property. |
+| enddate | The start date of the event formatted in ISO 8601 (can be formatted i.e. with ```[[+startdate:strtotime:date=`%a. %d.%m.%Y`]]```). |
+| images | All images of the event formatted by the chunk set with the imageTpl property |
+| imageurls | An array of all image urls. The placeholder `[[+imageurls.1]]` contains the url of the first image |
+| location | The location of the event formatted by the chunk set with the locationTpl property |
+| range | The formatted date range of the event. The format is defined with the lexicon entries `agenda.php_format_daterange` and `agenda.php_format_separator` and can be overridden by the `daterangeFormat` snippet property. The [format rules](01_AgendaList#range-placeholder-format) are described on the AgendaList page. |
+| repeating | Contains 1 if the event is an repeating event (otherwise 0). |
+| resource_id | The id of a linked resource of the event. |
+| startdate | The start date of the event formatted in ISO 8601 (can be formatted i.e. with ```[[+startdate:strtotime:date=`%a. %d.%m.%Y`]]```). |
+| title | The title of the event. |
+| videos | All videos of the event formatted by the chunk set with the videosTpl property |
+| videourls | An array of all video urls. The placeholder `[[+videourls.1]]` contains the url of the first video |
+
+[Extended fields](../06_Extended_Fields) are available as placeholder with the prefix `extended` in the
+event row template.
+
+### tplAgendaEventWrapper
+
+| Placeholder | Description |
+|-------------|---------------------------------------------------------------------------------------------|
+| count | Count of the events filtered by the snippet properties (without limit/offset) |
+| output | All events collected by the snippet separated by the string in the outputSeparator property |
+
+### tplAgendaEventEmpty
+
+Only the current script properties are available as placeholders.
+
+### tplAgendaEventCategory
+
+| Placeholder | Description |
+|-------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| alias | The alias of the category. |
+| background | The background color of the category of the event. |
+| foreground | The foreground color of the category of the event. |
+| name | The name of the category. |
+| resource_id | The id of a linked resource of the category. |
+| selected | Contains `selected="selected"`, when the category request value is equal to the alias of the category. |
+| url | The url that shows the event list filtered by the displayed category. Will be generated with the system/context setting `agenda.list_id`. This resource should contain an AgendaList snippet call. |
+
+### tplAgendaEventImage
+
+| Placeholder | Description |
+|-------------|------------------------------------------|
+| description | The description of the image. |
+| idx | The number of the image starting with 1. |
+| title | The title of the image. |
+| url | The url that shows the event image. |
+
+### tplAgendaEventLocation
+
+| Placeholder | Description |
+|-------------|--------------------------------------------------------------------------------------------------------|
+| address | The address of the location. |
+| alias | The alias of the location. |
+| center_lat | The latitude of the center of a map of the location. |
+| center_lng | The longitude of the center of a map of the location. |
+| description | The description of the location. |
+| lat | The latitude of the location. |
+| lng | The longitude of the location. |
+| name | The name of the location. |
+| resource_id | The id of a linked resource of the location. |
+| selected | Contains `selected="selected"`, when the location request value is equal to the alias of the location. |
+| zoom | The zoom level of a map of the location. |
+
+### tplAgendaEventVideo
+
+| Placeholder | Description |
+|-------------|------------------------------------------|
+| description | The description of the video. |
+| idx | The number of the video starting with 1. |
+| title | The title of the video. |
+| url | The url that shows the event video. |
diff --git a/en/01_Agenda/v1/04_Snippets/04_AgendaDetailIcal.md b/en/01_Agenda/v1/04_Snippets/04_AgendaDetailIcal.md
new file mode 100755
index 00000000..559762ba
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/04_AgendaDetailIcal.md
@@ -0,0 +1,39 @@
+This snippet displays an iCalendar link or download an iCalendar file of an event.
+
+## Properties
+
+It uses the following snippet properties:
+
+| Property | Description | Default |
+|----------------|-----------------------------------------------------------------------------------------------------|------------------------------|
+| active | If this option is disabled, the active status of an event is not regarded. | 1 (Yes) |
+| calendars | Comma-separated list of aliases of calendars to filter the iCal download. | - |
+| categories | Comma separated list of aliases of categories to filter the iCal download. | - |
+| contexts | Comma separated list of context keys to filter the iCal download. | - |
+| descriptionTpl | Name of a chunk that contains the template for the description in the iCal event. | - |
+| id | ID of one event to retrieve the ical event. | - |
+| locale | The locale for the displayed formatted date. Defaults to the current system/context locale setting. | - |
+| locations | Comma separated list of aliases of locations to filter the iCal download. | - |
+| locationTpl | Name of a chunk that contains the template for the location of the ical event. | tplAgendaEventLocationICal |
+| repeating | ID of one repeating event to retrieve the ical event. | - |
+| tpl | Name of a chunk that contains the template for iCal download link. | tplAgendaEventDetailICalLink |
+| usergroups | Comma separated list of user group names to filter the iCal download. | - |
+| users | Comma separated list of user IDs to filter the iCal download. | - |
+| where | **Since 1.5.0** JSON encoded xPDO where clause to filter the ical event. | - |
+
+## Placeholders
+
+The following placeholders are available in the different (default) chunks. Each
+snippet property will be set as placeholder in each template chunk, i.e. a
+snippet call ```[[!AgendaDetail? &subtitle=`whatever`]]``` will fill the
+placeholder subtitle in each used chunk with the value `whatever`.
+
+**CAUTION:** The default template chunks for both snippets are overwritten
+during each package update, so please rename the chunks before editing them.
+
+### tplAgendaEventDetailIcal
+
+| Placeholder | Description |
+|-------------|-----------------------------------------------|
+| key | The request key for the iCal download link. |
+| value | The request value for the iCal download link. |
diff --git a/en/01_Agenda/v1/04_Snippets/05_AgendaCalendars.md b/en/01_Agenda/v1/04_Snippets/05_AgendaCalendars.md
new file mode 100755
index 00000000..994ebd26
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/05_AgendaCalendars.md
@@ -0,0 +1,57 @@
+This snippet displays a list of calendars.
+
+## Properties
+
+It uses the following snippet properties:
+
+| Property | Description | Default |
+|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|
+| ajax | **Since 1.4.0** If set, the snippet output will be directly returned to the browser as a JSON result when the page is requested with the same value in the ajax request parameter. | 0 (No) |
+| allowedRequestKeys | Comma-separated list of request keys, that can be used to filter the displayed calendars. Defaults to all allowed. | - |
+| calendars | Comma-separated list of aliases of calendars to filter the displayed calendars. | - |
+| emptyTpl | Name of a chunk that contains the template for not found calendars. | tplAgendaCalendarsEmpty |
+| filterByEvents | **Since 1.5.0** If set, the calendars with no future events are filtered from the result. | 0 (No) |
+| limit | Limit the number of calendars in the result. Use "0" for unlimited calendars. | 20 |
+| listId | ID of a resource containing an AgendaList snippet call. | - |
+| offset | The offset of calendars to skip. | - |
+| outputSeparator | An optional string to separate each tpl instance. | - |
+| selected | Comma separated list of calendar aliases, that have the placeholder selected filled. | - |
+| sortby | **Since 1.5.0** Sort field for sorting the output. It could also contain a JSON object to sort the ouput by multiple fields like {"AgendaCalendars.name":"ASC","AgendaCalendars.background":"DESC"}. | sortindex |
+| sortdir | **Since 1.5.0** Sort direction for sorting the output. Unused when the sortby property contains a valid JSON object. | ASC |
+| toPlaceholder | If set, the snippet result will be assigned to this placeholder instead of outputting it directly. | - |
+| totalVar | The key of a placeholder that indicates the total number of calendars. | agendacalendars.total |
+| tpl | Name of a chunk that contains the template for one calendar. | tplAgendaCalendar |
+| where | **Since 1.5.0** JSON encoded xPDO where clause to filter the calendars. | - |
+| wrapperTpl | Name of a chunk that contains the wrapper template for all calendars. | tplAgendaCalendarsWrapper |
+
+## Placeholders
+
+The following placeholders are available in the different (default) chunks. Each
+snippet property will be set as placeholder in each template chunk, i.e. a
+snippet call ```[[!AgendaDetail? &subtitle=`whatever`]]``` will fill the
+placeholder subtitle in each used chunk with the value `whatever`.
+
+**CAUTION:** The default template chunks for both snippets are overwritten
+during each package update, so please rename the chunks before editing them.
+
+### tplAgendaCalendar
+
+| Placeholder | Description |
+|-------------|--------------------------------------------------------------------------------------------------------|
+| alias | The alias of the calendar. |
+| background | The background color of the calendar of the event. |
+| foreground | The foreground color of the calendar of the event. |
+| name | The name of the calendar. |
+| resource_id | The id of a linked resource of the calendar. |
+| selected | Contains `selected="selected"`, when the calendar request value is equal to the alias of the calendar. |
+
+### tplAgendaCalendarsEmpty
+
+Only the current script properties are available as placeholders.
+
+### tplAgendaCalendarsWrapper
+
+| Placeholder | Description |
+|-------------|------------------------------------------------------------------------------------------------|
+| count | Count of the calendars filtered by the snippet properties (without limit/offset) |
+| output | All calendars collected by the snippet separated by the string in the outputSeparator property |
diff --git a/en/01_Agenda/v1/04_Snippets/06_AgendaCategories.md b/en/01_Agenda/v1/04_Snippets/06_AgendaCategories.md
new file mode 100755
index 00000000..3fd35af8
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/06_AgendaCategories.md
@@ -0,0 +1,58 @@
+This snippet displays a list of categories.
+
+## Properties
+
+It uses the following snippet properties:
+
+| Property | Description | Default |
+|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|
+| ajax | **Since 1.4.0** If set, the snippet output will be directly returned to the browser as a JSON result when the page is requested with the same value in the ajax request parameter. | 0 (No) |
+| allowedRequestKeys | Comma-separated list of request keys, that can be used to filter the displayed categories. Defaults to all allowed. | - |
+| categories | Comma-separated list of aliases of categories to filter the displayed categories. | - |
+| emptyTpl | Name of a chunk that contains the template for not found categories. | tplAgendaCategoriesEmpty |
+| filterByEvents | **Since 1.5.0** If set, the categories with no future events are filtered from the result. | 0 (No) |
+| limit | Limit the number of categories in the result. Use "0" for unlimited categories. | 20 |
+| listId | ID of a resource containing an AgendaList snippet call. | - |
+| offset | The offset of categories to skip. | - |
+| outputSeparator | An optional string to separate each tpl instance. | - |
+| selected | Comma separated list of category aliases, that have the placeholder selected filled. | - |
+| sortby | **Since 1.5.0** Sort field for sorting the output. It could also contain a JSON object to sort the ouput by multiple fields like {"AgendaCategories.name":"ASC","AgendaCategories.background":"DESC"}. | sortindex |
+| sortdir | **Since 1.5.0** Sort direction for sorting the output. Unused when the sortby property contains a valid JSON object. | ASC |
+| toPlaceholder | If set, the snippet result will be assigned to this placeholder instead of outputting it directly. | - |
+| totalVar | The key of a placeholder that indicates the total number of categories. | agendacategories.total |
+| tpl | Name of a chunk that contains the template for one category. | tplAgendaCategory |
+| where | **Since 1.5.0** **Since 1.5.0** JSON encoded xPDO where clause to filter the categories. | - |
+| wrapperTpl | Name of a chunk that contains the wrapper template for all categories. | tplAgendaCategoriesWrapper |
+
+## Placeholders
+
+The following placeholders are available in the different (default) chunks. Each
+snippet property will be set as placeholder in each template chunk, i.e. a
+snippet call ```[[!AgendaDetail? &subtitle=`whatever`]]``` will fill the
+placeholder subtitle in each used chunk with the value `whatever`.
+
+**CAUTION:** The default template chunks for both snippets are overwritten
+during each package update, so please rename the chunks before editing them.
+
+### tplAgendaCategory
+
+| Placeholder | Description |
+|-------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| alias | The alias of the category. |
+| background | The background color of the category of the event. |
+| foreground | The foreground color of the category of the event. |
+| name | The name of the category. |
+| resource_id | The id of a linked resource of the category. |
+| selected | Contains `selected="selected"`, when the category request value is equal to the alias of the category. |
+| url | The url that shows the event list filtered by the displayed category. Will be generated with the system/context setting `agenda.list_id`. This resource should contain an AgendaList snippet call. |
+
+### tplAgendaCategoriesEmpty
+
+Only the current script properties are available as placeholders.
+
+### tplAgendaCategoriesWrapper
+
+| Placeholder | Description |
+|-------------|-------------------------------------------------------------------------------------------------|
+| count | Count of the categories filtered by the snippet properties (without limit/offset) |
+| output | All categories collected by the snippet separated by the string in the outputSeparator property |
diff --git a/en/01_Agenda/v1/04_Snippets/07_AgendaLocations.md b/en/01_Agenda/v1/04_Snippets/07_AgendaLocations.md
new file mode 100755
index 00000000..7fe0cf60
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/07_AgendaLocations.md
@@ -0,0 +1,62 @@
+This snippet displays a list of locations.
+
+## Properties
+
+It uses the following snippet properties:
+
+| Property | Description | Default |
+|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|
+| ajax | **Since 1.4.0** If set, the snippet output will be directly returned to the browser as a JSON result when the page is requested with the same value in the ajax request parameter. | 0 (No) |
+| allowedRequestKeys | Comma-separated list of request keys, that can be used to filter the displayed locations. Defaults to all allowed. | - |
+| emptyTpl | Name of a chunk that contains the template for not found locations. | tplAgendaLocationsEmpty |
+| filterByEvents | **Since 1.5.0** If set, the locations with no future events are filtered from the result. | 0 (No) |
+| limit | Limit the number of locations in the result. Use "0" for unlimited locations. | 20 |
+| listId | ID of a resource containing an AgendaList snippet call. | - |
+| locations | Comma-separated list of aliases of locations to filter the displayed locations. | - |
+| offset | The offset of locations to skip. | - |
+| outputSeparator | An optional string to separate each tpl instance. | - |
+| selected | Comma separated list of calendar aliases, that have the placeholder selected filled. | - |
+| sortby | **Since 1.5.0** Sort field for sorting the output. It could also contain a JSON object to sort the ouput by multiple fields like {"AgendaLocations.name":"ASC","AgendaLocations.address":"DESC"}. | sortindex |
+| sortdir | **Since 1.5.0** Sort direction for sorting the output. Unused when the sortby property contains a valid JSON object. | ASC |
+| toPlaceholder | If set, the snippet result will be assigned to this placeholder instead of outputting it directly. | - |
+| totalVar | The key of a placeholder that indicates the total number of locations. | agendalocations.total |
+| tpl | Name of a chunk that contains the template for one location. | tplAgendaLocation |
+| where | **Since 1.5.0** JSON encoded xPDO where clause to filter the locations. | - |
+| wrapperTpl | Name of a chunk that contains the wrapper template for all locations. | tplAgendaLocationsWrapper |
+
+## Placeholders
+
+The following placeholders are available in the different (default) chunks. Each
+snippet property will be set as placeholder in each template chunk, i.e. a
+snippet call ```[[!AgendaDetail? &subtitle=`whatever`]]``` will fill the
+placeholder subtitle in each used chunk with the value `whatever`.
+
+**CAUTION:** The default template chunks for both snippets are overwritten
+during each package update, so please rename the chunks before editing them.
+
+### tplAgendaLocation
+
+| Placeholder | Description |
+|-------------|--------------------------------------------------------------------------------------------------------|
+| address | The address of the location. |
+| alias | The alias of the location. |
+| center_lat | The latitude of the center of a map of the location. |
+| center_lng | The longitude of the center of a map of the location. |
+| description | The description of the location. |
+| lat | The latitude of the location. |
+| lng | The longitude of the location. |
+| name | The name of the location. |
+| resource_id | The id of a linked resource of the location. |
+| selected | Contains `selected="selected"`, when the location request value is equal to the alias of the location. |
+| zoom | The zoom level of a map of the location. |
+
+### tplAgendaLocationsEmpty
+
+Only the current script properties are available as placeholders.
+
+### tplAgendaLocationsWrapper
+
+| Placeholder | Description |
+|-------------|------------------------------------------------------------------------------------------------|
+| count | Count of the locations filtered by the snippet properties (without limit/offset) |
+| output | All locations collected by the snippet separated by the string in the outputSeparator property |
diff --git a/en/01_Agenda/v1/04_Snippets/08_AgendaGetDate.md b/en/01_Agenda/v1/04_Snippets/08_AgendaGetDate.md
new file mode 100755
index 00000000..046c6652
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/08_AgendaGetDate.md
@@ -0,0 +1,11 @@
+This retrieves and format a date from a GET parameter. The snippet was
+introduced with Agenda 1.4.0.
+
+## Properties
+
+It uses the following snippet properties:
+
+| Property | Description | Default |
+|------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|
+| format | The output format for the date that is retrieved with a GET parameter. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | Y-m-d H:i:s |
+| requestKey | The GET parameter key that is used to retrieve a date. | date |
diff --git a/en/01_Agenda/v1/04_Snippets/09_AgendaEventGet.md b/en/01_Agenda/v1/04_Snippets/09_AgendaEventGet.md
new file mode 100755
index 00000000..31c44369
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/09_AgendaEventGet.md
@@ -0,0 +1,53 @@
+This hook loads the data of an Agenda event into FormIt fields. The hook was introduced with Agenda 1.1.0.
+
+The event is retrieved with the event ID or the repeat ID, if the event ID is
+not set. If no event can be retrieved, the hook returns false
+
+## FormIt Hook Properties
+
+The hook uses the following hook properties:
+
+| Property | Description | Default |
+|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|
+| agendaActiveOnly | Load only active events into FormIt. | true |
+| agendaCalendars | Comma-separated list of aliases of calendars to filter the loaded event. | - |
+| agendaCategories | Comma separated list of aliases of categories to filter the loaded event. | - |
+| agendaContexts | Comma separated list of context keys to filter the loaded event. | - |
+| agendaDateformat | Format of the startdate and enddate field, set by the hook. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | Y-m-d H:i:s |
+| agendaDateformatAllday | Format of the startdate and enddate field, set by the hook, when the event is an all day event. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | Y-m-d |
+| agendaId | ID of one event to load into FormIt. | 0 |
+| agendaLocations | Comma separated list of aliases of locations to filter the loaded event. | - |
+| agendaOwnEvent | Load only own events (created by the current user) into FormIt. | false |
+| agendaRepeating | ID of one repeating event to load into FormIt. | 0 |
+| agendaUsergroups | Comma separated list of user group names to filter the loaded event. | - |
+| agendaUsers | Comma separated list of user IDs to filter the loaded event. | - |
+
+## Hook fields
+
+The following FormIt fields are set by the loaded Agenda event in the hook.
+
+| Field | Description |
+|-----------------|----------------------------------------------------------------------------------------------------------------|
+| active | The active status of the loaded event. |
+| allday | The all day status of the loaded event. |
+| calendar | The alias of the calendar of the loaded event. |
+| calendar_id | The id of the calendar of the loaded event. |
+| category | The aliases of the categories of the loaded event. |
+| content | The content of the loaded event. |
+| context_key | The context key of the loaded event. |
+| description | The description of the loaded event. |
+| enddate | The enddate of the loaded event (or the loaded repeating event). |
+| id | The id of the loaded event. |
+| location | The alias of the location of the loaded event. |
+| location_id | The id of the location of the loaded event. |
+| repeat_enddate | The enddate of the repeats of the loaded event. |
+| repeat_interval | The repeat interval of the loaded event. |
+| repeat_on | The repeat weekdays of the loaded event, when the repeat type is weekly |
+| repeat_ordinal | The repeat ordinal of the loaded event, when the repeat type is monthly by weekday |
+| repeat_type | The repeat type of the loaded event. (1 = daily , 2 = weekly, 3 = monthly, 4 = yearly, 5 = montly by weekday ) |
+| repeat_weekday | The repeat weekday of the loaded event, when the repeat type is weekly |
+| repeating | The repeating status of the loaded event. |
+| repeating_id | The id of the loaded repeating event. |
+| resource_id | The id of the linked resource of the loaded event. |
+| startdate | The startdate of the loaded event (or the loaded repeating event). |
+| title | The title of the loaded event. |
diff --git a/en/01_Agenda/v1/04_Snippets/10_AgendaEventSet.md b/en/01_Agenda/v1/04_Snippets/10_AgendaEventSet.md
new file mode 100755
index 00000000..e122d460
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/10_AgendaEventSet.md
@@ -0,0 +1,56 @@
+This hook saves FormIt fields as an Agenda event. The hook was introduced with Agenda 1.1.0.
+
+It can update an existing event, if an event ID or a repeating ID is set. This
+can be done by FormIt hook properties or by request parameters. The FormIt
+hook properties supercede the request parameters.
+
+If no event_id or repeating_id is set, a new event is created.
+
+## FormIt Hook Properties
+
+The hook uses the following hook properties:
+
+| Property | Description | Default |
+|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|
+| agendaAllowedFields | Comma separated list of fields, that are set by the hook. Per default all fields are allowed. | - |
+| agendaCalendars | Comma-separated list of aliases of calendars to filter the loaded event. | - |
+| agendaCategories | Comma separated list of aliases of categories to filter the loaded event. | - |
+| agendaContexts | Comma separated list of context keys to filter the loaded event. | - |
+| agendaDateformat | Format of the startdate and enddate field, set by the hook. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | Y-m-d H:i:s |
+| agendaDateformatAllday | Format of the startdate and enddate field, set by the hook, when the event is an all day event. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | Y-m-d |
+| agendaId | ID of one event to load into FormIt. | 0 |
+| agendaLocations | Comma separated list of aliases of locations to filter the loaded event. | - |
+| agendaOwnEvent | Load only own events (created by the current user) into FormIt. | false |
+| agendaRepeating | ID of one repeating event to load into FormIt. | 0 |
+| agendaUsergroups | Comma separated list of user group names to filter the loaded event. | - |
+| agendaUsers | Comma separated list of user IDs to filter the loaded event. | - |
+
+## Hook fields
+
+The following FormIt fields are used in the hook and saved in the Agenda event, when they are allowed.
+
+| Field | Description |
+|-----------------|---------------------------------------------------------------------------------------------------------------|
+| active | The active status of the saved event. |
+| allday | The all day status of the saved event. |
+| calendar | The alias of the calendar of the saved event. |
+| calendar_id | The id of the calendar of the saved event. |
+| category | The aliases of the categories of the saved event. |
+| content | The content of the saved event. |
+| context_key | The context key of the saved event. |
+| description | The description of the saved event. |
+| enddate | The enddate of the saved event (or the saved repeating event). |
+| event_id | The id of the saved event. |
+| location | The alias of the location of the saved event. |
+| location_id | The id of the location of the saved event. |
+| repeat_enddate | The enddate of the repeats of the saved event. |
+| repeat_interval | The repeat interval of the saved event. |
+| repeat_on | The repeat weekdays of the saved event, when the repeat type is weekly |
+| repeat_ordinal | The repeat ordinal of the saved event, when the repeat type is monthly by weekday |
+| repeat_type | The repeat type of the saved event. (1 = daily , 2 = weekly, 3 = monthly, 4 = yearly, 5 = montly by weekday ) |
+| repeat_weekday | The repeat weekday of the saved event, when the repeat type is weekly |
+| repeating | The repeating status of the saved event. |
+| repeating_id | The id of the saved repeating event. |
+| resource_id | The id of the linked resource of the saved event. |
+| startdate | The startdate of the saved event (or the saved repeating event). |
+| title | The title of the saved event. |
diff --git a/en/01_Agenda/v1/04_Snippets/11_AgendaSearch.md b/en/01_Agenda/v1/04_Snippets/11_AgendaSearch.md
new file mode 100755
index 00000000..3b1e0007
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/11_AgendaSearch.md
@@ -0,0 +1,20 @@
+This hook retrieves Agenda events with as faceted search in SimpleSearch. The
+hook was introduced with Agenda 1.2.1.
+
+It fills the facet `events` in SimpleSearch.
+
+## SimpleSearch Hook Properties
+
+The hook uses the following hook properties:
+
+| Property | Description | Default |
+|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
+| agendaStartdate | The start date to filter the searched events. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | today 0:00 |
+| agendaEnddate | The end date to filter the displayed events. Must contain a [supported date and time format](https://www.php.net/manual/de/datetime.formats.php). | +99 year 0:00 |
+| agendaSearchLocation | Search the location address. When disabled, only the location title is searched. | true |
+| agendaCategoryTpl | Name of a chunk that contains the template of one category in the category list of an event. | tplAgendaEventCategory |
+| agendaImageTpl | Name of a chunk that contains the template of one image in the image list of an event. | tplAgendaEventImage |
+| agendaVideoTpl | Name of a chunk that contains the template of one video in the video list of an event. | tplAgendaEventVideo |
+| agendaLocationTpl | Name of a chunk that contains the template for the location of an event. | tplAgendaEventLocation |
+| agendaResourceTpl | Name of a chunk that contains the template for the linked resource of an event. | tplAgendaEventResource |
+| agendaEventExtractTpl | Name of a chunk that contains the template for the search extract of an event. | tplAgendaEventSearchExtract |
diff --git a/en/01_Agenda/v1/04_Snippets/12_AgendaCalcDate.md b/en/01_Agenda/v1/04_Snippets/12_AgendaCalcDate.md
new file mode 100755
index 00000000..e99b8209
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/12_AgendaCalcDate.md
@@ -0,0 +1,11 @@
+This output filter calculates a date with the given input and the options. The
+output filter was introduced with Agenda 1.4.0.
+
+## Output Filter Properties
+
+The output filter uses the following properties:
+
+| Property | Description | Default |
+|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
+| input | A date that can be [parsed](https://www.php.net/manual/en/datetime.formats.php) by php DateTime. | - |
+| options | The modifier string that alters the DateTime object. If the option is invalid, the result is empty and the modified placeholder is reset to the original value. | - |
diff --git a/en/01_Agenda/v1/04_Snippets/13_AgendaCalcFirstFullWeek.md b/en/01_Agenda/v1/04_Snippets/13_AgendaCalcFirstFullWeek.md
new file mode 100755
index 00000000..a2d0a70b
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/13_AgendaCalcFirstFullWeek.md
@@ -0,0 +1,12 @@
+This output filter calculates the startdate of the first full week with the
+given input. This snippet can be used to set the start date of the
+[AgendaCalender](02_AgendaCalendar.md) snippet. The output filter was introduced
+with Agenda 1.4.0.
+
+## Output Filter Properties
+
+The output filter uses the following properties:
+
+| Property | Description | Default |
+|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
+| input | A date that can be [parsed](https://www.php.net/manual/en/datetime.formats.php) by php DateTime. | - |
diff --git a/en/01_Agenda/v1/04_Snippets/14_AgendaCalcLastFullWeek.md b/en/01_Agenda/v1/04_Snippets/14_AgendaCalcLastFullWeek.md
new file mode 100755
index 00000000..21513484
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/14_AgendaCalcLastFullWeek.md
@@ -0,0 +1,12 @@
+This output filter calculates the enddate of the last full week with the given
+input. This snippet can be used to set the end date of the
+[AgendaCalender](02_AgendaCalendar.md) snippet. The output filter was introduced
+with Agenda 1.4.0.
+
+## Output Filter Properties
+
+The output filter uses the following properties:
+
+| Property | Description | Default |
+|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
+| input | A date that can be [parsed](https://www.php.net/manual/en/datetime.formats.php) by php DateTime. | - |
diff --git a/en/01_Agenda/v1/04_Snippets/index.md b/en/01_Agenda/v1/04_Snippets/index.md
new file mode 100755
index 00000000..11331c74
--- /dev/null
+++ b/en/01_Agenda/v1/04_Snippets/index.md
@@ -0,0 +1,64 @@
+_Agenda_ contains some _snippets_ in the `Agenda` category.
+
+#### AgendaList
+
+The [AgendaList](01_AgendaList.md) snippet displays Agenda events in a view.
+
+#### AgendaCalendar
+
+The [AgendaCalendar](02_AgendaCalendar.md) snippet displays Agenda events in a list divided into.
+
+#### AgendaDetail
+
+The [AgendaDetail](03_AgendaDetail.md) snippet displays one Agenda event in a view.
+
+#### AgendaDetailIcal
+
+The [AgendaDetailIcal](04_AgendaDetailIcal.md) snippet displays the iCal Download link of one event and downloads the iCal file.
+
+#### AgendaCalendars
+
+The [AgendaCalendars](05_AgendaCalendars.md) snippet displays a list of Agenda calendars.
+
+#### AgendaCategories
+
+The [AgendaCategories](06_AgendaCategories.md) snippet displays a list of Agenda categories.
+
+#### AgendaLocations
+
+The [AgendaLocations](07_AgendaLocations.md) snippet displays a list of Agenda locations.
+
+#### AgendaGetDate
+
+The [AgendaGetDate](08_AgendaGetDate.md) snippet retrieves and formats a date from an GET parameter.
+
+## FormIt Hooks
+
+_Agenda_ contains FormIt/SimpleSearch _hooks_ in the `Agenda` category.
+
+#### AgendaEventGet
+
+The [AgendaEventGet](09_AgendaEventGet.md) hook allows to fill FormIt values by Agenda events.
+
+#### AgendaEventSet
+
+The [AgendaEventSet](10_AgendaEventSet.md) hook allows to set Agenda events values by FormIt.
+
+#### AgendaSearch
+
+The [AgendaSearch](11_AgendaSearch.md) hook allows to search for Agenda events in SimpleSearch faceted search.
+
+## Output Filter
+
+#### AgendaCalcDate
+
+The [AgendaCalcDate](12_AgendaCalcDate.md) output filter calculates a date with the given input and the options.
+
+#### AgendaCalcFirstFullWeek
+
+The [AgendaCalcFirstFullWeek](13_AgendaCalcFirstFullWeek.md) output filter calculates the startdate of the first full week with the given input.
+
+#### AgendaCalcLastFullWeek
+
+The [AgendaCalcLastFullWeek](14_AgendaCalcLastFullWeek.md) output filter calculates the enddate of the last full week with the given input.
+
diff --git a/en/01_Agenda/v1/05_Cronjob.md b/en/01_Agenda/v1/05_Cronjob.md
new file mode 100755
index 00000000..cff897cc
--- /dev/null
+++ b/en/01_Agenda/v1/05_Cronjob.md
@@ -0,0 +1,73 @@
+_Agenda_ can be controlled by a _cronjob command_.
+
+## Executing the cronjob command
+
+The cronjob command can be executed from the command line with
+
+`php /path/to/your/modx/installation/assets/components/agenda/cron.php`
+
+or with an external webcronjob using the following url:
+
+`https://your.domain/assets/components/agenda/cron.php?cronjob_id=xxx`
+
+The value xxx has to be filled with the random string in the MODX system setting
+`agenda.cronjob_id`
+
+## The cronjob command tasks
+
+The cronjob command will run three different tasks:
+
+- [refresh the feeds](#refresh-the-feeds-task)
+- [refresh the repeating events](#refresh-the-repeating-events-task)
+- [import events](#import-events-task)
+
+Normally the feeds and the repeating events are refreshed together when no
+property is set for the cronjob command. To run a single task you can use the
+property `mode=feed` or `mode=repeating` for the cronjob:
+
+`php /path/to/your/modx/installation/assets/components/agenda/cron.php mode=feed`
+
+or
+
+`https://your.domain/assets/components/agenda/cron.php?cronjob_id=xxx&mode=feed`
+
+### Refresh the feeds task
+
+All active feeds are refreshed. New events of a feed are created, existing
+events of a feed are changed and no longer existing events of a feed are
+removed.
+
+### Refresh the repeating events task
+
+Per default each repeating event is only repeated to the maximum count of the
+`agenda.repeating_max_occurance` system setting. The refresh of the repeating
+events creates new repeats from the **current date** until the maximum count of
+the `agenda.repeating_max_occurance` system setting. So there will be no
+inifinite creation of repeats but the repeats will not stay at the limit, when
+the repeating event was created. Only events after the last existing repeating
+event are created and old (maybe edited) repeats are not changed.
+
+### Import events task
+
+With the property `mode=import` new events can be imported into Agenda with a
+cronjob. The cronjob call has to use the full filepath in the file property.
+
+`php /path/to/your/modx/installation/assets/components/agenda/cron.php mode=import file=/path/to/the/file`
+
+or
+
+`https://your.domain/assets/components/agenda/cron.php?cronjob_id=xxx&mode=import&file=/path/to/the/file`
+
+The import uses the same code as the import events button in the [events
+tab](02_Custom_Manager_Page/02_Events.md) of the custom manager page. The import
+mode is append. The import can be overridden in an [Agenda
+module](02_Custom_Manager_Page/07_Modules.md).
+
+## Debug the cronjob
+
+To detect cronjob issues, you can enable the Agenda [system
+setting](02_Custom_Manager_Page/08_Settings) `agenda.debug`. The file
+`{core_path}/cache/logs/agenda.log` will then contain a lot of debug
+information. Per default cronjob errors are logged in the standard MODX error
+log.
+
diff --git a/en/01_Agenda/v1/06_Extended_Fields.md b/en/01_Agenda/v1/06_Extended_Fields.md
new file mode 100755
index 00000000..b1d2cbb5
--- /dev/null
+++ b/en/01_Agenda/v1/06_Extended_Fields.md
@@ -0,0 +1,85 @@
+## Extended Event Fields
+
+The extended event fields were introduced with Agenda 1.1.0.
+
+Each event in Agenda can use predefined extended fields. The field values are
+stored as JSON encoded array in a text field. So sorting and filtering by
+extended fields is not possible.
+
+To define the extended fields the system setting `agenda.extended_event_fields`
+has to be filled with a nested JSON encoded array. The following value gives an
+example:
+
+```
+[
+ {
+ "name": "price",
+ "label": "Price"
+ },
+ {
+ "fields": [
+ {
+ "xtype": "numberfield",
+ "name": "minimum",
+ "renderer": "agenda-combo-example-resource",
+ "label": "Minimum number of participants",
+ "width": 0.5,
+ "column_label": "min.",
+ "column_width": 50
+ "hidden": false
+ },
+ {
+ "xtype": "numberfield",
+ "name": "maximum",
+ "renderer": "agenda-combo-example-resource",
+ "label": "Maximum number of participants",
+ "width": 0.5,
+ "column_label": "max.",
+ "column_width": 50,
+ "hidden": false
+ }
+ ]
+ }
+]
+```
+
+It will add the fields price, and the fields minimum and maximum in two columns
+to the event create/update window.
+
+Each array will create one extended field. The `name` key is required. The
+`label` key will be used, when it exists. Otherwise, a lexicon entry with the
+field name prefixed by `agenda.extended.` is searched in the lexicon. An `xtype`
+key will be used, when it exists. Otherwise, the xtype defaults to `textfield`.
+A `renderer` key will be used, when it exists. The renderer has to be defined in
+the file referenced in the `agenda.extended_xtypes_script` system setting.
+
+If a nested `fields` key contains an array value, this value will be used for
+subfields in columns. The `width` key inside is then used for the subfield
+column width.
+
+The extended fields can also generate columns in the events grid. The
+`column_label` key is required to add a column in the grid. The `column_width`
+key will define the width of the grid column. The column_width defaults to 100.
+The column can be hidden in the grid with the `hidden` key.
+
+Extended fields are available as placeholder with the prefix `extended` in the
+event row template. The `price` field from the example will be available with
+the `[[+extended.price]]` placeholder.
+
+The setting can use `@FILE` or `@CHUNK` bindings. Path
+placeholders like `{core_path}`, `{base_path}` and `{assets_path}` can be used.
+All paths have to stay inside the MODX base path because of security reasons.
+
+## Extended Repeat Fields
+
+The extended repeat fields were introduced with Agenda 1.4.0.
+
+They work the same as the extended event fields, can use `@FILE` or `@CHUNK`
+bindings and are shown in the edit repeat window and the repeats grid.
+
+## Extended Location Fields
+
+The extended location fields were introduced with Agenda 1.4.0.
+
+They work the same as the extended event fields, can use `@FILE` or `@CHUNK`
+bindings and are shown in the edit location window and the locations grid.
diff --git a/en/01_Agenda/v1/07_Export_Import_Events.md b/en/01_Agenda/v1/07_Export_Import_Events.md
new file mode 100755
index 00000000..23f69c2e
--- /dev/null
+++ b/en/01_Agenda/v1/07_Export_Import_Events.md
@@ -0,0 +1,21 @@
+## Export and Import Events
+
+The export and import of events were introduced with Agenda 1.5.0.
+
+To export or import the events the user has to get the `agenda_export` or
+`agend_import` permissions. After that an export and import button is displayed
+right of the create event button in the events tab of the custom manager page.
+
+The export and import format can be set with the `agenda.import_export_type`
+system setting. The supported formats are `csv`, `excel` and `yaml`. The default
+format is `csv`.
+
+The default export method will create a list of events for repeating events. If
+the repeating event does not have an identifier for the main event (i.e. by a
+field in agenda.extended_event_fields), it is difficult to reimport those
+events. During an import, events with the same event data (except start and end
+dates) are treated as a repeating event. The repeat is set to user defined and
+the repeat data is set for each recurrence.
+
+The import/export methods can be overridden in a [Agenda
+module](02_Custom_Manager_Page/07_Modules.md) with extended methods.
diff --git a/en/01_Agenda/v1/08_System_Events.md b/en/01_Agenda/v1/08_System_Events.md
new file mode 100755
index 00000000..ae8c2a10
--- /dev/null
+++ b/en/01_Agenda/v1/08_System_Events.md
@@ -0,0 +1,27 @@
+## System Events
+
+The OnAgendaBeforeSave, OnAgendaSave and OnAgendaBeforeRemove system events were
+introduced in Agenda 1.5.0.
+
+The OnAgendaValidate system event was introduced in Agenda 1.6.3.
+
+The use of these events allows additional code to be executed before and after
+saving and before deleting Agenda database entries.
+
+The following Agenda database objects invoke the system events: AgendaCalendars,
+AgendaCategories, AgendaEventCursus, AgendaEventDates, AgendaEventImages,
+AgendaEvents, AgendaEventVideos and AgendaLocations.
+
+The following properties can be used in the plugin events:
+
+| Property | Content |
+|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| mode | The state of the Agenda object. It can contain the following states: `modSystemEvent::MODE_NEW` or `modSystemEvent::MODE_UPD`. Not available in OnAgendaBeforeRemove |
+| className | The class name of the saved object. |
+| id | The identifier of the saved object. |
+| object | The Agenda object. |
+
+Skeleton classes for the events can be found in
+`core/components/agenda/src/Plugins/Events`. To use them, you have to remove the
+underscore prefix from the filename and activate the according event in the
+Agenda plugin.
diff --git a/en/01_Agenda/v1/09_Tutorials/Dynamic_Opening_Hours.md b/en/01_Agenda/v1/09_Tutorials/Dynamic_Opening_Hours.md
new file mode 100644
index 00000000..4f83c692
--- /dev/null
+++ b/en/01_Agenda/v1/09_Tutorials/Dynamic_Opening_Hours.md
@@ -0,0 +1,90 @@
+Using Agenda, you can manage and display dynamic opening hours on your site.
+When you've completed this tutorial, you'll have a simple list showing the
+opening hours in the next week.
+
+
+
+[TOC]
+
+## Basic Setup
+
+First create a new Calendar under Extras > Agenda > Calendars tab. Name it
+"Opening Hours" with an alias of "openinghours", or something similar. Make sure
+it's active, and give it a recognisable color.
+
+In your events overview, start adding (repeating) events to your new calendar.
+
+If you're **closed** on a certain day, add an **all day event** with what you
+want to show as the event title (e.g. "Closed", or "Closed for private party").
+
+If you're **open** on a certain day, add an event with a start and end date,
+which corresponds with your opening hours.
+
+Use the repeating events' functionality to automatically repeat the opening hours
+weekly. Once created, you can edit the start and end date/time of an event from
+the Repeats tab, for when the opening hours are different.
+
+**It's important to have an event for each day of the week**. If you're missing
+*a day, it won't show up in our list of opening hours at all.
+
+If you add multiple events for a single day (e.g. if the store is open in the
+morning and afternoon, but closed during lunch), each one will show separately
+in the list.
+
+## Snippets & Chunks
+
+To render the opening hours, we'll use the
+[AgendaList](../04_Snippets/01_AgendaList.md) snippet with some custom chunks and
+logic.
+
+Here's our `AgendaList` call; make sure to adjust the `&calendars` filter to
+match the alias of your opening hours calendar.
+
+```html
+[[!+product_info.sku]] | Price: [[!+product_info.price_formatted]]