diff --git a/.craftplugin b/.craftplugin index cc9c842d..22fdb5fa 100644 --- a/.craftplugin +++ b/.craftplugin @@ -1,7 +1,7 @@ { "pluginName": "Translations for Craft", "pluginDescription": "Drive global growth with simplified translation workflows.", - "pluginVersion": "v4.0.0-beta.2", + "pluginVersion": "v4.0.0", "pluginAuthorName": "Acclaro", "pluginVendorName": "Acclaro", "pluginAuthorUrl": "http://www.acclaro.com/", diff --git a/CHANGELOG.md b/CHANGELOG.md index a227b3cc..8a789db1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## 4.0.0 - 2024-10-25 + +### Added +- New Ads system. ([AcclaroInc#551](https://github.com/AcclaroInc/pm-craft-translations/issues/551)) +- Dedicated services page. ([AcclaroInc#552](https://github.com/AcclaroInc/pm-craft-translations/issues/552)) +- New user registration system. ([AcclaroInc#550](https://github.com/AcclaroInc/pm-craft-translations/issues/550)) + +### Updated +- New pricing policy for paid version of plugin. + +### Chore +- Code refactoring and cleanup. + ## 4.0.0-beta.2 - 2024-09-11 ### Fixed diff --git a/README.md b/README.md index a31e3d07..9fe7422b 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,110 @@ # Translations for Craft CMS -![repo-img](./resources/img/image.jpg) +The Translations plugin facilitates seamless content translation workflows within Craft CMS. It is a comprehensive, powerful, and flexible system that supports Export/Import and professional translation services, enabling you to submit, track, review, and publish content using your preferred translation service provider. -The Translations plugin provides a simple way to translate your content from start to finish without leaving Craft CMS. With support for Export/Import and and professional Acclaro translation services, the plugin makes it easy to submit, track, review, and publish content using your own translators or Acclaro’s. +https://github.com/user-attachments/assets/74a299f3-6dc1-4c1f-9d88-8f0894b97dd0 -## ✨ Features -- Eliminate error-prone and time-consuming copy/paste workflows. -- Work with [Acclaro’s professional linguists](https://www.acclaro.com/services/?utm_campaign=Craft%20Plugin%20Store&utm_source=Craft%20Plugin%20Store%20Listing%20-%20Human%20Translation%20Services&utm_medium=Listing) or use your own translation provider. -- Intuitive review, approval, and publishing workflows. -- Easily submit source content from your Entries, Categories, Globals, and Assets. -- Manage your [Static Message Translations](https://craftcms.com/docs/3.x/sites.html#static-message-translations) with ease. -- Supports many 3rd party plugins including SEOmatic, Neo, Super Table, and more! +> [!NOTE] +> The license fee for this plugin is $99.00 via the [Craft Plugin Store](https://plugins.craftcms.com/translations?craft5). - *Need support for a specific plugin? [Contact us](http://www.acclaro.com/translation-services-cost/?utm_campaign=Craft%20Plugin%20Store&utm_source=Craft%20Plugin%20Store%20Listing%20-%20Third%20Party%20Plugins%20Quote&utm_medium=Listing) for a quote.* +## ✨ Features +- **Streamline Your Workflow:** Automate translation processes to eliminate error-prone and time-consuming copy/paste tasks. +- **Choose Your Translation Partner:** Collaborate seamlessly with [Acclaro’s professional linguists](https://www.acclaro.com/services/?utm_campaign=Craft%20Plugin%20Store&utm_source=Craft%20Plugin%20Store%20Listing%20-%20Human%20Translation%20Services&utm_medium=Listing) or integrate your preferred translation provider. +- **Effortless Content Management:** Enjoy intuitive workflows for reviewing, approving, and publishing translations, ensuring quality and consistency. +- **Comprehensive Content Submission:** Easily submit and manage translations for all your content types, including Entries, Categories, Globals, and Assets. ## ⚠️ System Requirements -- Craft CMS 5.0.0 or later. -- PHP 8.2 or higher. -- PHP [DOM](https://docs.craftcms.com/v3/requirements.html#optional-php-extensions) Extension -- Craft [Multi-site](https://craftcms.com/docs/3.x/sites.html) configuration +- **Craft CMS:** Version 5.0.0 or later +- **PHP:** Version 8.2 or higher +- **PHP DOM Extension:** Required +- **Craft Multi-site Configuration:** Required ## 🔌 Installation -> **🔔 Reminder:** Before installing the plugin, it’s recommended you back up your site. We also recommend testing multisite settings and configuration changes on a staging site prior to implementing in a production environment. +> **Reminder:** Before installing the plugin, back up your site. We recommend testing multisite settings and configuration changes on a staging site before implementing them in a production environment. -To install the plugin, follow these instructions. +To install the plugin, follow these instructions: -1. Open your terminal and go to your Craft project: +1. Open your terminal and navigate to your Craft project: - cd /path/to/project + ```bash + cd /path/to/project + ``` -2. Then tell Composer to load the plugin: +2. Tell Composer to load the plugin: - composer require acclaro/translations + ```bash + composer require acclaro/translations + ``` 3. In the Control Panel, go to Settings → Plugins and click the “Install” button for Translations. You can also [install Translations via the Plugin Store](https://plugins.craftcms.com/translations) or from the Craft Control Panel. -## 🚀 Gettings Started +## 🚀 Getting Started Please refer to the [Getting Started Guide](https://github.com/AcclaroInc/craft-translations/wiki/Getting-Started) for detailed plugin setup. For recommended workflows, FAQs, and additional documentation, visit our plugin [Wiki](https://github.com/AcclaroInc/craft-translations/wiki). +## 🧩 Supported Elements, Fields, and Plugins + +### Craft CMS Elements +- [Categories](https://craftcms.com/docs/5.x/reference/element-types/categories.html) +- [Entries](https://craftcms.com/docs/5.x/reference/element-types/entries.html) +- [Assets](https://craftcms.com/docs/5.x/reference/element-types/assets.html) +- [Globals](https://craftcms.com/docs/5.x/reference/element-types/globals.html) + +### Craft CMS Fields +- [Assets](https://craftcms.com/docs/5.x/reference/field-types/assets.html) +- [Categories](https://craftcms.com/docs/5.x/reference/field-types/categories.html) +- [Checkboxes](https://craftcms.com/docs/5.x/reference/field-types/checkboxes.html) +- [Dropdown](https://craftcms.com/docs/5.x/reference/field-types/dropdown.html) +- [Entries](https://craftcms.com/docs/5.x/reference/field-types/entries.html) +- [Matrix](https://craftcms.com/docs/5.x/reference/field-types/matrix.html) +- [Multi-select](https://craftcms.com/docs/5.x/reference/field-types/multi-select.html) +- [Number](https://craftcms.com/docs/5.x/reference/field-types/number.html) +- [Plain Text](https://craftcms.com/docs/5.x/reference/field-types/plain-text.html) +- [Radio Buttons](https://craftcms.com/docs/5.x/reference/field-types/radio-buttons.html) +- [Table](https://craftcms.com/docs/5.x/reference/field-types/table.html) +- [Tags](https://craftcms.com/docs/5.x/reference/element-types/tags.html) + +### 3rd Party Plugins +- [Craft Commerce](https://plugins.craftcms.com/commerce?craft5) + - Commerce Products + - Commerce Variants +- [CKEditor](https://plugins.craftcms.com/ckeditor?craft5) +- [SEOmatic](https://plugins.craftcms.com/seomatic?craft5) +- [Ether SEO](https://plugins.craftcms.com/seo?craft5) +- [Neo](https://plugins.craftcms.com/neo?craft5) +- [Hyper](https://plugins.craftcms.com/hyper?craft5) +- [LinkIt](https://plugins.craftcms.com/linkit?craft5) +- [Visy](https://plugins.craftcms.com/vizy?craft5) +- [Navigation](https://plugins.craftcms.com/navigation?craft5) +- [Super Dynamic Fields](https://plugins.craftcms.com/super-dynamic-fields?craft5) + - Dropdown + - Radio Buttons + - Checkboxes + - Multi-select +- [Super Table](https://plugins.craftcms.com/super-table?craft5) + +*Need support for a specific plugin? [Open an issue](https://github.com/AcclaroInc/craft-translations/issues/new).* + ## ℹ️ Additional Information + ### Pricing -The license fee for this plugin is $999.00 via the Craft Plugin Store. Annual license renewals can be purchased for $399.00. (Pricing is subject to change without prior notice) +The Translations plugin is available for purchase at $99.00 through the [Craft Plugin Store](https://plugins.craftcms.com/translations?craft5). Annual license renewals are priced at $49.00. Please note that pricing is subject to change without prior notice. -We offer a 30-day money back guarantee for the software plugin purchase if you are not satisfied. +We offer a 30-day money-back guarantee. If you are not satisfied with your purchase, you can request a full refund within this period. ### Terms -Prior to download, installation and use of the Translation Plugin for Craft on a public site, site owners are required to purchase the plugin from the Craft plugin store or submit payment directly to Acclaro for purchases outside of the store. +To use the Translations plugin on a public site, you must purchase a license from the Craft Plugin Store or directly from Acclaro. By using the plugin, whether in a production or sandbox environment, you agree to the terms outlined in the [Craft Software License](https://craftcms.github.io/license/). + +For integrations with Acclaro Translation Services, acceptance of the [Acclaro User Agreement](https://my.acclaro.com/pages/useragreement) and [Privacy Policy](https://www.acclaro.com/privacy-policy/) is required. + +### Updates & Support +Your purchase includes 12 months of updates and API connectivity. After this period, you can renew your license annually for $49.00 to continue receiving updates and support. -Any usage of the plugin either on production or in a sandbox environment indicates your acceptance of the legal terms described in the [Craft Software License](https://craftcms.github.io/license/). Any usage of Acclaro Translation Service API integrations indicates acceptance of the terms and conditions as set forth in the [Acclaro User Agreement](https://my.acclaro.com/pages/useragreement) and [Privacy Policy](https://www.acclaro.com/privacy-policy/). +For advanced standalone product support and multisite consulting, additional services can be purchased separately from Acclaro. -### Updates & support -Purchasing the plugin includes 12 months of updates and API connectivity access. Additional license renewals are $399/yr. Advanced standalone product and multisite consulting support for the Translation plugin can be purchased separately from Acclaro. +--- -### Contributing -Want to extend the Translations plugin with your own developed code? If it’s functionality that other plugin users can also take advantage of, let us know and we’ll guide you on how to submit a Git PR. We’ll review, test and integrate as fast as we can. +For any questions or further assistance, please contact our support team at support@acclaro.com. \ No newline at end of file diff --git a/composer.json b/composer.json index 74f92f32..d1e01c97 100644 --- a/composer.json +++ b/composer.json @@ -9,6 +9,7 @@ "craft-plugin", "translations", "multisite", + "localization", "multisite translations", "translation plugin for craft" ], diff --git a/composer.lock b/composer.lock index a4b50a9c..b0e065c0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,29 +4,83 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ce91cf950aa4cfe40aa7a6a6ec39ebcf", + "content-hash": "c6965a2dec5876b0ee78a4fee27cdf29", "packages": [ + { + "name": "bacon/bacon-qr-code", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.1", + "phpunit/phpunit": "^7 | ^8 | ^9", + "spatie/phpunit-snapshot-assertions": "^4.2.9", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8" + }, + "time": "2022-12-07T17:46:57+00:00" + }, { "name": "brick/math", - "version": "0.11.0", + "version": "0.12.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" }, "type": "library", "autoload": { @@ -46,12 +100,17 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "source": "https://github.com/brick/math/tree/0.12.1" }, "funding": [ { @@ -59,7 +118,7 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2023-11-29T23:19:16+00:00" }, { "name": "cebe/markdown", @@ -127,28 +186,28 @@ }, { "name": "commerceguys/addressing", - "version": "v1.4.2", + "version": "v2.2.2", "source": { "type": "git", "url": "https://github.com/commerceguys/addressing.git", - "reference": "406c7b5f0fbe4f6a64155c0fe03b1adb34d01308" + "reference": "4d23e46ea32534268ea121453c93ceda2bc3ee69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/commerceguys/addressing/zipball/406c7b5f0fbe4f6a64155c0fe03b1adb34d01308", - "reference": "406c7b5f0fbe4f6a64155c0fe03b1adb34d01308", + "url": "https://api.github.com/repos/commerceguys/addressing/zipball/4d23e46ea32534268ea121453c93ceda2bc3ee69", + "reference": "4d23e46ea32534268ea121453c93ceda2bc3ee69", "shasum": "" }, "require": { - "doctrine/collections": "^1.2 || ^2.0", - "php": ">=7.3" + "doctrine/collections": "^1.6 || ^2.0", + "php": ">=8.0" }, "require-dev": { "ext-json": "*", - "mikey179/vfsstream": "^1.6.10", - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.6", - "symfony/validator": "^4.4 || ^5.4 || ^6.0" + "mikey179/vfsstream": "^1.6.11", + "phpunit/phpunit": "^9.6", + "squizlabs/php_codesniffer": "^3.7", + "symfony/validator": "^5.4 || ^6.3 || ^7.0" }, "suggest": { "symfony/validator": "to validate addresses" @@ -156,7 +215,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -185,22 +244,22 @@ ], "support": { "issues": "https://github.com/commerceguys/addressing/issues", - "source": "https://github.com/commerceguys/addressing/tree/v1.4.2" + "source": "https://github.com/commerceguys/addressing/tree/v2.2.2" }, - "time": "2023-02-15T10:11:14+00:00" + "time": "2024-07-12T11:53:22+00:00" }, { "name": "composer/ca-bundle", - "version": "1.5.0", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99" + "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/0c5ccfcfea312b5c5a190a21ac5cef93f74baf99", - "reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/48a792895a2b7a6ee65dd5442c299d7b835b6137", + "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137", "shasum": "" }, "require": { @@ -210,8 +269,8 @@ }, "require-dev": { "phpstan/phpstan": "^1.10", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", + "phpunit/phpunit": "^8 || ^9", + "psr/log": "^1.0 || ^2.0 || ^3.0", "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", @@ -247,7 +306,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.0" + "source": "https://github.com/composer/ca-bundle/tree/1.5.2" }, "funding": [ { @@ -263,20 +322,20 @@ "type": "tidelift" } ], - "time": "2024-03-15T14:00:32+00:00" + "time": "2024-09-25T07:49:53+00:00" }, { "name": "composer/class-map-generator", - "version": "1.1.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "8286a62d243312ed99b3eee20d5005c961adb311" + "reference": "98bbf6780e56e0fd2404fe4b82eb665a0f93b783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/8286a62d243312ed99b3eee20d5005c961adb311", - "reference": "8286a62d243312ed99b3eee20d5005c961adb311", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/98bbf6780e56e0fd2404fe4b82eb665a0f93b783", + "reference": "98bbf6780e56e0fd2404fe4b82eb665a0f93b783", "shasum": "" }, "require": { @@ -289,8 +348,8 @@ "phpstan/phpstan-deprecation-rules": "^1", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8", + "symfony/filesystem": "^5.4 || ^6" }, "type": "library", "extra": { @@ -320,7 +379,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.1.1" + "source": "https://github.com/composer/class-map-generator/tree/1.4.0" }, "funding": [ { @@ -336,52 +395,52 @@ "type": "tidelift" } ], - "time": "2024-03-15T12:53:41+00:00" + "time": "2024-10-03T18:14:00+00:00" }, { "name": "composer/composer", - "version": "2.7.2", + "version": "2.8.1", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "b826edb791571ab1eaf281eb1bd6e181a1192adc" + "reference": "e52b8672276cf436670cdd6bd5de4353740e83b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/b826edb791571ab1eaf281eb1bd6e181a1192adc", - "reference": "b826edb791571ab1eaf281eb1bd6e181a1192adc", + "url": "https://api.github.com/repos/composer/composer/zipball/e52b8672276cf436670cdd6bd5de4353740e83b2", + "reference": "e52b8672276cf436670cdd6bd5de4353740e83b2", "shasum": "" }, "require": { - "composer/ca-bundle": "^1.0", - "composer/class-map-generator": "^1.0", + "composer/ca-bundle": "^1.5", + "composer/class-map-generator": "^1.4.0", "composer/metadata-minifier": "^1.0", - "composer/pcre": "^2.1 || ^3.1", - "composer/semver": "^3.2.5", + "composer/pcre": "^2.2 || ^3.2", + "composer/semver": "^3.3", "composer/spdx-licenses": "^1.5.7", "composer/xdebug-handler": "^2.0.2 || ^3.0.3", - "justinrainbow/json-schema": "^5.2.11", + "justinrainbow/json-schema": "^5.3", "php": "^7.2.5 || ^8.0", "psr/log": "^1.0 || ^2.0 || ^3.0", - "react/promise": "^2.8 || ^3", + "react/promise": "^3.2", "seld/jsonlint": "^1.4", "seld/phar-utils": "^1.2", "seld/signal-handler": "^2.0", - "symfony/console": "^5.4.11 || ^6.0.11 || ^7", - "symfony/filesystem": "^5.4 || ^6.0 || ^7", - "symfony/finder": "^5.4 || ^6.0 || ^7", + "symfony/console": "^5.4.35 || ^6.3.12 || ^7.0.3", + "symfony/filesystem": "^5.4.35 || ^6.3.12 || ^7.0.3", + "symfony/finder": "^5.4.35 || ^6.3.12 || ^7.0.3", "symfony/polyfill-php73": "^1.24", "symfony/polyfill-php80": "^1.24", "symfony/polyfill-php81": "^1.24", - "symfony/process": "^5.4 || ^6.0 || ^7" + "symfony/process": "^5.4.35 || ^6.3.12 || ^7.0.3" }, "require-dev": { - "phpstan/phpstan": "^1.9.3", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1", - "phpstan/phpstan-symfony": "^1.2.10", - "symfony/phpunit-bridge": "^6.4.1 || ^7.0.1" + "phpstan/phpstan": "^1.11.8", + "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.0", + "phpstan/phpstan-symfony": "^1.4.0", + "symfony/phpunit-bridge": "^6.4.3 || ^7.0.1" }, "suggest": { "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", @@ -394,7 +453,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.7-dev" + "dev-main": "2.8-dev" }, "phpstan": { "includes": [ @@ -434,7 +493,7 @@ "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", "security": "https://github.com/composer/composer/security/policy", - "source": "https://github.com/composer/composer/tree/2.7.2" + "source": "https://github.com/composer/composer/tree/2.8.1" }, "funding": [ { @@ -450,7 +509,7 @@ "type": "tidelift" } ], - "time": "2024-03-11T16:12:18+00:00" + "time": "2024-10-04T09:31:01+00:00" }, { "name": "composer/metadata-minifier", @@ -523,30 +582,38 @@ }, { "name": "composer/pcre", - "version": "3.1.3", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.10", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -574,7 +641,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.3" + "source": "https://github.com/composer/pcre/tree/3.3.1" }, "funding": [ { @@ -590,28 +657,28 @@ "type": "tidelift" } ], - "time": "2024-03-19T10:26:25+00:00" + "time": "2024-08-27T18:44:43+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -655,7 +722,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -671,7 +738,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/spdx-licenses", @@ -755,16 +822,16 @@ }, { "name": "composer/xdebug-handler", - "version": "3.0.4", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", - "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -801,7 +868,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -817,30 +884,31 @@ "type": "tidelift" } ], - "time": "2024-03-26T18:29:49+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { "name": "craftcms/cms", - "version": "4.8.9", + "version": "5.4.9", "source": { "type": "git", "url": "https://github.com/craftcms/cms.git", - "reference": "81fc5457658ff2906e9c120f3d3f71621b1d9b73" + "reference": "8c354fc15b0fba8a8b9363f0f98883a76e57795f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/cms/zipball/81fc5457658ff2906e9c120f3d3f71621b1d9b73", - "reference": "81fc5457658ff2906e9c120f3d3f71621b1d9b73", + "url": "https://api.github.com/repos/craftcms/cms/zipball/8c354fc15b0fba8a8b9363f0f98883a76e57795f", + "reference": "8c354fc15b0fba8a8b9363f0f98883a76e57795f", "shasum": "" }, "require": { - "commerceguys/addressing": "^1.2", - "composer/composer": "^2.7.0", + "bacon/bacon-qr-code": "^2.0", + "commerceguys/addressing": "^2.1.1", + "composer/semver": "^3.3.2", "craftcms/plugin-installer": "~1.6.0", - "craftcms/server-check": "~2.1.2", + "craftcms/server-check": "~5.0.1", "creocoder/yii2-nested-sets": "~0.9.0", "elvanto/litemoji": "~4.3.0", - "enshrined/svg-sanitize": "~0.16.0", + "enshrined/svg-sanitize": "~0.19.0", "ext-bcmath": "*", "ext-curl": "*", "ext-dom": "*", @@ -852,47 +920,56 @@ "ext-pdo": "*", "ext-zip": "*", "guzzlehttp/guzzle": "^7.2.0", - "illuminate/collections": "^9.1.0", + "illuminate/collections": "^v10.42.0", "mikehaertl/php-shellcommand": "^1.6.3", "moneyphp/money": "^4.0", - "monolog/monolog": "^2.3", - "php": "^8.0.2", + "monolog/monolog": "^3.0", + "php": "^8.2", + "phpdocumentor/reflection-docblock": "^5.3", "pixelandtonic/imagine": "~1.3.3.1", + "pragmarx/google2fa": "^8.0", + "pragmarx/recovery": "^0.2.1", "samdark/yii2-psr-log-target": "^1.1.3", "seld/cli-prompt": "^1.0.4", + "symfony/filesystem": "^6.3", "symfony/http-client": "^6.0.3", + "symfony/property-access": "^7.0", + "symfony/property-info": "^7.0", + "symfony/serializer": "^6.4", "symfony/var-dumper": "^5.0|^6.0", "symfony/yaml": "^5.2.3", "theiconic/name-parser": "^1.2", - "twig/twig": "~3.8.0", + "twig/twig": "~3.14.0", "voku/stringy": "^6.4.0", + "web-auth/webauthn-lib": "~4.9.0", "webonyx/graphql-php": "~14.11.5", - "yiisoft/yii2": "~2.0.48.1", - "yiisoft/yii2-debug": "~2.1.22.0", + "yiisoft/yii2": "~2.0.51.0", + "yiisoft/yii2-debug": "~2.1.25.0", "yiisoft/yii2-queue": "~2.3.2", - "yiisoft/yii2-symfonymailer": "^2.0.0" + "yiisoft/yii2-symfonymailer": "^4.0.0" }, "conflict": { "webonyx/graphql-php": "14.11.7" }, "provide": { - "bower-asset/inputmask": "~3.2.2|~3.3.5", - "bower-asset/jquery": "3.5.*@stable|3.4.*@stable|3.3.*@stable|3.2.*@stable|3.1.*@stable|2.2.*@stable|2.1.*@stable|1.11.*@stable|1.12.*@stable", - "bower-asset/punycode": "1.3.*", - "bower-asset/yii2-pjax": "~2.0.1", + "bower-asset/inputmask": "5.0.9", + "bower-asset/jquery": "3.6.1", + "bower-asset/punycode": "2.3.1", + "bower-asset/yii2-pjax": "2.0.8", "yii2tech/ar-softdelete": "1.0.4" }, "require-dev": { - "codeception/codeception": "^4.1.29", - "codeception/module-asserts": "^1.3.1", - "codeception/module-datafactory": "^1.1.0", - "codeception/module-phpbrowser": "^1.0.2", - "codeception/module-rest": "^1.4.2", - "codeception/module-yii2": "^1.1.5", + "codeception/codeception": "^5.0.11", + "codeception/lib-innerbrowser": "4.0.1", + "codeception/module-asserts": "^3.0.0", + "codeception/module-datafactory": "^3.0.0", + "codeception/module-phpbrowser": "^3.0.0", + "codeception/module-rest": "^3.3.2", + "codeception/module-yii2": "^1.1.9", "craftcms/ecs": "dev-main", "fakerphp/faker": "^1.19.0", "league/factory-muffin": "^3.3.0", - "phpstan/phpstan": "^1.8.5", + "phpstan/phpstan": "^1.10.56", "vlucas/phpdotenv": "^5.4.1", "yiisoft/yii2-redis": "^2.0" }, @@ -926,14 +1003,14 @@ "yii2" ], "support": { - "docs": "https://craftcms.com/docs/4.x/", + "docs": "https://craftcms.com/docs/5.x/", "email": "support@craftcms.com", "forum": "https://craftcms.stackexchange.com/", "issues": "https://github.com/craftcms/cms/issues?state=open", "rss": "https://github.com/craftcms/cms/releases.atom", "source": "https://github.com/craftcms/cms" }, - "time": "2024-04-10T22:40:32+00:00" + "time": "2024-10-22T19:14:27+00:00" }, { "name": "craftcms/plugin-installer", @@ -990,16 +1067,16 @@ }, { "name": "craftcms/server-check", - "version": "2.1.8", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/craftcms/server-check.git", - "reference": "c86e8aeabc73333111e2bfb4483d7b5402232e48" + "reference": "2c0578a3b0e663402ce5bf752e7308218937fad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/craftcms/server-check/zipball/c86e8aeabc73333111e2bfb4483d7b5402232e48", - "reference": "c86e8aeabc73333111e2bfb4483d7b5402232e48", + "url": "https://api.github.com/repos/craftcms/server-check/zipball/2c0578a3b0e663402ce5bf752e7308218937fad9", + "reference": "2c0578a3b0e663402ce5bf752e7308218937fad9", "shasum": "" }, "type": "library", @@ -1028,7 +1105,7 @@ "rss": "https://github.com/craftcms/server-check/releases.atom", "source": "https://github.com/craftcms/server-check" }, - "time": "2023-09-25T17:28:37+00:00" + "time": "2024-09-16T15:18:27+00:00" }, { "name": "creocoder/yii2-nested-sets", @@ -1074,6 +1151,56 @@ }, "time": "2015-01-27T10:53:51+00:00" }, + { + "name": "dasprid/enum", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" + }, + "time": "2024-08-09T14:30:48+00:00" + }, { "name": "defuse/php-encryption", "version": "v2.4.0", @@ -1143,16 +1270,16 @@ }, { "name": "doctrine/collections", - "version": "2.2.1", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "420480fc085bc65f3c956af13abe8e7546f94813" + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/420480fc085bc65f3c956af13abe8e7546f94813", - "reference": "420480fc085bc65f3c956af13abe8e7546f94813", + "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59", + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59", "shasum": "" }, "require": { @@ -1209,7 +1336,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.2.1" + "source": "https://github.com/doctrine/collections/tree/2.2.2" }, "funding": [ { @@ -1225,7 +1352,7 @@ "type": "tidelift" } ], - "time": "2024-03-05T22:28:45+00:00" + "time": "2024-04-18T06:56:21+00:00" }, { "name": "doctrine/deprecations", @@ -1463,22 +1590,21 @@ }, { "name": "enshrined/svg-sanitize", - "version": "0.16.0", + "version": "0.19.0", "source": { "type": "git", "url": "https://github.com/darylldoyle/svg-sanitizer.git", - "reference": "239e257605e2141265b429e40987b2ee51bba4b4" + "reference": "e95cd17be68e45f523cbfb0fe50cdd891b0cf20e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/239e257605e2141265b429e40987b2ee51bba4b4", - "reference": "239e257605e2141265b429e40987b2ee51bba4b4", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/e95cd17be68e45f523cbfb0fe50cdd891b0cf20e", + "reference": "e95cd17be68e45f523cbfb0fe50cdd891b0cf20e", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "ezyang/htmlpurifier": "^4.16", "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { @@ -1503,9 +1629,9 @@ "description": "An SVG sanitizer for PHP", "support": { "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", - "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.16.0" + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.19.0" }, - "time": "2023-03-20T10:51:12+00:00" + "time": "2024-06-18T10:27:15+00:00" }, { "name": "ezyang/htmlpurifier", @@ -1570,26 +1696,26 @@ }, { "name": "firebase/php-jwt", - "version": "v6.10.0", + "version": "v6.10.1", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "a49db6f0a5033aef5143295342f1c95521b075ff" + "reference": "500501c2ce893c824c801da135d02661199f60c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff", - "reference": "a49db6f0a5033aef5143295342f1c95521b075ff", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", + "reference": "500501c2ce893c824c801da135d02661199f60c5", "shasum": "" }, "require": { - "php": "^7.4||^8.0" + "php": "^8.0" }, "require-dev": { - "guzzlehttp/guzzle": "^6.5||^7.4", + "guzzlehttp/guzzle": "^7.4", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "psr/cache": "^1.0||^2.0", + "psr/cache": "^2.0||^3.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0" }, @@ -1627,40 +1753,42 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" }, - "time": "2023-12-01T16:26:39+00:00" + "time": "2024-05-18T18:05:11+00:00" }, { "name": "google/auth", - "version": "v1.37.1", + "version": "v1.42.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "1a7de77b72e6ac60dccf0e6478c4c1005bb0ff46" + "reference": "0c25599a91530b5847f129b271c536f75a7563f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/1a7de77b72e6ac60dccf0e6478c4c1005bb0ff46", - "reference": "1a7de77b72e6ac60dccf0e6478c4c1005bb0ff46", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/0c25599a91530b5847f129b271c536f75a7563f5", + "reference": "0c25599a91530b5847f129b271c536f75a7563f5", "shasum": "" }, "require": { "firebase/php-jwt": "^6.0", - "guzzlehttp/guzzle": "^6.5.8||^7.4.5", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.4.5", - "php": "^7.4||^8.0", - "psr/cache": "^1.0||^2.0||^3.0", + "php": "^8.0", + "psr/cache": "^2.0||^3.0", "psr/http-message": "^1.1||^2.0" }, "require-dev": { "guzzlehttp/promises": "^2.0", "kelvinmo/simplejwt": "0.7.1", - "phpseclib/phpseclib": "^3.0", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.0.0", + "phpseclib/phpseclib": "^3.0.35", + "phpspec/prophecy-phpunit": "^2.1", + "phpunit/phpunit": "^9.6", "sebastian/comparator": ">=1.2.3", - "squizlabs/php_codesniffer": "^3.5" + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^6.0||^7.0", + "webmozart/assert": "^1.11" }, "suggest": { "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2." @@ -1685,27 +1813,27 @@ "support": { "docs": "https://googleapis.github.io/google-auth-library-php/main/", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.37.1" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.42.0" }, - "time": "2024-04-03T18:41:12+00:00" + "time": "2024-08-26T18:33:48+00:00" }, { "name": "google/cloud-core", - "version": "v1.57.0", + "version": "v1.60.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-cloud-php-core.git", - "reference": "a6bbc85a5ff2edc1c29344e3aaaa0a099d569748" + "reference": "7d63ba4295b799dc63227b6c9daf9dc207650eb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/a6bbc85a5ff2edc1c29344e3aaaa0a099d569748", - "reference": "a6bbc85a5ff2edc1c29344e3aaaa0a099d569748", + "url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/7d63ba4295b799dc63227b6c9daf9dc207650eb4", + "reference": "7d63ba4295b799dc63227b6c9daf9dc207650eb4", "shasum": "" }, "require": { "google/auth": "^1.34", - "google/gax": "^1.30", + "google/gax": "^1.34.0", "guzzlehttp/guzzle": "^6.5.8|^7.4.4", "guzzlehttp/promises": "^1.4||^2.0", "guzzlehttp/psr7": "^2.6", @@ -1751,27 +1879,27 @@ ], "description": "Google Cloud PHP shared dependency, providing functionality useful to all components.", "support": { - "source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.57.0" + "source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.60.0" }, - "time": "2024-04-12T23:38:19+00:00" + "time": "2024-09-28T04:24:22+00:00" }, { "name": "google/cloud-translate", - "version": "v1.17.4", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-cloud-php-translate.git", - "reference": "ec3a6a0d8f1cf9bbf380beb53a9368f8d33e17be" + "reference": "79abf39e60814e04257c8f9d1f4878f34e93141d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-cloud-php-translate/zipball/ec3a6a0d8f1cf9bbf380beb53a9368f8d33e17be", - "reference": "ec3a6a0d8f1cf9bbf380beb53a9368f8d33e17be", + "url": "https://api.github.com/repos/googleapis/google-cloud-php-translate/zipball/79abf39e60814e04257c8f9d1f4878f34e93141d", + "reference": "79abf39e60814e04257c8f9d1f4878f34e93141d", "shasum": "" }, "require": { "google/cloud-core": "^1.52.7", - "google/gax": "^1.30", + "google/gax": "^1.34.0", "php": "^8.0" }, "require-dev": { @@ -1807,22 +1935,22 @@ ], "description": "Cloud Translation Client for PHP", "support": { - "source": "https://github.com/googleapis/google-cloud-php-translate/tree/v1.17.4" + "source": "https://github.com/googleapis/google-cloud-php-translate/tree/v1.19.0" }, - "time": "2024-04-08T16:08:04+00:00" + "time": "2024-09-28T04:24:22+00:00" }, { "name": "google/common-protos", - "version": "v4.6.0", + "version": "4.8.3", "source": { "type": "git", "url": "https://github.com/googleapis/common-protos-php.git", - "reference": "f8588298a0a204aef2db15ce501530e476ec883f" + "reference": "38a9a8bb459fa618da797d25d7bf36bb21d1103d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/common-protos-php/zipball/f8588298a0a204aef2db15ce501530e476ec883f", - "reference": "f8588298a0a204aef2db15ce501530e476ec883f", + "url": "https://api.github.com/repos/googleapis/common-protos-php/zipball/38a9a8bb459fa618da797d25d7bf36bb21d1103d", + "reference": "38a9a8bb459fa618da797d25d7bf36bb21d1103d", "shasum": "" }, "require": { @@ -1833,6 +1961,14 @@ "phpunit/phpunit": "^9.6" }, "type": "library", + "extra": { + "component": { + "id": "common-protos", + "target": "googleapis/common-protos-php.git", + "path": "CommonProtos", + "entry": "README.md" + } + }, "autoload": { "psr-4": { "Google\\Api\\": "src/Api", @@ -1858,30 +1994,29 @@ "google" ], "support": { - "issues": "https://github.com/googleapis/common-protos-php/issues", - "source": "https://github.com/googleapis/common-protos-php/tree/v4.6.0" + "source": "https://github.com/googleapis/common-protos-php/tree/v4.8.3" }, - "time": "2024-04-03T19:11:54+00:00" + "time": "2024-09-07T01:37:15+00:00" }, { "name": "google/gax", - "version": "v1.30.1", + "version": "v1.34.1", "source": { "type": "git", "url": "https://github.com/googleapis/gax-php.git", - "reference": "2deeb24898d0ba3c4faba48f7f0cfcc1ef341613" + "reference": "173f0a97323284f91fd453c4ed7ed8317ecf6cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/gax-php/zipball/2deeb24898d0ba3c4faba48f7f0cfcc1ef341613", - "reference": "2deeb24898d0ba3c4faba48f7f0cfcc1ef341613", + "url": "https://api.github.com/repos/googleapis/gax-php/zipball/173f0a97323284f91fd453c4ed7ed8317ecf6cfa", + "reference": "173f0a97323284f91fd453c4ed7ed8317ecf6cfa", "shasum": "" }, "require": { "google/auth": "^1.34.0", "google/common-protos": "^4.4", "google/grpc-gcp": "^0.4", - "google/longrunning": "~0.2", + "google/longrunning": "~0.4", "google/protobuf": "^v3.25.3||^4.26.1", "grpc/grpc": "^1.13", "guzzlehttp/promises": "^2.0", @@ -1894,6 +2029,7 @@ }, "require-dev": { "phpspec/prophecy-phpunit": "^2.1", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.6", "squizlabs/php_codesniffer": "3.*" }, @@ -1915,9 +2051,9 @@ ], "support": { "issues": "https://github.com/googleapis/gax-php/issues", - "source": "https://github.com/googleapis/gax-php/tree/v1.30.1" + "source": "https://github.com/googleapis/gax-php/tree/v1.34.1" }, - "time": "2024-04-03T19:04:34+00:00" + "time": "2024-08-15T18:00:58+00:00" }, { "name": "google/grpc-gcp", @@ -1966,20 +2102,20 @@ }, { "name": "google/longrunning", - "version": "0.4.0", + "version": "0.4.3", "source": { "type": "git", "url": "https://github.com/googleapis/php-longrunning.git", - "reference": "6841b03479d5a397a64036a99c33d8ee06bc8b42" + "reference": "ed718a735e407826c3332b7197a44602eb03e608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/php-longrunning/zipball/6841b03479d5a397a64036a99c33d8ee06bc8b42", - "reference": "6841b03479d5a397a64036a99c33d8ee06bc8b42", + "url": "https://api.github.com/repos/googleapis/php-longrunning/zipball/ed718a735e407826c3332b7197a44602eb03e608", + "reference": "ed718a735e407826c3332b7197a44602eb03e608", "shasum": "" }, "require-dev": { - "google/gax": "^1.30", + "google/gax": "^1.34.0", "phpunit/phpunit": "^9.0" }, "type": "library", @@ -2004,22 +2140,22 @@ ], "description": "Google LongRunning Client for PHP", "support": { - "source": "https://github.com/googleapis/php-longrunning/tree/v0.4.0" + "source": "https://github.com/googleapis/php-longrunning/tree/v0.4.3" }, - "time": "2024-04-12T23:38:19+00:00" + "time": "2024-06-01T03:14:01+00:00" }, { "name": "google/protobuf", - "version": "v4.26.1", + "version": "v4.28.3", "source": { "type": "git", "url": "https://github.com/protocolbuffers/protobuf-php.git", - "reference": "5c46b0eb09e7ad3e6efef3c5a85e2a34108c52ae" + "reference": "c5c311e0f3d89928251ac5a2f0e3db283612c100" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/5c46b0eb09e7ad3e6efef3c5a85e2a34108c52ae", - "reference": "5c46b0eb09e7ad3e6efef3c5a85e2a34108c52ae", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/c5c311e0f3d89928251ac5a2f0e3db283612c100", + "reference": "c5c311e0f3d89928251ac5a2f0e3db283612c100", "shasum": "" }, "require": { @@ -2048,9 +2184,9 @@ "proto" ], "support": { - "source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.26.1" + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.28.3" }, - "time": "2024-03-27T19:56:50+00:00" + "time": "2024-10-22T22:27:17+00:00" }, { "name": "grpc/grpc", @@ -2098,22 +2234,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.8.1", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -2124,9 +2260,9 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -2204,7 +2340,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -2220,20 +2356,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { @@ -2241,7 +2377,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -2287,7 +2423,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.2" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -2303,20 +2439,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:19:20+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -2331,8 +2467,8 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -2403,7 +2539,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -2419,35 +2555,35 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "illuminate/collections", - "version": "v9.52.16", + "version": "v10.48.22", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "d3710b0b244bfc62c288c1a87eaa62dd28352d1f" + "reference": "37c863cffb345869dd134eff8e646bc82a19cc96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/d3710b0b244bfc62c288c1a87eaa62dd28352d1f", - "reference": "d3710b0b244bfc62c288c1a87eaa62dd28352d1f", + "url": "https://api.github.com/repos/illuminate/collections/zipball/37c863cffb345869dd134eff8e646bc82a19cc96", + "reference": "37c863cffb345869dd134eff8e646bc82a19cc96", "shasum": "" }, "require": { - "illuminate/conditionable": "^9.0", - "illuminate/contracts": "^9.0", - "illuminate/macroable": "^9.0", - "php": "^8.0.2" + "illuminate/conditionable": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "php": "^8.1" }, "suggest": { - "symfony/var-dumper": "Required to use the dump method (^6.0)." + "symfony/var-dumper": "Required to use the dump method (^6.2)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2474,20 +2610,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-06-11T21:17:10+00:00" + "time": "2024-06-19T14:25:05+00:00" }, { "name": "illuminate/conditionable", - "version": "v9.52.16", + "version": "v10.48.22", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", - "reference": "bea24daa0fa84b7e7b0d5b84f62c71b7e2dc3364" + "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/bea24daa0fa84b7e7b0d5b84f62c71b7e2dc3364", - "reference": "bea24daa0fa84b7e7b0d5b84f62c71b7e2dc3364", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/d0958e4741fc9d6f516a552060fd1b829a85e009", + "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009", "shasum": "" }, "require": { @@ -2496,7 +2632,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2520,31 +2656,31 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-01T21:42:32+00:00" + "time": "2023-02-03T08:06:17+00:00" }, { "name": "illuminate/contracts", - "version": "v9.52.16", + "version": "v10.48.22", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "44f65d723b13823baa02ff69751a5948bde60c22" + "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/44f65d723b13823baa02ff69751a5948bde60c22", - "reference": "44f65d723b13823baa02ff69751a5948bde60c22", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", + "reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", "shasum": "" }, "require": { - "php": "^8.0.2", + "php": "^8.1", "psr/container": "^1.1.1|^2.0.1", "psr/simple-cache": "^1.0|^2.0|^3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2568,29 +2704,29 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-08T14:36:30+00:00" + "time": "2024-01-15T18:52:32+00:00" }, { "name": "illuminate/macroable", - "version": "v9.52.16", + "version": "v10.48.22", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", - "reference": "e3bfaf6401742a9c6abca61b9b10e998e5b6449a" + "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/macroable/zipball/e3bfaf6401742a9c6abca61b9b10e998e5b6449a", - "reference": "e3bfaf6401742a9c6abca61b9b10e998e5b6449a", + "url": "https://api.github.com/repos/illuminate/macroable/zipball/dff667a46ac37b634dcf68909d9d41e94dc97c27", + "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27", "shasum": "" }, "require": { - "php": "^8.0.2" + "php": "^8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2614,24 +2750,24 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-08-09T13:29:29+00:00" + "time": "2023-06-05T12:46:42+00:00" }, { "name": "justinrainbow/json-schema", - "version": "v5.2.13", + "version": "5.3.0", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793" + "url": "https://github.com/jsonrainbow/json-schema.git", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/fbbe7e5d79f618997bc3332a6f49246036c45793", - "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", @@ -2642,11 +2778,6 @@ "bin/validate-json" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, "autoload": { "psr-4": { "JsonSchema\\": "src/JsonSchema/" @@ -2681,10 +2812,74 @@ "schema" ], "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/v5.2.13" + "issues": "https://github.com/jsonrainbow/json-schema/issues", + "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" + }, + "time": "2024-07-06T21:00:26+00:00" + }, + { + "name": "lcobucci/clock", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "shasum": "" + }, + "require": { + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "infection/infection": "^0.29", + "lcobucci/coding-standard": "^11.1.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^11.3.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "support": { + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/3.3.1" }, - "time": "2023-09-26T02:20:38+00:00" + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2024-09-24T20:45:14+00:00" }, { "name": "mikehaertl/php-shellcommand", @@ -2734,16 +2929,16 @@ }, { "name": "moneyphp/money", - "version": "v4.5.0", + "version": "v4.5.1", "source": { "type": "git", "url": "https://github.com/moneyphp/money.git", - "reference": "a1daa7daf159b4044e3d0c34c41fe2be5860e850" + "reference": "142107bec4870ac2586057dc2fe917d25c92a91e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/moneyphp/money/zipball/a1daa7daf159b4044e3d0c34c41fe2be5860e850", - "reference": "a1daa7daf159b4044e3d0c34c41fe2be5860e850", + "url": "https://api.github.com/repos/moneyphp/money/zipball/142107bec4870ac2586057dc2fe917d25c92a91e", + "reference": "142107bec4870ac2586057dc2fe917d25c92a91e", "shasum": "" }, "require": { @@ -2816,48 +3011,47 @@ ], "support": { "issues": "https://github.com/moneyphp/money/issues", - "source": "https://github.com/moneyphp/money/tree/v4.5.0" + "source": "https://github.com/moneyphp/money/tree/v4.5.1" }, - "time": "2024-02-15T19:47:21+00:00" + "time": "2024-09-27T12:04:27+00:00" }, { "name": "monolog/monolog", - "version": "2.9.3", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215" + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.38 || ^9.6.19", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.5.17", + "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -2880,7 +3074,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -2908,7 +3102,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.3" + "source": "https://github.com/Seldaek/monolog/tree/3.7.0" }, "funding": [ { @@ -2920,7 +3114,74 @@ "type": "tidelift" } ], - "time": "2024-04-12T20:52:51+00:00" + "time": "2024-06-28T09:40:51+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", + "shasum": "" + }, + "require": { + "php": "^8" + }, + "require-dev": { + "phpunit/phpunit": "^9", + "vimeo/psalm": "^4|^5" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2024-05-08T12:36:18+00:00" }, { "name": "paragonie/random_compat", @@ -3027,16 +3288,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.4.0", + "version": "5.4.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "298d2febfe79d03fe714eb871d5538da55205b1a" + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a", - "reference": "298d2febfe79d03fe714eb871d5538da55205b1a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", "shasum": "" }, "require": { @@ -3085,9 +3346,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" }, - "time": "2024-04-09T21:13:58+00:00" + "time": "2024-05-21T05:55:05+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -3149,16 +3410,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.28.0", + "version": "1.33.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", "shasum": "" }, "require": { @@ -3190,9 +3451,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" }, - "time": "2024-04-03T18:51:33+00:00" + "time": "2024-10-13T11:25:22+00:00" }, { "name": "pixelandtonic/imagine", @@ -3256,31 +3517,31 @@ "time": "2023-01-03T19:18:06+00:00" }, { - "name": "psr/cache", - "version": "3.0.0", + "name": "pragmarx/google2fa", + "version": "v8.0.3", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + "url": "https://github.com/antonioribeiro/google2fa.git", + "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad", + "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad", "shasum": "" }, "require": { - "php": ">=8.0.0" + "paragonie/constant_time_encoding": "^1.0|^2.0|^3.0", + "php": "^7.1|^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^7.5.15|^8.5|^9.0" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Cache\\": "src/" + "PragmaRX\\Google2FA\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3289,47 +3550,60 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Antonio Carlos Ribeiro", + "email": "acr@antoniocarlosribeiro.com", + "role": "Creator & Designer" } ], - "description": "Common interface for caching libraries", + "description": "A One Time Password Authentication package, compatible with Google Authenticator.", "keywords": [ - "cache", - "psr", - "psr-6" + "2fa", + "Authentication", + "Two Factor Authentication", + "google2fa" ], "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" + "issues": "https://github.com/antonioribeiro/google2fa/issues", + "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.3" }, - "time": "2021-02-03T23:26:27+00:00" + "time": "2024-09-05T11:56:40+00:00" }, { - "name": "psr/container", - "version": "2.0.2", + "name": "pragmarx/random", + "version": "v0.2.2", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "url": "https://github.com/antonioribeiro/random.git", + "reference": "daf08a189c5d2d40d1a827db46364d3a741a51b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/antonioribeiro/random/zipball/daf08a189c5d2d40d1a827db46364d3a741a51b7", + "reference": "daf08a189c5d2d40d1a827db46364d3a741a51b7", "shasum": "" }, "require": { - "php": ">=7.4.0" + "php": ">=7.0" + }, + "require-dev": { + "fzaninotto/faker": "~1.7", + "phpunit/phpunit": "~6.4", + "pragmarx/trivia": "~0.1", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "fzaninotto/faker": "Allows you to get dozens of randomized types", + "pragmarx/trivia": "For the trivia database" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "PragmaRX\\Random\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3338,51 +3612,64 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Antonio Carlos Ribeiro", + "email": "acr@antoniocarlosribeiro.com", + "homepage": "https://antoniocarlosribeiro.com", + "role": "Developer" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Create random chars, numbers, strings", + "homepage": "https://github.com/antonioribeiro/random", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "Randomize", + "faker", + "pragmarx", + "random", + "random number", + "random pattern", + "random string" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "issues": "https://github.com/antonioribeiro/random/issues", + "source": "https://github.com/antonioribeiro/random/tree/master" }, - "time": "2021-11-05T16:47:00+00:00" + "time": "2017-11-21T05:26:22+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "pragmarx/recovery", + "version": "v0.2.1", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/antonioribeiro/recovery.git", + "reference": "b5ce4082f059afac6761714a84497816f45271cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/antonioribeiro/recovery/zipball/b5ce4082f059afac6761714a84497816f45271cc", + "reference": "b5ce4082f059afac6761714a84497816f45271cc", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=7.0", + "pragmarx/random": "~0.1" + }, + "require-dev": { + "phpunit/phpunit": ">=5.4.3", + "squizlabs/php_codesniffer": "^2.3", + "tightenco/collect": "^5.0" + }, + "suggest": { + "tightenco/collect": "Allows to generate recovery codes as collections" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { "psr-4": { - "Psr\\EventDispatcher\\": "src/" + "PragmaRX\\Recovery\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3391,8 +3678,217 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Antonio Carlos Ribeiro", + "email": "acr@antoniocarlosribeiro.com", + "homepage": "https://antoniocarlosribeiro.com", + "role": "Developer" + } + ], + "description": "Create recovery codes for two factor auth", + "homepage": "https://github.com/antonioribeiro/recovery", + "keywords": [ + "2fa", + "account recovery", + "auth", + "backup codes", + "google2fa", + "pragmarx", + "recovery", + "recovery codes", + "two factor auth" + ], + "support": { + "issues": "https://github.com/antonioribeiro/recovery/issues", + "source": "https://github.com/antonioribeiro/recovery/tree/v0.2.1" + }, + "time": "2021-08-15T12:26:51+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "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/2.0.2" + }, + "time": "2021-11-05T16:47:00+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/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], "description": "Standard interfaces for event handling.", @@ -3461,20 +3957,20 @@ }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -3498,7 +3994,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -3510,9 +4006,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -3569,16 +4065,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -3613,9 +4109,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "psr/simple-cache", @@ -3803,20 +4299,20 @@ }, { "name": "ramsey/uuid", - "version": "4.7.5", + "version": "4.7.6", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -3879,7 +4375,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.5" + "source": "https://github.com/ramsey/uuid/tree/4.7.6" }, "funding": [ { @@ -3891,20 +4387,20 @@ "type": "tidelift" } ], - "time": "2023-11-08T05:53:05+00:00" + "time": "2024-04-27T21:32:50+00:00" }, { "name": "react/promise", - "version": "v3.1.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c" + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", - "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", "shasum": "" }, "require": { @@ -3956,7 +4452,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.1.0" + "source": "https://github.com/reactphp/promise/tree/v3.2.0" }, "funding": [ { @@ -3964,20 +4460,20 @@ "type": "open_collective" } ], - "time": "2023-11-16T16:21:57+00:00" + "time": "2024-05-24T10:39:05+00:00" }, { "name": "rize/uri-template", - "version": "0.3.6", + "version": "0.3.8", "source": { "type": "git", "url": "https://github.com/rize/UriTemplate.git", - "reference": "34efe65c79710eed0883884f2285ae6d4a0aad19" + "reference": "34a5b96d0b65a5dddb7d20f09b6527a43faede24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rize/UriTemplate/zipball/34efe65c79710eed0883884f2285ae6d4a0aad19", - "reference": "34efe65c79710eed0883884f2285ae6d4a0aad19", + "url": "https://api.github.com/repos/rize/UriTemplate/zipball/34a5b96d0b65a5dddb7d20f09b6527a43faede24", + "reference": "34a5b96d0b65a5dddb7d20f09b6527a43faede24", "shasum": "" }, "require": { @@ -4010,7 +4506,7 @@ ], "support": { "issues": "https://github.com/rize/UriTemplate/issues", - "source": "https://github.com/rize/UriTemplate/tree/0.3.6" + "source": "https://github.com/rize/UriTemplate/tree/0.3.8" }, "funding": [ { @@ -4026,7 +4522,7 @@ "type": "open_collective" } ], - "time": "2024-03-10T08:07:49+00:00" + "time": "2024-08-30T07:09:40+00:00" }, { "name": "samdark/yii2-psr-log-target", @@ -4147,23 +4643,23 @@ }, { "name": "seld/jsonlint", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259" + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9bb7db07b5d66d90f6ebf542f09fc67d800e5259", - "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2", + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2", "shasum": "" }, "require": { "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.5", + "phpstan/phpstan": "^1.11", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" }, "bin": [ @@ -4195,7 +4691,7 @@ ], "support": { "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.10.2" + "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0" }, "funding": [ { @@ -4207,7 +4703,7 @@ "type": "tidelift" } ], - "time": "2024-02-07T12:57:50+00:00" + "time": "2024-07-11T14:55:45+00:00" }, { "name": "seld/phar-utils", @@ -4371,56 +4867,51 @@ "time": "2020-12-19T18:47:06+00:00" }, { - "name": "symfony/console", - "version": "v7.0.6", + "name": "spomky-labs/cbor-php", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5" + "url": "https://github.com/Spomky-Labs/cbor-php.git", + "reference": "499d9bff0a6d59c4f1b813cc617fc3fd56d6dca4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fde915cd8e7eb99b3d531d3d5c09531429c3f9e5", - "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5", + "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/499d9bff0a6d59c4f1b813cc617fc3fd56d6dca4", + "reference": "499d9bff0a6d59c4f1b813cc617fc3fd56d6dca4", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "brick/math": "^0.9|^0.10|^0.11|^0.12", + "ext-mbstring": "*", + "php": ">=8.0" }, "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "ekino/phpstan-banned-code": "^1.0", + "ext-json": "*", + "infection/infection": "^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-beberlei-assert": "^1.0", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^10.1|^11.0", + "qossmic/deptrac": "^2.0", + "rector/rector": "^1.0", + "roave/security-advisories": "dev-latest", + "symfony/var-dumper": "^6.0|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "suggest": { + "ext-bcmath": "GMP or BCMath extensions will drastically improve the library performance. BCMath extension needed to handle the Big Float and Decimal Fraction Tags", + "ext-gmp": "GMP or BCMath extensions will drastically improve the library performance" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "CBOR\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4428,66 +4919,265 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/cbor-php/contributors" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", + "description": "CBOR Encoder/Decoder for PHP", "keywords": [ - "cli", - "command-line", - "console", - "terminal" + "Concise Binary Object Representation", + "RFC7049", + "cbor" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.0.6" + "issues": "https://github.com/Spomky-Labs/cbor-php/issues", + "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.1.0" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/Spomky", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" } ], - "time": "2024-04-01T11:04:53+00:00" + "time": "2024-07-18T08:37:03+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "name": "spomky-labs/pki-framework", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "url": "https://github.com/Spomky-Labs/pki-framework.git", + "reference": "0b10c8b53366729417d6226ae89a665f9e2d61b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/0b10c8b53366729417d6226ae89a665f9e2d61b6", + "reference": "0b10c8b53366729417d6226ae89a665f9e2d61b6", "shasum": "" }, "require": { + "brick/math": "^0.10|^0.11|^0.12", + "ext-mbstring": "*", "php": ">=8.1" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "require-dev": { + "ekino/phpstan-banned-code": "^1.0", + "ext-gmp": "*", + "ext-openssl": "*", + "infection/infection": "^0.28", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-beberlei-assert": "^1.0", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^10.1|^11.0", + "rector/rector": "^1.0", + "roave/security-advisories": "dev-latest", + "symfony/phpunit-bridge": "^6.4|^7.0", + "symfony/string": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "suggest": { + "ext-bcmath": "For better performance (or GMP)", + "ext-gmp": "For better performance (or BCMath)", + "ext-openssl": "For OpenSSL based cyphering" + }, + "type": "library", + "autoload": { + "psr-4": { + "SpomkyLabs\\Pki\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joni Eskelinen", + "email": "jonieske@gmail.com", + "role": "Original developer" + }, + { + "name": "Florent Morselli", + "email": "florent.morselli@spomky-labs.com", + "role": "Spomky-Labs PKI Framework developer" + } + ], + "description": "A PHP framework for managing Public Key Infrastructures. It comprises X.509 public key certificates, attribute certificates, certification requests and certification path validation.", + "homepage": "https://github.com/spomky-labs/pki-framework", + "keywords": [ + "DER", + "Private Key", + "ac", + "algorithm identifier", + "asn.1", + "asn1", + "attribute certificate", + "certificate", + "certification request", + "cryptography", + "csr", + "decrypt", + "ec", + "encrypt", + "pem", + "pkcs", + "public key", + "rsa", + "sign", + "signature", + "verify", + "x.509", + "x.690", + "x509", + "x690" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/pki-framework/issues", + "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2024-03-30T18:03:49+00:00" + }, + { + "name": "symfony/console", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "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/v7.1.5" + }, + "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-20T08:28:38+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4512,7 +5202,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -4528,20 +5218,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.0.3", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e" + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e", - "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", "shasum": "" }, "require": { @@ -4592,7 +5282,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" }, "funding": [ { @@ -4608,20 +5298,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "4e64b49bf370ade88e567de29465762e316e4224" + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", - "reference": "4e64b49bf370ade88e567de29465762e316e4224", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", "shasum": "" }, "require": { @@ -4631,7 +5321,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4668,7 +5358,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" }, "funding": [ { @@ -4684,27 +5374,30 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/filesystem", - "version": "v7.0.6", + "version": "v6.4.12", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "408105dff4c104454100730bdfd1a9cdd993f04d" + "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/408105dff4c104454100730bdfd1a9cdd993f04d", - "reference": "408105dff4c104454100730bdfd1a9cdd993f04d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/f810e3cbdf7fdc35983968523d09f349fa9ada12", + "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^5.4|^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -4731,7 +5424,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.6" + "source": "https://github.com/symfony/filesystem/tree/v6.4.12" }, "funding": [ { @@ -4747,20 +5440,20 @@ "type": "tidelift" } ], - "time": "2024-03-21T19:37:36+00:00" + "time": "2024-09-16T16:01:33+00:00" }, { "name": "symfony/finder", - "version": "v7.0.0", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", - "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", "shasum": "" }, "require": { @@ -4795,7 +5488,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.0.0" + "source": "https://github.com/symfony/finder/tree/v7.1.4" }, "funding": [ { @@ -4811,20 +5504,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:59:56+00:00" + "time": "2024-08-13T14:28:19+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.6", + "version": "v6.4.12", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "6a46c0ea9b099f9a5132d560a51833ffcbd5b0d9" + "reference": "fbebfcce21084d3e91ea987ae5bdd8c71ff0fd56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/6a46c0ea9b099f9a5132d560a51833ffcbd5b0d9", - "reference": "6a46c0ea9b099f9a5132d560a51833ffcbd5b0d9", + "url": "https://api.github.com/repos/symfony/http-client/zipball/fbebfcce21084d3e91ea987ae5bdd8c71ff0fd56", + "reference": "fbebfcce21084d3e91ea987ae5bdd8c71ff0fd56", "shasum": "" }, "require": { @@ -4888,7 +5581,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.6" + "source": "https://github.com/symfony/http-client/tree/v6.4.12" }, "funding": [ { @@ -4904,20 +5597,20 @@ "type": "tidelift" } ], - "time": "2024-04-01T20:35:50+00:00" + "time": "2024-09-20T08:21:33+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "b6b5c876b3a4ed74460e2c5ac53bbce2f12e2a7e" + "reference": "20414d96f391677bf80078aa55baece78b82647d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/b6b5c876b3a4ed74460e2c5ac53bbce2f12e2a7e", - "reference": "b6b5c876b3a4ed74460e2c5ac53bbce2f12e2a7e", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d", + "reference": "20414d96f391677bf80078aa55baece78b82647d", "shasum": "" }, "require": { @@ -4926,7 +5619,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4966,7 +5659,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0" }, "funding": [ { @@ -4982,20 +5675,20 @@ "type": "tidelift" } ], - "time": "2024-04-01T18:51:09+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/mailer", - "version": "v7.0.6", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "eb0c3187c7ddfde12d8aa0e1fa5fb29e730a41e0" + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/eb0c3187c7ddfde12d8aa0e1fa5fb29e730a41e0", - "reference": "eb0c3187c7ddfde12d8aa0e1fa5fb29e730a41e0", + "url": "https://api.github.com/repos/symfony/mailer/zipball/bbf21460c56f29810da3df3e206e38dfbb01e80b", + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b", "shasum": "" }, "require": { @@ -5046,7 +5739,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.0.6" + "source": "https://github.com/symfony/mailer/tree/v7.1.5" }, "funding": [ { @@ -5062,20 +5755,20 @@ "type": "tidelift" } ], - "time": "2024-03-28T09:20:36+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/mime", - "version": "v7.0.6", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "99362408c9abdf8c7cadcf0529b6fc8b16f5ace2" + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/99362408c9abdf8c7cadcf0529b6fc8b16f5ace2", - "reference": "99362408c9abdf8c7cadcf0529b6fc8b16f5ace2", + "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", "shasum": "" }, "require": { @@ -5088,7 +5781,7 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<6.4", - "symfony/serializer": "<6.4" + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", @@ -5098,7 +5791,7 @@ "symfony/process": "^6.4|^7.0", "symfony/property-access": "^6.4|^7.0", "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -5130,7 +5823,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.0.6" + "source": "https://github.com/symfony/mime/tree/v7.1.5" }, "funding": [ { @@ -5146,24 +5839,24 @@ "type": "tidelift" } ], - "time": "2024-03-21T19:37:36+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -5209,7 +5902,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -5225,24 +5918,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f" + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", - "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/48becf00c920479ca2e910c22a5a39e5d47ca956", + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-iconv": "*" @@ -5289,7 +5982,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.31.0" }, "funding": [ { @@ -5305,24 +5998,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -5367,7 +6060,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -5383,26 +6076,25 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -5451,7 +6143,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -5467,24 +6159,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -5532,7 +6224,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -5548,24 +6240,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -5612,7 +6304,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -5628,40 +6320,32 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "type": "library", + "type": "metapackage", "extra": { "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -5685,7 +6369,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" }, "funding": [ { @@ -5701,24 +6385,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -5761,7 +6445,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -5777,24 +6461,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -5832,16 +6516,490 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + }, + "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-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "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 backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" + }, + "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-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" + }, + "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-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "5c03ee6369281177f07f7c68252a280beccba847" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/5c03ee6369281177f07f7c68252a280beccba847", + "reference": "5c03ee6369281177f07f7c68252a280beccba847", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "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": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.1.5" + }, + "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-19T21:48:23+00:00" + }, + { + "name": "symfony/property-access", + "version": "v7.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "6c709f97103355016e5782d0622437ae381012ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/6c709f97103355016e5782d0622437ae381012ad", + "reference": "6c709f97103355016e5782d0622437ae381012ad", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0" + }, + "require-dev": { + "symfony/cache": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "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": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v7.1.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-08-30T16:12:47+00:00" + }, + { + "name": "symfony/property-info", + "version": "v7.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/string": "^6.4|^7.0", + "symfony/type-info": "^7.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v7.1.3" + }, + "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-07-26T07:36:36+00:00" + }, + { + "name": "symfony/serializer", + "version": "v6.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "10ae9c1b90f4809ccb7277cc8fe8d80b3af4412c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/10ae9c1b90f4809ccb7277cc8fe8d80b3af4412c", + "reference": "10ae9c1b90f4809ccb7277cc8fe8d80b3af4412c", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<5.4", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4.24|>=6,<6.2.11", + "symfony/uid": "<5.4", + "symfony/validator": "<6.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "seld/jsonlint": "^1.10", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/form": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.26|^6.3|^7.0", + "symfony/property-info": "^5.4.24|^6.2.11|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "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": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/serializer/tree/v6.4.12" }, "funding": [ { @@ -5857,41 +7015,46 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-20T08:15:52+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.29.0", + "name": "symfony/service-contracts", + "version": "v3.5.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "type": "library", "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Contracts\\Service\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Test/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5908,16 +7071,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -5933,29 +7098,47 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { - "name": "symfony/process", - "version": "v6.4.4", + "name": "symfony/string", + "version": "v7.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "710e27879e9be3395de2b98da3f52a946039f297" + "url": "https://github.com/symfony/string.git", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", - "reference": "710e27879e9be3395de2b98da3f52a946039f297", + "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Symfony\\Component\\Process\\": "" + "Symfony\\Component\\String\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -5967,18 +7150,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Executes commands in sub-processes", + "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": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], "support": { - "source": "https://github.com/symfony/process/tree/v6.4.4" + "source": "https://github.com/symfony/string/tree/v7.1.5" }, "funding": [ { @@ -5994,45 +7185,43 @@ "type": "tidelift" } ], - "time": "2024-02-20T12:31:00+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { - "name": "symfony/service-contracts", - "version": "v3.4.2", + "name": "symfony/type-info", + "version": "v7.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" + "url": "https://github.com/symfony/type-info.git", + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", + "url": "https://api.github.com/repos/symfony/type-info/zipball/9f6094aa900d2c06bd61576a6f279d4ac441515f", + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/container": "^1.1|^2.0" }, "conflict": { - "ext-psr": "<1.1|>=2" + "phpstan/phpdoc-parser": "<1.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-info": "<6.4" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } + "require-dev": { + "phpstan/phpdoc-parser": "^1.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0" }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Contracts\\Service\\": "" + "Symfony\\Component\\TypeInfo\\": "" }, "exclude-from-classmap": [ - "/Test/" + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6041,26 +7230,28 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to writing services", + "description": "Extracts PHP types information.", "homepage": "https://symfony.com", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "PHPStan", + "phpdoc", + "symfony", + "type" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/type-info/tree/v7.1.5" }, "funding": [ { @@ -6076,46 +7267,33 @@ "type": "tidelift" } ], - "time": "2023-12-19T21:51:00+00:00" + "time": "2024-09-19T21:48:23+00:00" }, { - "name": "symfony/string", - "version": "v7.0.4", + "name": "symfony/uid", + "version": "v7.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b" + "url": "https://github.com/symfony/uid.git", + "reference": "8c7bb8acb933964055215d89f9a9871df0239317" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b", - "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b", + "url": "https://api.github.com/repos/symfony/uid/zipball/8c7bb8acb933964055215d89f9a9871df0239317", + "reference": "8c7bb8acb933964055215d89f9a9871df0239317", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" + "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { - "files": [ - "Resources/functions.php" - ], "psr-4": { - "Symfony\\Component\\String\\": "" + "Symfony\\Component\\Uid\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6126,6 +7304,10 @@ "MIT" ], "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6135,18 +7317,15 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "description": "Provides an object-oriented API to generate and represent UIDs", "homepage": "https://symfony.com", "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" + "UID", + "ulid", + "uuid" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.0.4" + "source": "https://github.com/symfony/uid/tree/v7.1.5" }, "funding": [ { @@ -6162,20 +7341,20 @@ "type": "tidelift" } ], - "time": "2024-02-01T13:17:36+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.6", + "version": "v6.4.11", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "95bd2706a97fb875185b51ecaa6112ec184233d4" + "reference": "ee14c8254a480913268b1e3b1cba8045ed122694" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/95bd2706a97fb875185b51ecaa6112ec184233d4", - "reference": "95bd2706a97fb875185b51ecaa6112ec184233d4", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ee14c8254a480913268b1e3b1cba8045ed122694", + "reference": "ee14c8254a480913268b1e3b1cba8045ed122694", "shasum": "" }, "require": { @@ -6231,7 +7410,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.6" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.11" }, "funding": [ { @@ -6247,20 +7426,20 @@ "type": "tidelift" } ], - "time": "2024-03-19T11:56:30+00:00" + "time": "2024-08-30T16:03:21+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.35", + "version": "v5.4.44", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e78db7f5c70a21f0417a31f414c4a95fe76c07e4" + "reference": "7025b964f123bbf1896d7563db6ec7f1f63e918a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e78db7f5c70a21f0417a31f414c4a95fe76c07e4", - "reference": "e78db7f5c70a21f0417a31f414c4a95fe76c07e4", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7025b964f123bbf1896d7563db6ec7f1f63e918a", + "reference": "7025b964f123bbf1896d7563db6ec7f1f63e918a", "shasum": "" }, "require": { @@ -6306,7 +7485,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.35" + "source": "https://github.com/symfony/yaml/tree/v5.4.44" }, "funding": [ { @@ -6322,7 +7501,7 @@ "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2024-09-16T14:36:56+00:00" }, { "name": "theiconic/name-parser", @@ -6374,30 +7553,37 @@ }, { "name": "twig/twig", - "version": "v3.8.0", + "version": "v3.14.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d" + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", - "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72", + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.22" + "symfony/polyfill-php81": "^1.29" }, "require-dev": { "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0" + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, "type": "library", "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], "psr-4": { "Twig\\": "src/" } @@ -6430,7 +7616,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.8.0" + "source": "https://github.com/twigphp/Twig/tree/v3.14.0" }, "funding": [ { @@ -6442,7 +7628,7 @@ "type": "tidelift" } ], - "time": "2023-11-21T18:54:41+00:00" + "time": "2024-09-09T17:55:12+00:00" }, { "name": "voku/anti-xss", @@ -7087,6 +8273,178 @@ ], "time": "2022-01-24T19:08:46+00:00" }, + { + "name": "web-auth/cose-lib", + "version": "4.4.0", + "source": { + "type": "git", + "url": "https://github.com/web-auth/cose-lib.git", + "reference": "2166016e48e0214f4f63320a7758a9386d14c92a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/2166016e48e0214f4f63320a7758a9386d14c92a", + "reference": "2166016e48e0214f4f63320a7758a9386d14c92a", + "shasum": "" + }, + "require": { + "brick/math": "^0.9|^0.10|^0.11|^0.12", + "ext-json": "*", + "ext-openssl": "*", + "php": ">=8.1", + "spomky-labs/pki-framework": "^1.0" + }, + "require-dev": { + "ekino/phpstan-banned-code": "^1.0", + "infection/infection": "^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan": "^1.7", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.2", + "phpunit/phpunit": "^10.1|^11.0", + "qossmic/deptrac": "^2.0", + "rector/rector": "^1.0", + "symfony/phpunit-bridge": "^6.4|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "suggest": { + "ext-bcmath": "For better performance, please install either GMP (recommended) or BCMath extension", + "ext-gmp": "For better performance, please install either GMP (recommended) or BCMath extension" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cose\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/cose/contributors" + } + ], + "description": "CBOR Object Signing and Encryption (COSE) For PHP", + "homepage": "https://github.com/web-auth", + "keywords": [ + "COSE", + "RFC8152" + ], + "support": { + "issues": "https://github.com/web-auth/cose-lib/issues", + "source": "https://github.com/web-auth/cose-lib/tree/4.4.0" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2024-07-18T08:47:32+00:00" + }, + { + "name": "web-auth/webauthn-lib", + "version": "4.9.1", + "source": { + "type": "git", + "url": "https://github.com/web-auth/webauthn-lib.git", + "reference": "fd7a0943c663b325e92ad562c2bcc943e77beeac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/fd7a0943c663b325e92ad562c2bcc943e77beeac", + "reference": "fd7a0943c663b325e92ad562c2bcc943e77beeac", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "lcobucci/clock": "^2.2|^3.0", + "paragonie/constant_time_encoding": "^2.6|^3.0", + "php": ">=8.1", + "psr/clock": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "spomky-labs/cbor-php": "^3.0", + "spomky-labs/pki-framework": "^1.0", + "symfony/deprecation-contracts": "^3.2", + "symfony/uid": "^6.1|^7.0", + "web-auth/cose-lib": "^4.2.3" + }, + "suggest": { + "phpdocumentor/reflection-docblock": "As of 4.5.x, the phpdocumentor/reflection-docblock component will become mandatory for converting objects such as the Metadata Statement", + "psr/clock-implementation": "As of 4.5.x, the PSR Clock implementation will replace lcobucci/clock", + "psr/log-implementation": "Recommended to receive logs from the library", + "symfony/event-dispatcher": "Recommended to use dispatched events", + "symfony/property-access": "As of 4.5.x, the symfony/serializer component will become mandatory for converting objects such as the Metadata Statement", + "symfony/property-info": "As of 4.5.x, the symfony/serializer component will become mandatory for converting objects such as the Metadata Statement", + "symfony/serializer": "As of 4.5.x, the symfony/serializer component will become mandatory for converting objects such as the Metadata Statement", + "web-token/jwt-library": "Mandatory for fetching Metadata Statement from distant sources" + }, + "type": "library", + "extra": { + "thanks": { + "name": "web-auth/webauthn-framework", + "url": "https://github.com/web-auth/webauthn-framework" + } + }, + "autoload": { + "psr-4": { + "Webauthn\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/web-auth/webauthn-library/contributors" + } + ], + "description": "FIDO2/Webauthn Support For PHP", + "homepage": "https://github.com/web-auth", + "keywords": [ + "FIDO2", + "fido", + "webauthn" + ], + "support": { + "source": "https://github.com/web-auth/webauthn-lib/tree/4.9.1" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2024-07-16T18:36:36+00:00" + }, { "name": "webmozart/assert", "version": "1.11.0", @@ -7212,30 +8570,30 @@ }, { "name": "yiisoft/yii2", - "version": "2.0.48.1", + "version": "2.0.51", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-framework.git", - "reference": "de92f154eefe322fc1b1b2a52cce46677441ced4" + "reference": "ea1f112f4dc9a9824e77b788019e2d53325d823c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/de92f154eefe322fc1b1b2a52cce46677441ced4", - "reference": "de92f154eefe322fc1b1b2a52cce46677441ced4", + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/ea1f112f4dc9a9824e77b788019e2d53325d823c", + "reference": "ea1f112f4dc9a9824e77b788019e2d53325d823c", "shasum": "" }, "require": { - "bower-asset/inputmask": "~3.2.2 | ~3.3.5", - "bower-asset/jquery": "3.6.*@stable | 3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", - "bower-asset/punycode": "1.3.*", + "bower-asset/inputmask": "^5.0.8 ", + "bower-asset/jquery": "3.7.*@stable | 3.6.*@stable | 3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", + "bower-asset/punycode": "^2.2", "bower-asset/yii2-pjax": "~2.0.1", "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0", "ext-ctype": "*", "ext-mbstring": "*", - "ezyang/htmlpurifier": "^4.6", + "ezyang/htmlpurifier": "^4.17", "lib-pcre": "*", "paragonie/random_compat": ">=1", - "php": ">=5.4.0", + "php": ">=7.3.0", "yiisoft/yii2-composer": "~2.0.4" }, "bin": [ @@ -7330,7 +8688,7 @@ "type": "tidelift" } ], - "time": "2023-05-24T19:04:02+00:00" + "time": "2024-07-18T19:50:00+00:00" }, { "name": "yiisoft/yii2-composer", @@ -7410,16 +8768,16 @@ }, { "name": "yiisoft/yii2-debug", - "version": "2.1.22", + "version": "2.1.25", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-debug.git", - "reference": "c0fa388c56b64edfb92987fdcc37d7a0243170d7" + "reference": "4d011b9bfc83bde71cde43c9f6837f5a74685ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/c0fa388c56b64edfb92987fdcc37d7a0243170d7", - "reference": "c0fa388c56b64edfb92987fdcc37d7a0243170d7", + "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/4d011b9bfc83bde71cde43c9f6837f5a74685ea7", + "reference": "4d011b9bfc83bde71cde43c9f6837f5a74685ea7", "shasum": "" }, "require": { @@ -7496,25 +8854,25 @@ "type": "tidelift" } ], - "time": "2022-11-18T17:29:27+00:00" + "time": "2023-09-26T15:50:00+00:00" }, { "name": "yiisoft/yii2-queue", - "version": "2.3.6", + "version": "2.3.7", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-queue.git", - "reference": "5c14c3f6e83b2e2d150a969dc6eda4e083b73956" + "reference": "dbc9d4a7b2a6995cd19c3e334227482ef55e559b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-queue/zipball/5c14c3f6e83b2e2d150a969dc6eda4e083b73956", - "reference": "5c14c3f6e83b2e2d150a969dc6eda4e083b73956", + "url": "https://api.github.com/repos/yiisoft/yii2-queue/zipball/dbc9d4a7b2a6995cd19c3e334227482ef55e559b", + "reference": "dbc9d4a7b2a6995cd19c3e334227482ef55e559b", "shasum": "" }, "require": { "php": ">=5.5.0", - "symfony/process": "^3.3||^4.0||^5.0||^6.0", + "symfony/process": "^3.3||^4.0||^5.0||^6.0||^7.0", "yiisoft/yii2": "~2.0.14" }, "require-dev": { @@ -7613,35 +8971,45 @@ "type": "tidelift" } ], - "time": "2023-10-03T16:02:00+00:00" + "time": "2024-04-29T09:40:52+00:00" }, { "name": "yiisoft/yii2-symfonymailer", - "version": "2.0.4", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-symfonymailer.git", - "reference": "82f5902551a160633c4734b5096977ce76a809d9" + "reference": "21f407239c51fc6d50d369e4469d006afa8c9b2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-symfonymailer/zipball/82f5902551a160633c4734b5096977ce76a809d9", - "reference": "82f5902551a160633c4734b5096977ce76a809d9", + "url": "https://api.github.com/repos/yiisoft/yii2-symfonymailer/zipball/21f407239c51fc6d50d369e4469d006afa8c9b2c", + "reference": "21f407239c51fc6d50d369e4469d006afa8c9b2c", "shasum": "" }, "require": { - "php": ">=7.4.0", - "symfony/mailer": ">=5.4.0", + "php": ">=8.1", + "psr/event-dispatcher": "1.0.0", + "symfony/mailer": "^6.4 || ^7.0", + "symfony/mime": "^6.4 || ^7.0", "yiisoft/yii2": ">=2.0.4" }, "require-dev": { - "phpunit/phpunit": "9.5.10" + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "roave/infection-static-analysis-plugin": "^1.34", + "symplify/easy-coding-standard": "^12.1", + "vimeo/psalm": "^5.20" + }, + "suggest": { + "yiisoft/yii2-psr-log-source": "Allows routing transport logs to your Yii2 logger" }, "type": "yii2-extension", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" - } + "dev-master": "3.0.x-dev" + }, + "sort-packages": true }, "autoload": { "psr-4": { @@ -7688,7 +9056,7 @@ "type": "tidelift" } ], - "time": "2022-09-04T10:48:21+00:00" + "time": "2024-01-29T14:13:45+00:00" } ], "packages-dev": [], diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..7ef7b995 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,48 @@ +# Documentation for Translations Plugin + +Welcome to the documentation for the Translations plugin for Craft CMS. This directory contains all the necessary guides, references, and resources to help you effectively use and integrate the Translations plugin into your Craft CMS projects. + +## 📚 Contents + +- **User Guide:** Step-by-step instructions on how to install, configure, and use the Translations plugin. +- **FAQs:** Frequently asked questions and troubleshooting tips. +- **Changelog:** A log of all the changes, updates, and improvements made to the plugin over time. +- **Contribution Guide:** Guidelines for contributing to the plugin's development and documentation. + +## 🛠️ Getting Started + +To get started with the Translations plugin, please refer to the [User Guide](./user-guide.md) for detailed setup and configuration instructions. + +## 🔌 Installation + +For installation instructions, please refer to the [README](../README.md). + +## 🔄 Version Compatibility + +- **Craft CMS:** Version 5.0.0 or later +- **PHP:** Version 8.2 or higher + +## 📚 FAQs + +For frequently asked questions and troubleshooting tips, please refer to the [FAQs](./faq.md). + +## 📜 Changelog + +For a detailed list of changes, updates, and improvements made to the plugin over time, please refer to the [Changelog](../changelog.md). + +## 🤝 Contributing + +We welcome contributions to improve the documentation and the plugin itself. Please refer to the [Contribution Guide](./contribution-guide.md) for more information on how to get involved. + +## 📞 Support + +If you have any questions or need further assistance, please contact our support team at support@acclaro.com. + + +## 🗣️ Feedback + +We value your feedback! Please report any issues or suggestions via our [issue tracker](https://github.com/AcclaroInc/craft-translations/issues). + +## 📄 License + +This documentation is licensed under the [Craft License](../LICENSE.md). For more information, please refer to the license file. \ No newline at end of file diff --git a/docs/contribution-guide.md b/docs/contribution-guide.md new file mode 100644 index 00000000..ce51b81c --- /dev/null +++ b/docs/contribution-guide.md @@ -0,0 +1,69 @@ +# Contributing to the Translations Plugin + +Thank you for considering contributing to the Translations plugin for Craft CMS! We welcome contributions that help improve the plugin, whether it's through bug reports, feature suggestions, code contributions, or documentation improvements. + +## How to Contribute + +### Reporting Bugs + +If you encounter a bug, please open an issue on our [GitHub Issues page](https://github.com/AcclaroInc/craft-translations/issues). Include as much detail as possible to help us understand and reproduce the issue: +- Craft CMS version +- PHP version +- Translations plugin version +- Steps to reproduce the issue +- Any relevant error messages or screenshots + +### Suggesting Features + +We welcome feature suggestions! If you have an idea for a new feature, please open an issue with the following information: +- A clear and descriptive title +- A detailed description of the feature and its benefits +- Any examples or mockups that illustrate the feature + +### Code Contributions + +If you'd like to contribute code, please follow these steps: + +1. **Fork the Repository:** Create a personal fork of the repository on GitHub. + +2. **Clone Your Fork:** Clone your fork to your local machine. + + ```bash + git clone https://github.com/your-username/craft-translations.git + ``` + +3. **Create a Branch:** Create a new branch for your feature or bug fix. + + ```bash + git checkout -b feature/your-feature-name + ``` + +4. **Make Changes:** Implement your changes, ensuring your code adheres to the project's coding standards. + +5. **Test Your Changes:** Run tests to ensure your changes don't break existing functionality. + +6. **Commit Your Changes:** Write clear and concise commit messages. + + ```bash + git commit -m "Add feature: your feature description" + ``` + +7. **Push to Your Fork:** Push your changes to your fork on GitHub. + + ```bash + git push origin feature/your-feature-name + ``` + +8. **Open a Pull Request:** Go to the original repository and open a pull request. Provide a clear description of your changes and reference any related issues. + +### Documentation Contributions + +Improving documentation is a valuable way to contribute. If you find areas that need clarification or expansion, feel free to submit changes. Follow the same process as code contributions, but focus on the `docs/` directory. + +## License + +By contributing, you agree that your contributions will be licensed under the same license as the project. + +--- + +Thank you for your interest in contributing to the Translations plugin! Your efforts help make the plugin better for everyone. \ No newline at end of file diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 00000000..1f4301dc --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,90 @@ +# Frequently Asked Questions + +## Plugin Support + +
What fields, elements, and plugins are supported? + +### Craft CMS Elements +- [Categories](https://craftcms.com/docs/5.x/reference/element-types/categories.html) +- [Entries](https://craftcms.com/docs/5.x/reference/element-types/entries.html) +- [Assets](https://craftcms.com/docs/5.x/reference/element-types/assets.html) +- [Globals](https://craftcms.com/docs/5.x/reference/element-types/globals.html) + +### Craft CMS Fields +- [Assets](https://craftcms.com/docs/5.x/reference/field-types/assets.html) +- [Categories](https://craftcms.com/docs/5.x/reference/field-types/categories.html) +- [Checkboxes](https://craftcms.com/docs/5.x/reference/field-types/checkboxes.html) +- [Dropdown](https://craftcms.com/docs/5.x/reference/field-types/dropdown.html) +- [Entries](https://craftcms.com/docs/5.x/reference/field-types/entries.html) +- [Matrix](https://craftcms.com/docs/5.x/reference/field-types/matrix.html) +- [Multi-select](https://craftcms.com/docs/5.x/reference/field-types/multi-select.html) +- [Number](https://craftcms.com/docs/5.x/reference/field-types/number.html) +- [Plain Text](https://craftcms.com/docs/5.x/reference/field-types/plain-text.html) +- [Radio Buttons](https://craftcms.com/docs/5.x/reference/field-types/radio-buttons.html) +- [Table](https://craftcms.com/docs/5.x/reference/field-types/table.html) +- [Tags](https://craftcms.com/docs/5.x/reference/element-types/tags.html) + +### 3rd Party Plugins +- [Craft Commerce](https://plugins.craftcms.com/commerce?craft5) + - Commerce Products + - Commerce Variants +- [CKEditor](https://plugins.craftcms.com/ckeditor?craft5) +- [SEOmatic](https://plugins.craftcms.com/seomatic?craft5) +- [Ether SEO](https://plugins.craftcms.com/seo?craft5) +- [Neo](https://plugins.craftcms.com/neo?craft5) +- [Hyper](https://plugins.craftcms.com/hyper?craft5) +- [LinkIt](https://plugins.craftcms.com/linkit?craft5) +- [Visy](https://plugins.craftcms.com/vizy?craft5) +- [Navigation](https://plugins.craftcms.com/navigation?craft5) +- [Super Dynamic Fields](https://plugins.craftcms.com/super-dynamic-fields?craft5) + - Dropdown + - Radio Buttons + - Checkboxes + - Multi-select +- [Super Table](https://plugins.craftcms.com/super-table?craft5) + +*Need support for a specific plugin? [Open an issue](https://github.com/AcclaroInc/craft-translations/issues/new).* + +
+ +## Translation Services + +
Does the purchase of the plugin include Translation Services? + +The purchase of the Translations plugin is for the software only. For Acclaro's Professional Translation Services, please contact sales@acclaro.com. + +
+ +## Best Practices + +
Should I use a staging site to manage my translations? + +Yes, we recommend testing the Translation plugin and localization workflow on a staging site to ensure everything works as expected before applying changes to your live production site. + +
+ +## Technical Issues + +
How do I display translated values for dropdown, multi-select, and radio fields? + +To display translated string values for these fields, use the Twig `|t` filter with the 'translations' category in your templates. For example: `'some string'|t('translations')`. + +
+ +
My site has translatable fields within "non-translatable" blocks such as Matrix, Neo, Super Table. How can I fix issues with content resetting? + +Ensure that field propagation settings store blocks on a per-site basis and that all fields requiring translation have their translatable settings enabled, including nested fields. Create new test orders and review the translations to see if the issue is resolved. For more details, refer to the [Craft CMS issue](https://github.com/craftcms/cms/issues/5503) and [Neo issue](https://github.com/spicywebau/craft-neo/issues/355). + +
+ +## Order Processing + +
I'm not getting redirected from the "Thank You" page after submitting my order. What can I do? + +Order processing time depends on the number of Entries and target Sites. For larger orders, Craft's background task manager is used. Check the job status by clicking on the queue manager if processing takes longer than expected. + +
+ +--- + +For further assistance, please contact our support team at support@acclaro.com. diff --git a/docs/user-guide.md b/docs/user-guide.md new file mode 100644 index 00000000..76dc7ee7 --- /dev/null +++ b/docs/user-guide.md @@ -0,0 +1,75 @@ +# User Guide for Translations Plugin + +Welcome to the Translations Plugin User Guide. This guide will walk you through the essential steps to set up and use the Translations plugin for Craft CMS effectively. + +## 🔔 Pre-Installation Reminder + +Before installing the plugin, back up your site. We recommend testing multisite settings and configuration changes on a staging site before implementing them in a production environment. + +## 1. System Requirements + +Ensure your site meets the following requirements: +- **Craft CMS:** Version 5.0.0 or later +- **PHP:** Version 8.2 or higher +- **PHP DOM Extension:** Required +- **Craft Multi-site Configuration:** Required +- **Section Propagation:** Set to "Propagate entries across all enabled sites" +- **Field Translation Method:** Recommended to "Translate for each language" +- **Nested Blocks:** Use "Only save blocks to the site they were created in" for better translation management + +## 2. Setting Up Translators + +### Local Export/Import +- **Purpose:** Allows you to export content as XML, JSON, or CSV files for manual translation. +- **Setup:** A default Export/Import translator is created upon installation. + +### Acclaro Translation Services +- **Purpose:** Provides professional translation services through Acclaro’s human translators. +- **Setup:** Requires a MyAcclaro API token. [Register here](https://info.acclaro.com/my-acclaro-registration) to obtain a token. + +### Google MT Translator +- **Purpose:** Enables machine translation using Google's translation services. +- **Setup:** Requires a Google API Token. [Learn how to obtain a Google API Token](https://cloud.google.com/translate/docs/setup). + +To create a new translator, navigate to "Translators" in the sidebar and click "New translator". For Google MT, select "Google MT" as your service, enter your Google API Token, and authenticate. + +## 3. Creating a Translation Order + +1. **Navigate to Orders:** Click "Orders" in the sidebar, then "New order". +2. **Order Details:** + - Add a name for the order. + - Select the content to translate. + - Choose a source site and target sites (languages). + - Select a translator. +3. **Review & Submit:** Ensure all details are correct before submitting the order. + +## 4. Publishing Translations + +- **Individual Publishing:** Click on the "Target Site(s)" link for each language to review and publish drafts. +- **Bulk Publishing:** Select entries and click "Apply Translations Drafts" to publish multiple entries at once. + +## 5. Translation Readiness Check + +Before starting translation projects, perform the following checks: +- **Database Backup:** Ensure you have a backup. +- **Plugin Installation:** Install on a staging site first to check for errors. +- **Settings Verification:** Confirm field and section translation settings are correct. +- **3rd Party Plugin Support:** Verify compatibility with installed plugins. + +## 6. Local Export/Import Workflow + +- **Export Content:** Navigate to your order dashboard, select an order, and click "Export" to download content. +- **Import Translations:** Once translated, upload the XML files via the "Import" button. + +## 7. Acclaro Sync Workflow + +- **Automatic Handling:** The Acclaro API manages exporting and importing translations. +- **Sync Translations:** Click "Sync" on the order dashboard to retrieve translated content. The status will update to "Ready to Publish" once complete. + +## Additional Information + +For more detailed setup instructions, recommended workflows, and FAQs, please refer to the [User Guide](./user-guide.md). + +--- + +For further assistance, please contact our support team at support@acclaro.com. \ No newline at end of file diff --git a/resources/img/image.jpg b/resources/img/image.jpg index e28016f5..ef35cac0 100644 Binary files a/resources/img/image.jpg and b/resources/img/image.jpg differ diff --git a/resources/video/demo.mp4 b/resources/video/demo.mp4 new file mode 100644 index 00000000..94dc8a39 Binary files /dev/null and b/resources/video/demo.mp4 differ diff --git a/src/Constants.php b/src/Constants.php index 2f6b40ef..cd807751 100644 --- a/src/Constants.php +++ b/src/Constants.php @@ -66,6 +66,7 @@ class Constants const URL_TRANSLATIONS = 'translations/'; const URL_TRANSLATOR = 'translations/translators'; const URL_STATIC_TRANSLATIONS = 'translations/static-translations'; + const URL_SERVICES = 'translations/services'; const URL_SETTINGS = 'translations/settings'; const URL_ENTRIES = 'entries/'; const URL_BASE_ASSETS = '@acclaro/translations/assetbundles/src'; @@ -322,4 +323,89 @@ class Constants 'craft\fields\Users', 'craft\fields\Money', ]; + + const CTA_PROFESSIONAL_TRANSLATION = "https://www.acclaro.com/solutions/global-marketing/website-localization-services"; + const CTA_QUALITY_REVIEW = "https://www.acclaro.com/solutions/language-quality"; + const CTA_TECHNICAL_SUPPORT = "https://info.acclaro.com/craftcms-technical-support"; + const CTA_AI_ML_TRANSLATION = "#"; + + const SERVICES_CONTENT = [ + [ + 'title' => 'Professional Translation', + 'description' => 'Elevate your content with our professional human translation services.', + 'message' => 'Our team of expert linguists ensures your message resonates in any language. Perfect for critical content where accuracy and cultural relevance are paramount.', + 'ctaText' => 'Get a Quote', + 'ctaUrl' => self::CTA_PROFESSIONAL_TRANSLATION, + 'keyBenefits' => [ + 'Industry-specific expertise', + 'Cultural nuance and context preservation', + 'Consistent brand voice across languages', + ], + ], + [ + 'title' => 'Quality Review', + 'description' => 'Ensure flawless translations with our comprehensive quality review.', + 'message' => 'Our rigorous quality review process guarantees that your translations are accurate, polished, and ready for your global audience.', + 'ctaText' => 'Learn More', + 'ctaUrl' => self::CTA_QUALITY_REVIEW, + 'keyBenefits' => [ + 'Catch and correct linguistic errors', + 'Enhance overall translation quality', + 'Maintain consistency across all content', + ], + ], + [ + 'title' => 'Technical Support', + 'description' => 'Get priority support for your Craft Translations installation.', + 'message' => 'Maximize your efficiency with our dedicated technical support. Our team ensures your translation workflow runs smoothly, allowing you to focus on what matters most.', + 'ctaText' => 'Request Support', + 'ctaUrl' => self::CTA_TECHNICAL_SUPPORT, + 'keyBenefits' => [ + 'Direct access to our plugin experts', + 'Faster resolution of technical issues', + 'Personalized guidance for optimal plugin use', + ], + ], + [ + 'title' => 'AI/Machine Translation', + 'description' => 'Leverage cutting-edge AI for fast, cost-effective translations.', + 'message' => 'Ideal for high-volume, time-sensitive projects. Our AI translation perfectly balances speed, cost, and quality for appropriate content types.', + 'ctaText' => 'Coming Soon', + 'ctaUrl' => self::CTA_AI_ML_TRANSLATION, + 'keyBenefits' => [ + 'High-speed translation for large volumes', + 'Cost-effective solution for suitable content types', + 'Continuous improvement with machine learning', + ], + ], + ]; + + // Dashboard will be array of ads to show more ads if needed in future + const ADS_CONTENT = [ + "dashboard" => [ + [ + "heading" => "AI/Machine Translation", + "content" => "Translate more content faster with AI.", + "linkText" => "Try it now", + "link" => self::CTA_AI_ML_TRANSLATION, + ] + ], + "sidebar" => [ + "create" => [ + "heading" => "Professional Translation", + "content" => "Get expert human translation for critical content.", + "linkText" => "Learn more", + "link" => self::CTA_PROFESSIONAL_TRANSLATION, + ], + "edit" => [ + "heading" => "Quality Review", + "content" => "Ensure accuracy with our professional quality review.", + "linkText" => "Get started", + "link" => self::CTA_QUALITY_REVIEW, + ], + ], + ]; + + // N8N Endpoint + const API_ENDPOINT_N8N = 'https://automate.acclaro-apps.com/webhook/5f5cd671-3128-402a-b32f-0d7f8140d484'; } diff --git a/src/Translations.php b/src/Translations.php index 097d9533..2a32fba8 100644 --- a/src/Translations.php +++ b/src/Translations.php @@ -45,6 +45,7 @@ use acclaro\translations\assetbundles\NavigationAssets; use acclaro\translations\base\AlertsTrait; use acclaro\translations\services\job\DeleteDrafts; +use acclaro\translations\services\job\SyncDataToHubSpotJob; class Translations extends Plugin { @@ -178,6 +179,8 @@ function (PluginEvent $event) { 'translations/settings' ))->send(); } + + Craft::$app->queue->push(new SyncDataToHubSpotJob()); } } ); @@ -245,6 +248,12 @@ public function getCpNavItem(): ?array 'url' => Constants::URL_STATIC_TRANSLATIONS, ]; } + if ($currentUser->can('translations:services')) { + $subNavs['services'] = [ + 'label' => 'Services', + 'url' => Constants::URL_SERVICES, + ]; + } if ($currentUser->can('translations:settings')) { $subNavs['settings'] = [ @@ -363,6 +372,7 @@ private function _registerCpRoutes() 'translations/translators/new' => 'translations/translator/detail', 'translations/translators/detail/' => 'translations/translator/detail', 'translations/translators//programs' => 'translations/translator/program-list', + 'translations/translators/unsubscribe' => 'translations/translator/unsubscribe', // Order Controller 'translations/orders' => 'translations/order/order-index', @@ -382,6 +392,9 @@ private function _registerCpRoutes() 'translations/static-translations/export-file' => 'translations/static-translations/export-file', 'translations/static-translations/import' => 'translations/static-translations/import', + // Services Controller + 'translations/services' => 'translations/services/index', + // Asset, Commerce, Global-set, Node Controllers 'translations/assets//drafts/' => 'translations/asset/edit-draft', 'translations/globals//drafts/' => 'translations/global-set/edit-draft', @@ -787,12 +800,15 @@ protected function customAdminCpPermissions(): array ] ] ], + 'translations:services' => [ + 'label' => Craft::t('translations', 'View Services'), + ], 'translations:orders' => [ 'label' => Craft::t('translations', 'View Orders'), 'nested' => [ 'translations:orders:create' => [ 'label' => Craft::t('translations', 'Create Orders'), - ], + ], 'translations:orders:edit' => [ 'label' => Craft::t('translations', 'Edit Orders'), ], diff --git a/src/assetbundles/ServicesAssets.php b/src/assetbundles/ServicesAssets.php new file mode 100644 index 00000000..50a173f9 --- /dev/null +++ b/src/assetbundles/ServicesAssets.php @@ -0,0 +1,33 @@ +sourcePath = Constants::URL_BASE_ASSETS; + + $this->depends = [ + CpAsset::class, + ]; + + $this->css = [ + 'css/services.css', + ]; + + parent::init(); + } +} diff --git a/src/assetbundles/src/css/Translations.css b/src/assetbundles/src/css/Translations.css index c42f64ca..1f15ce8c 100644 --- a/src/assetbundles/src/css/Translations.css +++ b/src/assetbundles/src/css/Translations.css @@ -170,6 +170,24 @@ margin-right: 10%; } +.ad-container { + &.sidebar-ad { + .field { + padding: 1rem; + } + } + .field { + padding-top: 1rem; + .heading { + font-size: medium; + } + } + .input.ltr { + font: caption; + padding-block: 10px 10px; + } +} + .translations-order-detail-summary h2 { font-size: 1.5em; margin-top: 0; @@ -633,6 +651,10 @@ body.ltr .widget[data-type="acclaro\\translations\\widgets\\NewAndModifiedEntrie margin: 10px 0 14px; } +#translations-dashboard > .item > .widget { + margin-top: 1rem; +} + .btngroup-container { align-content: flex-end; flex-direction: column; diff --git a/src/assetbundles/src/css/services.css b/src/assetbundles/src/css/services.css new file mode 100644 index 00000000..94306d91 --- /dev/null +++ b/src/assetbundles/src/css/services.css @@ -0,0 +1,80 @@ +.card-box { + display: flex; + justify-content: center; + align-items: flex-start; + min-height: 80vh; + padding: 20px; +} + +.services-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 30px; + max-width: 1200px; + width: 100%; +} + +.services-card { + padding: 20px; + margin-bottom: 20px; + border: 1px solid #ddd; + border-radius: 15px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + background-color: #fff; + text-align: center; + transition: transform 0.3s; + min-height: 257px; + div.not-allowed { + cursor: not-allowed; + } +} + +.services-title { + color: #0077cc; + font-size: 1.25em; + margin-bottom: 30px; +} + +.services-description { + font-size: 1.25em; + margin-bottom: 15px; +} + +.services-message{ + font-size: 1em; + margin-bottom: 15px; +} + +.cta-button { + display: inline-block; + padding: 10px 20px; + margin-top: 15px; + background-color: #0077cc; + color: #fff; + text-decoration: none; + border-radius: 20px; + transition: background-color 0.3s; + &.disabled { + background-color: gray; + } +} + +.services-benefit { + list-style: none; + padding-left: 3%; + margin-top: 10px; + text-align: left; +} + +.list { + margin: 5px; + color: #555; + display: flex; + align-items: center; +} + +.marker { + color: #0077cc; + font-size: 1.2em; + margin-right: 8px; +} \ No newline at end of file diff --git a/src/assetbundles/src/js/AddEntriesToTranslationOrder.js b/src/assetbundles/src/js/AddEntriesToTranslationOrder.js index 0e9a1bfe..fc4b4a8c 100644 --- a/src/assetbundles/src/js/AddEntriesToTranslationOrder.js +++ b/src/assetbundles/src/js/AddEntriesToTranslationOrder.js @@ -277,7 +277,7 @@ Craft.Translations.AddEntriesToTranslationOrder = { this.$menubtn.menubtn(); - $(document).on('click', '.elements .checkbox, .elements .selectallcontainer .btn', function() { + $(document).on('click', '.elements .checkbox, .elements .selectallcontainer .btn,.elements table.data tbody tr, .elements ul li', function() { setTimeout($.proxy(self.updateSelectedEntries, self), 100); }); diff --git a/src/assetbundles/src/js/AddTranslationsToCommerce.js b/src/assetbundles/src/js/AddTranslationsToCommerce.js index 4ac19480..ad95daab 100644 --- a/src/assetbundles/src/js/AddTranslationsToCommerce.js +++ b/src/assetbundles/src/js/AddTranslationsToCommerce.js @@ -203,7 +203,7 @@ $form.submit(); }); - $(document).on('click', '.elements .checkbox, .elements .selectallcontainer .btn', function() { + $(document).on('click', '.elements .checkbox, .elements .selectallcontainer .btn, .elements table.data tbody tr, .elements ul li', function() { setTimeout($.proxy(self.updateSelectedEntries, self), 100); }); diff --git a/src/assetbundles/src/js/AssetsTranslations.js b/src/assetbundles/src/js/AssetsTranslations.js index 4315e706..42b4f34d 100644 --- a/src/assetbundles/src/js/AssetsTranslations.js +++ b/src/assetbundles/src/js/AssetsTranslations.js @@ -227,7 +227,7 @@ Craft.Translations.AssetsTranslations = { var self = this; - $(document).on('click', '.elements .checkbox, .elements .selectallcontainer .btn', function() { + $(document).on('click', '.elements .checkbox, .elements .selectallcontainer .btn, .elements table.data tbody tr, .elements ul li', function() { setTimeout($.proxy(self.updateSelectedAssets(), self), 100); }); diff --git a/src/assetbundles/src/js/CategoryTranslations.js b/src/assetbundles/src/js/CategoryTranslations.js index 5d244007..312253ec 100644 --- a/src/assetbundles/src/js/CategoryTranslations.js +++ b/src/assetbundles/src/js/CategoryTranslations.js @@ -233,7 +233,7 @@ Craft.Translations.CategoryTranslations = { var self = this; - $(document).on('click', '.elements .checkbox, .elements .selectallcontainer .btn', function() { + $(document).on('click', '.elements .checkbox, .elements .selectallcontainer .btn, .elements table.data tbody tr, .elements ul li', function() { setTimeout($.proxy(self.updateSelectedCategories(), self), 100); }); diff --git a/src/assetbundles/src/js/OrderDetails.js b/src/assetbundles/src/js/OrderDetails.js index b453bd93..5b1a9c03 100644 --- a/src/assetbundles/src/js/OrderDetails.js +++ b/src/assetbundles/src/js/OrderDetails.js @@ -405,7 +405,6 @@ let $source = $("#sourceSite").val() == '' ? 0 : 1; if (($all-$source) == $checked) { $(':checkbox[name=targetSites]').prop('checked', true); - $(':checkbox[name="targetSites[]"]').prop('disabled', true); } } } @@ -548,15 +547,17 @@ $(':checkbox[name="targetSites[]"], :checkbox[name="targetSites"]').on('change', function() { if ($(this).attr('name') == "targetSites") { toggleSelections($(this).is(':checked')); + $(':checkbox[name="targetSites[]"]').prop('disabled', false); } else { - var $all = $(':checkbox[name="targetSites[]"]'); + var $all = $(':checkbox[name="targetSites[]"]:not(:disabled)'); var $checkboxes = $(':checkbox[name="targetSites[]"]:checked:not(:disabled)'); - var $sourceSite = $("#sourceSite").val(); - $sourceSite = $sourceSite == '' ? 0 : 1; + let selectedtarget = $checkboxes.length; + let allEnabledTarget = $all.length; - if (($all.length - $sourceSite) == $checkboxes.length) { + if (allEnabledTarget == selectedtarget) { $(':checkbox[name=targetSites]').prop('checked', true); - $(':checkbox[name="targetSites[]"]').prop('disabled', true); + } else { + $(':checkbox[name=targetSites]').prop('checked', false); } } diff --git a/src/controllers/OrderController.php b/src/controllers/OrderController.php index 98e8c380..e7897fc2 100644 --- a/src/controllers/OrderController.php +++ b/src/controllers/OrderController.php @@ -404,6 +404,10 @@ public function actionOrderDetail(array $variables = array()) $variables['order'] = $order; + // Ads + $adContext = $order->isPending() ? "create" : "edit"; + $variables['ads'] = Translations::$plugin->adsRepository->sidebar($adContext); + $this->renderTemplate('translations/orders/_detail', $variables); } @@ -460,17 +464,17 @@ public function actionSaveOrder() if ($targetSites === '*') { $targetSites = Craft::$app->getSites()->getAllSiteIds(); - - if (($key = array_search($sourceSite, $targetSites)) !== false) { - unset($targetSites[$key]); - $targetSites = array_values($targetSites); - } } if (! is_array($targetSites)) { $targetSites = explode(",", str_replace(", ", ",", $targetSites)); } + if (($key = array_search($sourceSite, $targetSites)) !== false) { + unset($targetSites[$key]); + $targetSites = array_values($targetSites); + } + $elementIds = Craft::$app->getRequest()->getBodyParam('elements', []); $requestedDueDate = Craft::$app->getRequest()->getParam('requestedDueDate'); diff --git a/src/controllers/ServicesController.php b/src/controllers/ServicesController.php new file mode 100644 index 00000000..c717ef91 --- /dev/null +++ b/src/controllers/ServicesController.php @@ -0,0 +1,29 @@ +requireLogin(); + $variables = array(); + $servicesData = Constants::SERVICES_CONTENT; + + $variables['servicesData'] = $servicesData; + $variables['selectedSubnavItem'] = 'services'; + + return $this->renderTemplate('translations/services/_index', $variables); + } +} \ No newline at end of file diff --git a/src/controllers/TranslatorController.php b/src/controllers/TranslatorController.php index 7dc7715f..0b2fd8f4 100644 --- a/src/controllers/TranslatorController.php +++ b/src/controllers/TranslatorController.php @@ -131,8 +131,9 @@ public function actionDetail(array $variables = array()) $variables['selectedSubnavItem'] = 'translators'; $variables['translatorId'] = isset($variables['translatorId']) ? $variables['translatorId'] : null; + $isNew = !isset($variables['translatorId']); - if ($variables['translatorId']) { + if (!$isNew) { $variables['translator'] = Translations::$plugin->translatorRepository->getTranslatorById($variables['translatorId']); if (!$variables['translator']) { @@ -145,6 +146,10 @@ public function actionDetail(array $variables = array()) $variables['translationServices'] = Translations::$plugin->translatorRepository->getTranslationServices(); $variables['labels'] = json_encode(Constants::TRANSLATOR_LABELS); + // Ads + $adContext = $isNew ? "create" : "edit"; + $variables['ads'] = Translations::$plugin->adsRepository->sidebar($adContext); + $this->renderTemplate('translations/translators/_detail', $variables); } @@ -197,7 +202,7 @@ public function actionProgramList($translatorId) $translatorSettings = json_decode($translator->settings, true); - $addToProgramAllowed = (bool) $translatorSettings['addToProgram']; + $addToProgramAllowed = isset($translatorSettings['addToProgram']) ? $translatorSettings['addToProgram'] : false; $programOptions = []; if($addToProgramAllowed) { diff --git a/src/controllers/WidgetController.php b/src/controllers/WidgetController.php index 6393001a..ce29cfbc 100644 --- a/src/controllers/WidgetController.php +++ b/src/controllers/WidgetController.php @@ -16,7 +16,7 @@ use craft\elements\Entry; use craft\helpers\UrlHelper; use craft\helpers\ArrayHelper; -use craft\base\WidgetInterface; +use acclaro\translations\widgets\BaseWidget; use craft\models\Updates as UpdatesModel; use acclaro\translations\records\FileRecord; @@ -24,7 +24,6 @@ use acclaro\translations\assetbundles\DashboardAssets; use acclaro\translations\Constants; use acclaro\translations\services\repository\WidgetRepository; - use yii\web\BadRequestHttpException; /** @@ -83,8 +82,8 @@ public function actionIndex() $isSelectableWidget = false; foreach ($widgetTypes as $widgetType) { - /** @var WidgetInterface $widgetType */ - if (!$widgetType::isSelectable()) { + /** @var BaseWidget $widgetType */ + if (!$widgetType::isSelectable() || !$widgetType::isLive()) { continue; } $view->startJsBuffer(); @@ -111,7 +110,7 @@ public function actionIndex() // Assemble the list of existing widgets $variables['widgets'] = []; - /** @var WidgetInterface[] $widgets */ + /** @var BaseWidget[] $widgets */ $widgets = $this->service->getAllWidgets(); $allWidgetJs = ''; @@ -119,7 +118,7 @@ public function actionIndex() $view->startJsBuffer(); $info = $this->service->getWidgetInfo($widget); $widgetJs = $view->clearJsBuffer(false); - if ($info === false) { + if ($info === false || !$widget::isLive()) { continue; } // If this widget type didn't come back in our getAllWidgetTypes() call, add it now @@ -584,7 +583,7 @@ public function actionGetRecentEntries($limit = 0) * @param \Craft\base\Widget $widget * @return Response */ - private function _saveAndReturnWidget(WidgetInterface $widget): Response + private function _saveAndReturnWidget(BaseWidget $widget): Response { if (! $this->service->saveWidget($widget)) { return $this->asFailure(data: [ diff --git a/src/services/App.php b/src/services/App.php index 2c11030d..88ef5725 100644 --- a/src/services/App.php +++ b/src/services/App.php @@ -116,6 +116,11 @@ class App extends Component */ public $userRepository; + /** + * @var repository\AdsRepository + */ + public $adsRepository; + /** * @var repository\WidgetRepository */ @@ -208,6 +213,7 @@ public function init(): void $this->orderEdit = new OrderEdit(); $this->logHelper = new LogHelper(); $this->activityLogRepository = new repository\ActivityLogRepository(); + $this->adsRepository = new repository\AdsRepository(); $this->navigationDraftRepository = new repository\NavigationDraftRepository(); } } diff --git a/src/services/ElementTranslator.php b/src/services/ElementTranslator.php index f02a7562..2d257d5a 100644 --- a/src/services/ElementTranslator.php +++ b/src/services/ElementTranslator.php @@ -40,6 +40,7 @@ public function toTranslationSource(Element $element, $sourceSite = null, $order foreach ($element->getFieldLayout()->getCustomFields() as $layoutField) { $field = Craft::$app->fields->getFieldById($layoutField->id); + $field->handle = $layoutField->handle; $fieldSource = $this->fieldToTranslationSource($element, $field, $sourceSite); $source = array_merge($source, $fieldSource); @@ -120,7 +121,6 @@ public function getTargetDataFromXml($xml, $nonNested = false) $contents = $dom->getElementsByTagName('content'); - foreach ($contents as $content) { $name = (string) $content->getAttribute('resname'); $value = (string) $content->nodeValue; @@ -163,7 +163,7 @@ public function toPostArrayFromTranslationTarget(Element $element, $sourceSite, foreach($element->getFieldLayout()->getCustomFields() as $key => $layoutField) { $field = Craft::$app->fields->getFieldById($layoutField->id); - $fieldHandle = $field->handle; + $fieldHandle = $field->handle = $layoutField->handle; $fieldType = $field; @@ -254,6 +254,7 @@ public function getWordCount(Element $element) } foreach($element->getFieldLayout()->getCustomFields() as $layoutField) { $field = Craft::$app->fields->getFieldById($layoutField->id); + $field->handle = $layoutField->handle; $wordCount += $this->getFieldWordCount($element, $field); } diff --git a/src/services/job/SyncDataToHubSpotJob.php b/src/services/job/SyncDataToHubSpotJob.php new file mode 100644 index 00000000..802cbe50 --- /dev/null +++ b/src/services/job/SyncDataToHubSpotJob.php @@ -0,0 +1,62 @@ +getUser()->getIdentity(); + + if ($currentUser) { + $email = $currentUser->email; + $firstName = $currentUser->firstName; + $lastName = $currentUser->lastName; + + $siteName = Craft::$app->sites->getPrimarySite()->getName(); + $baseUrl = Craft::$app->sites->getPrimarySite()->getBaseUrl(); + + $data = [ + 'email' => $email, + 'firstName' => $firstName, + 'lastName' => $lastName, + 'companyName' => $siteName, + 'baseUrl' => $baseUrl + ]; + + $apiEndpointN8N = Constants::API_ENDPOINT_N8N; + + // Initialize the Guzzle HTTP client + $client = new Client(); + + try { + // Make the POST request + $response = $client->post($apiEndpointN8N, [ + 'headers' => [ + 'Content-Type' => 'application/json', + ], + 'json' => $data, + ]); + + // Check if the request was successful + if ($response->getStatusCode() === 200) { + $responseData = json_decode($response->getBody()->getContents(), true); + Translations::$plugin->logHelper->log('API call was successful: ' . json_encode($responseData) . ' ' . __METHOD__, Constants::LOG_LEVEL_INFO); + } else { + Translations::$plugin->logHelper->log('API call failed with status: ' . $response->getStatusCode() . ' ' . __METHOD__, Constants::LOG_LEVEL_ERROR); + } + } catch (\Exception $e) { + // Handle any exceptions during the request + Craft::error('API call failed: ' . $e->getMessage(), __METHOD__); + Translations::$plugin->logHelper->log('API call failed: ' . $e->getMessage() . ' ' . __METHOD__, Constants::LOG_LEVEL_ERROR); + } + } + } + +} diff --git a/src/services/repository/AdsRepository.php b/src/services/repository/AdsRepository.php new file mode 100644 index 00000000..eac7594b --- /dev/null +++ b/src/services/repository/AdsRepository.php @@ -0,0 +1,45 @@ +getAdsContent("dashboard"); + } + + /** + * Return ad content based on content weather its sidebar of order, translator etc. + * + * @param $context can be one of "create" or "edit"; + */ + public function sidebar($context) + { + return $this->getAdsContent("sidebar", $context); + } + + /** + * Returns ads to be shown based on location of ad and context if applies. + * + * @param $location The page on which the ad is to be shown. + * @param $context the action taken on a page based on which ad will be shown. + * + * @return array + */ + private function getAdsContent($location, $context = null): array { + $adsData = Constants::ADS_CONTENT[$location]; + return $context ? $adsData[$context] : $adsData; + } +} \ No newline at end of file diff --git a/src/services/repository/EntryRepository.php b/src/services/repository/EntryRepository.php index 30d73f8f..8c71e9be 100644 --- a/src/services/repository/EntryRepository.php +++ b/src/services/repository/EntryRepository.php @@ -14,11 +14,11 @@ use Craft; use craft\elements\User; use craft\base\Component; -use craft\services\Drafts; use craft\events\DraftEvent; use craft\behaviors\DraftBehavior; use acclaro\translations\Translations; use craft\base\ElementInterface; +use craft\db\Table; use craft\helpers\ArrayHelper; class EntryRepository extends Component @@ -73,7 +73,7 @@ private function makeNewDraft($canonical, $creatorId, $name, $notes, $newAttribu $entryInTargetSite = Translations::$plugin->elementRepository->getElementById($canonical->id, $targetSiteId); // Create the draft row - $draftId = (new Drafts())->insertDraftRow($name, $notes, $creatorId, $canonical->id, $canonical::trackChanges(), $provisional); + $draftId = Craft::$app->getDrafts()->insertDraftRow($name, $notes, $creatorId, $canonical->id, $canonical::trackChanges(), $provisional); // Duplicate the element $newAttributes['isProvisionalDraft'] = $provisional; @@ -102,6 +102,21 @@ private function makeNewDraft($canonical, $creatorId, $name, $notes, $newAttribu $draft = Craft::$app->getElements()->propagateElement($draft, $targetSiteId); } + // Duplicate nested element ownership + Craft::$app->getDb()->createCommand(sprintf( + << $draft->id, + ':canonicalId' => $canonical->id, + ])->execute(); + $transaction->commit(); } catch (\Throwable $e) { $transaction->rollBack(); diff --git a/src/services/repository/WidgetRepository.php b/src/services/repository/WidgetRepository.php index ac04e6b4..e8225259 100644 --- a/src/services/repository/WidgetRepository.php +++ b/src/services/repository/WidgetRepository.php @@ -25,6 +25,8 @@ use acclaro\translations\records\WidgetRecord; use acclaro\translations\Translations; // Widget Classes +use acclaro\translations\widgets\Ads; +use acclaro\translations\widgets\BaseWidget; use acclaro\translations\widgets\News; use acclaro\translations\widgets\Translators; use acclaro\translations\widgets\RecentOrders; @@ -64,6 +66,7 @@ public function getAllWidgetTypes(): array RecentOrders::class, NewAndModifiedEntries::class, LanguageCoverage::class, + Ads::class, ]; return $widgetTypes; @@ -130,7 +133,7 @@ public function doesUserHaveWidget(string $type): bool * Returns a widget by its ID. * * @param int $id The widget’s ID - * @return WidgetInterface|null The widget, or null if it doesn’t exist + * @return BaseWidget|null The widget, or null if it doesn’t exist */ public function getWidgetById(int $id) { @@ -208,8 +211,8 @@ public function saveWidget(WidgetInterface $widget, bool $runValidation = true): public function deleteWidgetById(int $widgetId): bool { $widget = $this->getWidgetById($widgetId); - if (!$widget) { - return false; + if (!$widget || !$widget::isDeletable()) { + throw new \Exception("operation not allowed"); } return $this->deleteWidget($widget); } @@ -217,11 +220,11 @@ public function deleteWidgetById(int $widgetId): bool /** * Soft-deletes a widget. * - * @param WidgetInterface $widget The widget to be deleted + * @param BaseWidget $widget The widget to be deleted * @return bool Whether the widget was deleted successfully * @throws \Throwable if reasons */ - public function deleteWidget(WidgetInterface $widget): bool + public function deleteWidget(BaseWidget $widget): bool { $widgets = [$widget]; @@ -328,6 +331,7 @@ public function getWidgetInfo(WidgetInterface $widget) 'type' => get_class($widget), 'colspan' => $colspan, 'title' => $widget->getTitle(), + 'subTitle' => $widget->getSubtitle(), 'name' => $widget->displayName(), 'bodyHtml' => $widgetBodyHtml, 'settingsHtml' => $settingsHtml, @@ -377,6 +381,7 @@ public function getClosest($search, $arr) private function _addDefaultUserWidgets() { $user = Craft::$app->getUser()->getIdentity(); + $this->saveWidget($this->createWidget(Ads::class)); $this->saveWidget($this->createWidget(RecentOrders::class)); $this->saveWidget($this->createWidget(NewAndModifiedEntries::class)); $this->saveWidget($this->createWidget(LanguageCoverage::class)); diff --git a/src/templates/_components/ads/sidebar.twig b/src/templates/_components/ads/sidebar.twig new file mode 100644 index 00000000..1708c922 --- /dev/null +++ b/src/templates/_components/ads/sidebar.twig @@ -0,0 +1,26 @@ +{% import 'translations/_components/_forms/button' as button %} + +{% if ads is not empty %} + {% set heading = ads.heading %} + {% set content = ads.content %} +{% endif %} + + \ No newline at end of file diff --git a/src/templates/_components/widgets/AcclaroAds/body.twig b/src/templates/_components/widgets/AcclaroAds/body.twig new file mode 100644 index 00000000..e985c88e --- /dev/null +++ b/src/templates/_components/widgets/AcclaroAds/body.twig @@ -0,0 +1,24 @@ +{% import 'translations/_components/_forms/button' as button %} + +
+ {% if ads|length %} +
+ {% for ad in ads %} +
+
+ +
+
+ {{ ad.content }} +
+
+ {{ button.anchorButton({ + label: ad.linkText, + href: ad.link, + }) }} +
+
+ {% endfor %} +
+ {% endif %} +
\ No newline at end of file diff --git a/src/templates/_components/widgets/AcclaroAds/settings.twig b/src/templates/_components/widgets/AcclaroAds/settings.twig new file mode 100644 index 00000000..5da30dc5 --- /dev/null +++ b/src/templates/_components/widgets/AcclaroAds/settings.twig @@ -0,0 +1,10 @@ +{% import "_includes/forms" as forms %} + +{{ forms.hidden({ + label: "Limit"|t('app'), + id: 'limit', + name: 'limit', + value: widget.limit, + size: 2, + errors: widget.getErrors('limit') +}) }} \ No newline at end of file diff --git a/src/templates/_components/widgets/NewAndModifiedEntries/body.twig b/src/templates/_components/widgets/NewAndModifiedEntries/body.twig index 68f03c2c..5debcc8a 100644 --- a/src/templates/_components/widgets/NewAndModifiedEntries/body.twig +++ b/src/templates/_components/widgets/NewAndModifiedEntries/body.twig @@ -1,6 +1,6 @@ {% import 'translations/_components/_forms/button' as button %} -
+
{% set tabs = { "recent-entries-widget": {label: "New Source Entries"|t, url: 'javascript:void(0)'}, "recently-modified-widget": {label: "Modified Source Entries"|t, url: 'javascript:void(0)'}, @@ -18,7 +18,7 @@