diff --git a/.editorconfig b/.editorconfig
index 79207a4..b5df0fc 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -12,11 +12,7 @@ end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = tab
-indent_size = 4
-[{.jshintrc,*.json,*.yml}]
+[*.{yml,yaml}]
indent_style = space
indent_size = 2
-
-[{*.txt,wp-config-sample.php}]
-end_of_line = crlf
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..51d107a
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,3 @@
+build
+vendor
+node_modules
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..02fb747
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": ["@eighteen73/eslint-config-wordpress"]
+}
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..d3fd5c2
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,27 @@
+# Directories
+/.git export-ignore
+/.github export-ignore
+/.husky export-ignore
+/.vscode export-ignore
+/node_modules export-ignore
+/src export-ignore
+/tests export-ignore
+
+# Files
+/.* export-ignore
+/CHANGELOG.md export-ignore
+/CODE_OF_CONDUCT.md export-ignore
+/composer.json export-ignore
+/composer.lock export-ignore
+/CONTRIBUTING.md export-ignore
+/CREDITS.md export-ignore
+/DEVELOPERS.md export-ignore
+/lefthook.yml export-ignore
+/LICENSE.md export-ignore
+/package-lock.json export-ignore
+/package.json export-ignore
+/phpcs.xml.dist export-ignore
+/postcss.config.js export-ignore
+/README.md export-ignore
+/tsconfig.json export-ignore
+/webpack.config.js export-ignore
diff --git a/.gitignore b/.gitignore
index 09bb803..f3919bf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,53 @@
-# Composer
-vendor/
-# Lock files
-composer.lock
+# Operating System files
+.DS_Store
+Thumbs.db
-# Local files
+# IDE files
.idea
-.DS_Store
+.vscode/*
+
+# Sass
+.sass-cache/
+
+# Logs
+logs/
+
+# Environment files
+wp-cli.local.yml
+yarn-error.log
+npm-debug.log
+.pnpm-debug.log
+
+# Build files
+*.sql
+*.swp
+*.zip
+
+# Built packages
+build/
+build-module/
+build-style/
+build-types/
+dist/
+
+# Project files
+node_modules/
+vendor/
+
+# TypeScript files
+tsconfig.tsbuildinfo
+
+# Node Package Dependencies
+package-lock.json
+
+# wp-env config
+.wp-env.override.json
+
+# Unit tests
+tmp/
+
+# Composer
+vendor/
+bin/composer/**/vendor/
+lib/vendor/
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..2bd5a0a
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+22
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..51d107a
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,3 @@
+build
+vendor
+node_modules
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..2353765
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1 @@
+"@wordpress/prettier-config"
diff --git a/.stylelintignore b/.stylelintignore
new file mode 100644
index 0000000..51d107a
--- /dev/null
+++ b/.stylelintignore
@@ -0,0 +1,3 @@
+build
+vendor
+node_modules
diff --git a/.stylelintrc.json b/.stylelintrc.json
new file mode 100644
index 0000000..a9573ad
--- /dev/null
+++ b/.stylelintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "@eighteen73/stylelint-config-wordpress"
+}
diff --git a/composer.json b/composer.json
index 638b1b4..f4e33b1 100644
--- a/composer.json
+++ b/composer.json
@@ -34,9 +34,8 @@
}
},
"scripts": {
- "test": [
- "phpcs"
- ],
+ "lint": "./vendor/bin/phpcs",
+ "format": "./vendor/bin/phpcbf",
"post-install-cmd": [
"\"vendor/bin/mozart\" compose",
"composer dump-autoload"
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..11af9b6
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,2034 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "90df7d8ce1d1a015ce236bcebe9e4049",
+ "packages": [
+ {
+ "name": "pelago/emogrifier",
+ "version": "v8.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MyIntervals/emogrifier.git",
+ "reference": "7fdf4ee46fe57bd017b92640bca1ec42d124440a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MyIntervals/emogrifier/zipball/7fdf4ee46fe57bd017b92640bca1ec42d124440a",
+ "reference": "7fdf4ee46fe57bd017b92640bca1ec42d124440a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": "~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "sabberworm/php-css-parser": "^9.0.0",
+ "symfony/css-selector": "^5.4.35 || ~6.3.12 || ^6.4.3 || ^7.0.3"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-parallel-lint": "1.4.0",
+ "phpmd/phpmd": "2.15.0",
+ "phpstan/extension-installer": "1.4.3",
+ "phpstan/phpstan": "1.12.28 || 2.1.20",
+ "phpstan/phpstan-phpunit": "1.4.2 || 2.0.7",
+ "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.6",
+ "phpunit/phpunit": "9.6.23",
+ "rawr/phpunit-data-provider": "3.3.1",
+ "rector/rector": "1.2.10 || 2.1.2",
+ "rector/type-perfect": "1.0.0 || 2.1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Pelago\\Emogrifier\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Oliver Klee",
+ "email": "github@oliverklee.de"
+ },
+ {
+ "name": "Zoli Szabó",
+ "email": "zoli.szabo+github@gmail.com"
+ },
+ {
+ "name": "John Reeve",
+ "email": "jreeve@pelagodesign.com"
+ },
+ {
+ "name": "Jake Hotson",
+ "email": "jake.github@qzdesign.co.uk"
+ },
+ {
+ "name": "Cameron Brooks"
+ },
+ {
+ "name": "Jaime Prado"
+ }
+ ],
+ "description": "Converts CSS styles into inline style attributes in your HTML code",
+ "homepage": "https://www.myintervals.com/emogrifier.php",
+ "keywords": [
+ "css",
+ "email",
+ "pre-processing"
+ ],
+ "support": {
+ "issues": "https://github.com/MyIntervals/emogrifier/issues",
+ "source": "https://github.com/MyIntervals/emogrifier"
+ },
+ "time": "2025-07-27T17:45:42+00:00"
+ },
+ {
+ "name": "sabberworm/php-css-parser",
+ "version": "v9.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
+ "reference": "54574e3de2f8cdc91175ffd2337e5c6804a7d729"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/54574e3de2f8cdc91175ffd2337e5c6804a7d729",
+ "reference": "54574e3de2f8cdc91175ffd2337e5c6804a7d729",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-parallel-lint": "1.4.0",
+ "phpstan/extension-installer": "1.4.3",
+ "phpstan/phpstan": "1.12.28 || 2.1.19",
+ "phpstan/phpstan-phpunit": "1.4.2 || 2.0.7",
+ "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.6",
+ "phpunit/phpunit": "8.5.42",
+ "rawr/phpunit-data-provider": "3.3.1",
+ "rector/rector": "1.2.10 || 2.1.2",
+ "rector/type-perfect": "1.0.0 || 2.1.0"
+ },
+ "suggest": {
+ "ext-mbstring": "for parsing UTF-8 CSS"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "9.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Sabberworm\\CSS\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Raphael Schweikert"
+ },
+ {
+ "name": "Oliver Klee",
+ "email": "github@oliverklee.de"
+ },
+ {
+ "name": "Jake Hotson",
+ "email": "jake.github@qzdesign.co.uk"
+ }
+ ],
+ "description": "Parser for CSS Files written in PHP",
+ "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
+ "keywords": [
+ "css",
+ "parser",
+ "stylesheet"
+ ],
+ "support": {
+ "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
+ "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.0.0"
+ },
+ "time": "2025-07-27T07:24:01+00:00"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v7.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2",
+ "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Converts CSS selectors to XPath expressions",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v7.3.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-25T14:21:43+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "coenjacobs/mozart",
+ "version": "0.7.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/coenjacobs/mozart.git",
+ "reference": "dbcdeb992d20d9c8914eef090f9a0d684bb1102c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/coenjacobs/mozart/zipball/dbcdeb992d20d9c8914eef090f9a0d684bb1102c",
+ "reference": "dbcdeb992d20d9c8914eef090f9a0d684bb1102c",
+ "shasum": ""
+ },
+ "require": {
+ "league/flysystem": "^1.0",
+ "php": "^7.3|^8.0",
+ "symfony/console": "^4|^5",
+ "symfony/finder": "^4|^5"
+ },
+ "require-dev": {
+ "mheap/phpunit-github-actions-printer": "^1.4",
+ "phpunit/phpunit": "^8.5",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.4"
+ },
+ "bin": [
+ "bin/mozart"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "CoenJacobs\\Mozart\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Coen Jacobs",
+ "email": "coenjacobs@gmail.com"
+ }
+ ],
+ "description": "Composes all dependencies as a package inside a WordPress plugin",
+ "support": {
+ "issues": "https://github.com/coenjacobs/mozart/issues",
+ "source": "https://github.com/coenjacobs/mozart/tree/0.7.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/coenjacobs",
+ "type": "github"
+ }
+ ],
+ "time": "2021-02-02T21:37:03+00:00"
+ },
+ {
+ "name": "dealerdirect/phpcodesniffer-composer-installer",
+ "version": "v0.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git",
+ "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
+ "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=5.3",
+ "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
+ },
+ "require-dev": {
+ "composer/composer": "*",
+ "php-parallel-lint/php-parallel-lint": "^1.3.1",
+ "phpcompatibility/php-compatibility": "^9.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Franck Nijhof",
+ "email": "franck.nijhof@dealerdirect.com",
+ "homepage": "http://www.frenck.nl",
+ "role": "Developer / IT Manager"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors"
+ }
+ ],
+ "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
+ "homepage": "http://www.dealerdirect.com",
+ "keywords": [
+ "PHPCodeSniffer",
+ "PHP_CodeSniffer",
+ "code quality",
+ "codesniffer",
+ "composer",
+ "installer",
+ "phpcbf",
+ "phpcs",
+ "plugin",
+ "qa",
+ "quality",
+ "standard",
+ "standards",
+ "style guide",
+ "stylecheck",
+ "tests"
+ ],
+ "support": {
+ "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues",
+ "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer"
+ },
+ "time": "2022-02-04T12:51:07+00:00"
+ },
+ {
+ "name": "eighteen73/wordpress-coding-standards",
+ "version": "V2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/eighteen73/wordpress-coding-standards.git",
+ "reference": "988265b4e038321cffd547b655862ff8c3443ca1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/eighteen73/wordpress-coding-standards/zipball/988265b4e038321cffd547b655862ff8c3443ca1",
+ "reference": "988265b4e038321cffd547b655862ff8c3443ca1",
+ "shasum": ""
+ },
+ "require": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2",
+ "phpcompatibility/phpcompatibility-wp": "^2.1",
+ "squizlabs/php_codesniffer": "^3.6",
+ "wp-coding-standards/wpcs": "^3.0"
+ },
+ "type": "phpcodesniffer-standard",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ed Jeavons",
+ "email": "ed@orphans.co.uk"
+ },
+ {
+ "name": "Brett Mason",
+ "email": "brett@orphans.co.uk"
+ }
+ ],
+ "description": "Modestly opinionated PHPCS configuration for WordPress.",
+ "support": {
+ "issues": "https://github.com/eighteen73/wordpress-coding-standards/issues",
+ "source": "https://github.com/eighteen73/wordpress-coding-standards/tree/V2.0.1"
+ },
+ "time": "2023-09-19T07:48:57+00:00"
+ },
+ {
+ "name": "league/flysystem",
+ "version": "1.1.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1",
+ "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1",
+ "shasum": ""
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "league/mime-type-detection": "^1.3",
+ "php": "^7.2.5 || ^8.0"
+ },
+ "conflict": {
+ "league/flysystem-sftp": "<1.0.6"
+ },
+ "require-dev": {
+ "phpspec/prophecy": "^1.11.1",
+ "phpunit/phpunit": "^8.5.8"
+ },
+ "suggest": {
+ "ext-ftp": "Allows you to use FTP server storage",
+ "ext-openssl": "Allows you to use FTPS server storage",
+ "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
+ "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
+ "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
+ "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
+ "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
+ "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
+ "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
+ "league/flysystem-webdav": "Allows you to use WebDAV storage",
+ "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
+ "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
+ "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Filesystem abstraction: Many filesystems, one API.",
+ "keywords": [
+ "Cloud Files",
+ "WebDAV",
+ "abstraction",
+ "aws",
+ "cloud",
+ "copy.com",
+ "dropbox",
+ "file systems",
+ "files",
+ "filesystem",
+ "filesystems",
+ "ftp",
+ "rackspace",
+ "remote",
+ "s3",
+ "sftp",
+ "storage"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/flysystem/issues",
+ "source": "https://github.com/thephpleague/flysystem/tree/1.1.10"
+ },
+ "funding": [
+ {
+ "url": "https://offset.earth/frankdejonge",
+ "type": "other"
+ }
+ ],
+ "time": "2022-10-04T09:16:37+00:00"
+ },
+ {
+ "name": "league/mime-type-detection",
+ "version": "1.16.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/mime-type-detection.git",
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9",
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "phpstan/phpstan": "^0.12.68",
+ "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\MimeTypeDetection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "Mime-type detection for Flysystem",
+ "support": {
+ "issues": "https://github.com/thephpleague/mime-type-detection/issues",
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/frankdejonge",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-21T08:32:55+00:00"
+ },
+ {
+ "name": "phpcompatibility/php-compatibility",
+ "version": "9.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
+ "reference": "9fb324479acf6f39452e0655d2429cc0d3914243"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243",
+ "reference": "9fb324479acf6f39452e0655d2429cc0d3914243",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3",
+ "squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
+ },
+ "conflict": {
+ "squizlabs/php_codesniffer": "2.6.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
+ },
+ "suggest": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
+ "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ },
+ "type": "phpcodesniffer-standard",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Wim Godden",
+ "homepage": "https://github.com/wimg",
+ "role": "lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "homepage": "https://github.com/jrfnl",
+ "role": "lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
+ }
+ ],
+ "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
+ "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
+ "keywords": [
+ "compatibility",
+ "phpcs",
+ "standards"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
+ "source": "https://github.com/PHPCompatibility/PHPCompatibility"
+ },
+ "time": "2019-12-27T09:44:58+00:00"
+ },
+ {
+ "name": "phpcompatibility/phpcompatibility-paragonie",
+ "version": "1.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git",
+ "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
+ "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
+ "shasum": ""
+ },
+ "require": {
+ "phpcompatibility/php-compatibility": "^9.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "paragonie/random_compat": "dev-master",
+ "paragonie/sodium_compat": "dev-master"
+ },
+ "suggest": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
+ "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ },
+ "type": "phpcodesniffer-standard",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Wim Godden",
+ "role": "lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "role": "lead"
+ }
+ ],
+ "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.",
+ "homepage": "http://phpcompatibility.com/",
+ "keywords": [
+ "compatibility",
+ "paragonie",
+ "phpcs",
+ "polyfill",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues",
+ "security": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/security/policy",
+ "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCompatibility",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2024-04-24T21:30:46+00:00"
+ },
+ {
+ "name": "phpcompatibility/phpcompatibility-wp",
+ "version": "2.1.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git",
+ "reference": "5bfbbfbabb3df2b9a83e601de9153e4a7111962c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/5bfbbfbabb3df2b9a83e601de9153e4a7111962c",
+ "reference": "5bfbbfbabb3df2b9a83e601de9153e4a7111962c",
+ "shasum": ""
+ },
+ "require": {
+ "phpcompatibility/php-compatibility": "^9.0",
+ "phpcompatibility/phpcompatibility-paragonie": "^1.0",
+ "squizlabs/php_codesniffer": "^3.3"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0"
+ },
+ "suggest": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
+ "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ },
+ "type": "phpcodesniffer-standard",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Wim Godden",
+ "role": "lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "role": "lead"
+ }
+ ],
+ "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.",
+ "homepage": "http://phpcompatibility.com/",
+ "keywords": [
+ "compatibility",
+ "phpcs",
+ "standards",
+ "static analysis",
+ "wordpress"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues",
+ "security": "https://github.com/PHPCompatibility/PHPCompatibilityWP/security/policy",
+ "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCompatibility",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/phpcompatibility",
+ "type": "thanks_dev"
+ }
+ ],
+ "time": "2025-05-12T16:38:37+00:00"
+ },
+ {
+ "name": "phpcsstandards/phpcsextra",
+ "version": "1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCSStandards/PHPCSExtra.git",
+ "reference": "fa4b8d051e278072928e32d817456a7fdb57b6ca"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/fa4b8d051e278072928e32d817456a7fdb57b6ca",
+ "reference": "fa4b8d051e278072928e32d817456a7fdb57b6ca",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4",
+ "phpcsstandards/phpcsutils": "^1.1.0",
+ "squizlabs/php_codesniffer": "^3.13.0 || ^4.0"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpcsstandards/phpcsdevcs": "^1.1.6",
+ "phpcsstandards/phpcsdevtools": "^1.2.1",
+ "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-stable": "1.x-dev",
+ "dev-develop": "1.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Juliette Reinders Folmer",
+ "homepage": "https://github.com/jrfnl",
+ "role": "lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors"
+ }
+ ],
+ "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.",
+ "keywords": [
+ "PHP_CodeSniffer",
+ "phpcbf",
+ "phpcodesniffer-standard",
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues",
+ "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHPCSExtra"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/phpcsstandards",
+ "type": "thanks_dev"
+ }
+ ],
+ "time": "2025-06-14T07:40:39+00:00"
+ },
+ {
+ "name": "phpcsstandards/phpcsutils",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCSStandards/PHPCSUtils.git",
+ "reference": "f7eb16f2fa4237d5db9e8fed8050239bee17a9bd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/f7eb16f2fa4237d5db9e8fed8050239bee17a9bd",
+ "reference": "f7eb16f2fa4237d5db9e8fed8050239bee17a9bd",
+ "shasum": ""
+ },
+ "require": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0",
+ "php": ">=5.4",
+ "squizlabs/php_codesniffer": "^3.13.0 || ^4.0"
+ },
+ "require-dev": {
+ "ext-filter": "*",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpcsstandards/phpcsdevcs": "^1.1.6",
+ "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0 || ^3.0.0"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-stable": "1.x-dev",
+ "dev-develop": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "PHPCSUtils/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Juliette Reinders Folmer",
+ "homepage": "https://github.com/jrfnl",
+ "role": "lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors"
+ }
+ ],
+ "description": "A suite of utility functions for use with PHP_CodeSniffer",
+ "homepage": "https://phpcsutils.com/",
+ "keywords": [
+ "PHP_CodeSniffer",
+ "phpcbf",
+ "phpcodesniffer-standard",
+ "phpcs",
+ "phpcs3",
+ "phpcs4",
+ "standards",
+ "static analysis",
+ "tokens",
+ "utility"
+ ],
+ "support": {
+ "docs": "https://phpcsutils.com/",
+ "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues",
+ "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHPCSUtils"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/phpcsstandards",
+ "type": "thanks_dev"
+ }
+ ],
+ "time": "2025-08-10T01:04:45+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": "squizlabs/php_codesniffer",
+ "version": "3.13.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
+ "reference": "5b5e3821314f947dd040c70f7992a64eac89025c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5b5e3821314f947dd040c70f7992a64eac89025c",
+ "reference": "5b5e3821314f947dd040c70f7992a64eac89025c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
+ },
+ "bin": [
+ "bin/phpcbf",
+ "bin/phpcs"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "Former lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "role": "Current lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "keywords": [
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
+ "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/phpcsstandards",
+ "type": "thanks_dev"
+ }
+ ],
+ "time": "2025-06-17T22:17:01+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v5.4.47",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
+ "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/string": "^5.1|^6.0"
+ },
+ "conflict": {
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<4.4",
+ "symfony/dotenv": "<5.1",
+ "symfony/event-dispatcher": "<4.4",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<4.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
+ "symfony/lock": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v5.4.47"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-06T11:30:55+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.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-25T14:21:43+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v5.4.45",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "63741784cd7b9967975eec610b256eed3ede022b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b",
+ "reference": "63741784cd7b9967975eec610b256eed3ede022b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "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": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v5.4.45"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-28T13:32:08+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.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-intl-grapheme",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.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-intl-normalizer",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "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 for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.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-mbstring",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.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-12-23T08:48:59+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "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 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.32.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-php80",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "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.32.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": "2025-01-02T08:10:11+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v3.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
+ "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
+ "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": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v3.6.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": "2025-04-25T09:37:31+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v6.4.24",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "f0ce0bd36a3accb4a225435be077b4b4875587f4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f0ce0bd36a3accb4a225435be077b4b4875587f4",
+ "reference": "f0ce0bd36a3accb4a225435be077b4b4875587f4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "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/error-handler": "^5.4|^6.0|^7.0",
+ "symfony/http-client": "^5.4|^6.0|^7.0",
+ "symfony/intl": "^6.2|^7.0",
+ "symfony/translation-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^5.4|^6.0|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "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/string/tree/v6.4.24"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-07-10T08:14:14+00:00"
+ },
+ {
+ "name": "wp-coding-standards/wpcs",
+ "version": "3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/WordPress/WordPress-Coding-Standards.git",
+ "reference": "d2421de7cec3274ae622c22c744de9a62c7925af"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/d2421de7cec3274ae622c22c744de9a62c7925af",
+ "reference": "d2421de7cec3274ae622c22c744de9a62c7925af",
+ "shasum": ""
+ },
+ "require": {
+ "ext-filter": "*",
+ "ext-libxml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlreader": "*",
+ "php": ">=5.4",
+ "phpcsstandards/phpcsextra": "^1.4.0",
+ "phpcsstandards/phpcsutils": "^1.1.0",
+ "squizlabs/php_codesniffer": "^3.13.0"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-console-highlighter": "^1.0.0",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpcompatibility/php-compatibility": "^9.0",
+ "phpcsstandards/phpcsdevtools": "^1.2.0",
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "suggest": {
+ "ext-iconv": "For improved results",
+ "ext-mbstring": "For improved results"
+ },
+ "type": "phpcodesniffer-standard",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors"
+ }
+ ],
+ "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions",
+ "keywords": [
+ "phpcs",
+ "standards",
+ "static analysis",
+ "wordpress"
+ ],
+ "support": {
+ "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues",
+ "source": "https://github.com/WordPress/WordPress-Coding-Standards",
+ "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "custom"
+ }
+ ],
+ "time": "2025-07-24T20:08:31+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {},
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=8.0"
+ },
+ "platform-dev": {},
+ "plugin-api-version": "2.6.0"
+}
diff --git a/includes/classes/Admin/CleanUI.php b/includes/classes/Admin/CleanUI.php
index 7095b4f..5b15901 100644
--- a/includes/classes/Admin/CleanUI.php
+++ b/includes/classes/Admin/CleanUI.php
@@ -19,8 +19,19 @@ class CleanUI {
/**
* Setup module
+ *
+ * @return void
+ */
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
*/
- public function setup() {
+ public function init(): void {
add_action( 'admin_menu', [ $this, 'clean_ui_menu_items' ] );
add_action( 'admin_bar_menu', [ $this, 'clean_ui_toolbar_items' ], 999 );
add_action( 'wp_dashboard_setup', [ $this, 'clean_ui_dashboard_widgets' ] );
@@ -30,8 +41,10 @@ public function setup() {
/**
* Remove menu items
+ *
+ * @return void
*/
- public function clean_ui_menu_items() {
+ public function clean_ui_menu_items(): void {
if ( ! apply_filters( 'orbit_enable_menu_item_dashboard', true ) ) {
remove_menu_page( 'index.php' );
}
@@ -50,7 +63,7 @@ public function clean_ui_menu_items() {
*
* @return void
*/
- public function clean_ui_toolbar_items( $menu ) {
+ public function clean_ui_toolbar_items( $menu ): void {
$menu->remove_node( 'comments' );
$menu->remove_node( 'customize' );
$menu->remove_node( 'dashboard' );
@@ -70,8 +83,10 @@ public function clean_ui_toolbar_items( $menu ) {
/**
* Remove dahboard widgets
+ *
+ * @return void
*/
- public function clean_ui_dashboard_widgets() {
+ public function clean_ui_dashboard_widgets(): void {
global $wp_meta_boxes;
unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_site_health'] );
@@ -90,8 +105,10 @@ public function remove_cms_footer_text(): string {
/**
* Nice logo for the login page
+ *
+ * @return void
*/
- public function clean_ui_logo() {
+ public function clean_ui_logo(): void {
if ( ! apply_filters( 'orbit_enable_login_logo', true ) ) {
return;
}
diff --git a/includes/classes/Admin/EnvironmentIcon.php b/includes/classes/Admin/EnvironmentIcon.php
index b0639d4..cea0a8b 100644
--- a/includes/classes/Admin/EnvironmentIcon.php
+++ b/includes/classes/Admin/EnvironmentIcon.php
@@ -20,8 +20,19 @@ class EnvironmentIcon {
/**
* Setup module
+ *
+ * @return void
+ */
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
*/
- public function setup() {
+ public function init(): void {
if ( ! $this->is_allowed() ) {
return;
}
@@ -55,8 +66,10 @@ public function is_allowed(): bool {
* Add the environment name to the admin toolbar
*
* @param \WP_Admin_Bar $wp_admin_bar WordPress Admin Bar instance.
+ *
+ * @return void
*/
- public function add_environment_name_to_toolbar( \WP_Admin_Bar $wp_admin_bar ) {
+ public function add_environment_name_to_toolbar( \WP_Admin_Bar $wp_admin_bar ): void {
$env = wp_get_environment_type();
$wp_admin_bar->add_node(
diff --git a/includes/classes/Admin/HideUpdates.php b/includes/classes/Admin/HideUpdates.php
index cdfbec7..7fe4989 100644
--- a/includes/classes/Admin/HideUpdates.php
+++ b/includes/classes/Admin/HideUpdates.php
@@ -19,8 +19,19 @@ class HideUpdates {
/**
* Setup module
+ *
+ * @return void
+ */
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
*/
- public function setup() {
+ public function init(): void {
if ( $this->is_allowed() ) {
return;
}
diff --git a/includes/classes/BlockEditor/Patterns.php b/includes/classes/BlockEditor/Patterns.php
index 7b2bf76..949ad2c 100644
--- a/includes/classes/BlockEditor/Patterns.php
+++ b/includes/classes/BlockEditor/Patterns.php
@@ -21,7 +21,7 @@ class Patterns {
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
if ( ! apply_filters( 'orbit_enable_disable_external_patterns', true ) ) {
return;
}
@@ -56,7 +56,7 @@ public function remove_woocommerce_patterns(): void {
* @param array $handler Route handler used for the request.
* @return mixed
*/
- public function filter_woocommerce_patterns_rest( $dispatch_result, $request, $route, $handler ) {
+ public function filter_woocommerce_patterns_rest( $dispatch_result, $request, $route, $handler ): mixed {
// Check if this is a block patterns request
if ( strpos( $route, '/wp/v2/block-patterns/patterns' ) !== 0 ) {
return $dispatch_result;
diff --git a/includes/classes/Branding/BrandedEmails.php b/includes/classes/Branding/BrandedEmails.php
index 48025f0..2163f18 100644
--- a/includes/classes/Branding/BrandedEmails.php
+++ b/includes/classes/Branding/BrandedEmails.php
@@ -22,11 +22,20 @@ class BrandedEmails {
use Singleton;
/**
- * Primary constructor
+ * Setup module
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
+ */
+ public function init(): void {
if ( ! apply_filters( 'orbit_enable_branded_emails', true ) ) {
return;
}
@@ -43,7 +52,7 @@ public function setup() {
* @param array $args Array of arguments passed to wp_mail().
* @return array Modified $args array with the email message wrapped in branded HTML.
*/
- public function apply_branded_email_template( $args ) {
+ public function apply_branded_email_template( $args ): array {
$headers = [];
// Convert headers to an array if they aren't already
@@ -110,7 +119,7 @@ function ( $header ) {
* @param string $template The original email template string (usually empty).
* @return string The modified email template with placeholders for message and subject.
*/
- public function apply_branded_email_template_to_gf_notifications( $template ) {
+ public function apply_branded_email_template_to_gf_notifications( $template ): string {
ob_start();
Templates::include_template(
@@ -134,7 +143,7 @@ public function apply_branded_email_template_to_gf_notifications( $template ) {
* @param string|null $email_content Content that will receive inline styles.
* @return string The email content with inline styles applied.
*/
- public function style_inline( $email_content ) {
+ public function style_inline( $email_content ): string {
try {
$inlined_content = CssInliner::fromHtml( $email_content )->inlineCss()->render();
} catch ( Exception $e ) {
@@ -149,7 +158,7 @@ public function style_inline( $email_content ) {
*
* @return array Array of CSS variables for use in the email template.
*/
- public static function get_css_variables() {
+ public static function get_css_variables(): array {
return [
'background_color' => apply_filters(
'orbit_branded_emails_background_color',
@@ -283,7 +292,7 @@ public static function orbit_branded_emails_resolve_color( $color_value, $fallba
*
* @return string The resolved background color after applying the filter.
*/
- public static function apply_branded_email_colours_to_gf_table_labels( $color, $field, $lead ) {
+ public static function apply_branded_email_colours_to_gf_table_labels( $color, $field, $lead ): string {
$label_background_color = apply_filters(
'orbit_branded_emails_gf_label_bg_color',
self::orbit_branded_emails_resolve_color(
@@ -305,7 +314,7 @@ public static function apply_branded_email_colours_to_gf_table_labels( $color, $
* @param array $entry The current entry.
* @return string The modified color value.
*/
- public static function apply_branded_email_colours_to_gf_table_data( $color, $field, $entry ) {
+ public static function apply_branded_email_colours_to_gf_table_data( $color, $field, $entry ): string {
$data_background_color = apply_filters(
'orbit_branded_emails_gf_data_bg_color',
$color
diff --git a/includes/classes/Capabilities/Editor.php b/includes/classes/Capabilities/Editor.php
index 045f061..7962a4f 100644
--- a/includes/classes/Capabilities/Editor.php
+++ b/includes/classes/Capabilities/Editor.php
@@ -17,13 +17,17 @@ class Editor {
/**
* Setup module
+ *
+ * @return void
*/
- public function setup() {
+ public function setup(): void {
add_action( 'admin_init', [ $this, 'manage_editor_caps' ] );
}
/**
* Add or remove site editor capabilities based on a filter.
+ *
+ * @return void
*/
public function manage_editor_caps(): void {
$disable_user_caps = ! apply_filters( 'orbit_enable_editor_caps_access', true );
diff --git a/includes/classes/Capabilities/GravityForms.php b/includes/classes/Capabilities/GravityForms.php
index fb9d8fd..8fb479b 100644
--- a/includes/classes/Capabilities/GravityForms.php
+++ b/includes/classes/Capabilities/GravityForms.php
@@ -17,13 +17,17 @@ class GravityForms {
/**
* Setup module
+ *
+ * @return void
*/
- public function setup() {
+ public function setup(): void {
add_action( 'admin_init', [ $this, 'manage_gravity_forms_caps' ] );
}
/**
* Add or remove Gravity Forms capabilities based on a filter.
+ *
+ * @return void
*/
public function manage_gravity_forms_caps(): void {
$disable_gf_access = ! apply_filters( 'orbit_enable_gravity_forms_access', true );
diff --git a/includes/classes/Capabilities/Users.php b/includes/classes/Capabilities/Users.php
index a1e99fd..17426f0 100644
--- a/includes/classes/Capabilities/Users.php
+++ b/includes/classes/Capabilities/Users.php
@@ -17,13 +17,17 @@ class Users {
/**
* Setup module
+ *
+ * @return void
*/
- public function setup() {
+ public function setup(): void {
add_action( 'admin_init', [ $this, 'manage_user_caps' ] );
}
/**
* Add or remove user-related capabilities based on a filter.
+ *
+ * @return void
*/
public function manage_user_caps(): void {
$disable_user_caps = ! apply_filters( 'orbit_enable_user_caps_access', true );
diff --git a/includes/classes/Media/RemoteFiles.php b/includes/classes/Media/RemoteFiles.php
index 93e32ff..5c3face 100644
--- a/includes/classes/Media/RemoteFiles.php
+++ b/includes/classes/Media/RemoteFiles.php
@@ -37,11 +37,20 @@ class RemoteFiles {
public array $directories = [];
/**
- * Primary constructor
+ * Setup module
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
+ */
+ public function init(): void {
if ( ! $this->is_safe_environment() ) {
return;
}
@@ -77,7 +86,7 @@ private function is_safe_environment(): bool {
*
* @return mixed
*/
- public function image_src( $image ) {
+ public function image_src( $image ): mixed {
if ( $image === false || empty( $image ) ) {
return $image;
}
diff --git a/includes/classes/Monitoring/HealthCheck.php b/includes/classes/Monitoring/HealthCheck.php
index ddb16ca..a338c1c 100644
--- a/includes/classes/Monitoring/HealthCheck.php
+++ b/includes/classes/Monitoring/HealthCheck.php
@@ -17,14 +17,24 @@ class HealthCheck {
use Singleton;
/**
- * Run on init
+ * Setup module
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
+ */
+ public function init(): void {
add_action( 'rest_api_init', [ $this, 'add_endpoint' ] );
}
+
/**
* Add the API endpoint
*
@@ -49,7 +59,7 @@ public function add_endpoint(): void {
* @param WP_REST_Request $data The request data
* @return string
*/
- public function run_health_check( $data ) {
+ public function run_health_check( $data ): string {
return 'ok';
}
}
diff --git a/includes/classes/Plugin.php b/includes/classes/Plugin.php
new file mode 100644
index 0000000..026df83
--- /dev/null
+++ b/includes/classes/Plugin.php
@@ -0,0 +1,45 @@
+setup();
+ Admin\HideUpdates::instance()->setup();
+ Admin\EnvironmentIcon::instance()->setup();
+ BlockEditor\Patterns::instance()->setup();
+ Branding\BrandedEmails::instance()->setup();
+ Capabilities\GravityForms::instance()->setup();
+ Capabilities\Users::instance()->setup();
+ Capabilities\Editor::instance()->setup();
+ DisallowIndexing\DisallowIndexing::instance()->setup();
+ Media\RemoteFiles::instance()->setup();
+ Monitoring\HealthCheck::instance()->setup();
+ Performance\Fast404::instance()->setup();
+ Security\DisableAPI::instance()->setup();
+ Security\DisableXMLRPC::instance()->setup();
+ Security\HideAuthor::instance()->setup();
+ Security\HideVersion::instance()->setup();
+ Security\RemoveHeadLinks::instance()->setup();
+ ThirdParty\WooCommerce::instance()->setup();
+ ThirdParty\Altcha::instance()->setup();
+ }
+}
diff --git a/includes/classes/Security/DisableAPI.php b/includes/classes/Security/DisableAPI.php
index 4051b11..7243c72 100644
--- a/includes/classes/Security/DisableAPI.php
+++ b/includes/classes/Security/DisableAPI.php
@@ -16,14 +16,24 @@ class DisableAPI {
use Singleton;
/**
- * Run on init
+ * Setup module
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
+ */
+ public function init(): void {
if ( apply_filters( 'orbit_enable_rest_api_user_endpoints', false ) ) {
return;
}
+
add_filter( 'rest_endpoints', [ $this, 'disable_users' ] );
}
diff --git a/includes/classes/Security/DisableXMLRPC.php b/includes/classes/Security/DisableXMLRPC.php
index f54b703..45e4651 100644
--- a/includes/classes/Security/DisableXMLRPC.php
+++ b/includes/classes/Security/DisableXMLRPC.php
@@ -16,14 +16,24 @@ class DisableXMLRPC {
use Singleton;
/**
- * Run on init
+ * Setup module
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
+ */
+ public function init(): void {
if ( apply_filters( 'orbit_enable_xmlrpc', false ) ) {
return;
}
+
add_filter( 'xmlrpc_enabled', '__return_false' );
remove_action( 'wp_head', 'rsd_link' );
}
diff --git a/includes/classes/Security/HideAuthor.php b/includes/classes/Security/HideAuthor.php
index 71728c3..646280a 100644
--- a/includes/classes/Security/HideAuthor.php
+++ b/includes/classes/Security/HideAuthor.php
@@ -16,11 +16,20 @@ class HideAuthor {
use Singleton;
/**
- * Run on init
+ * Setup module
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
+ */
+ public function init(): void {
add_action( 'template_redirect', [ $this, 'author_page_404' ] );
}
@@ -29,7 +38,7 @@ public function setup() {
*
* @return void
*/
- public function author_page_404() {
+ public function author_page_404(): void {
global $wp_query;
if ( is_author() ) {
diff --git a/includes/classes/Security/HideVersion.php b/includes/classes/Security/HideVersion.php
index acb7abd..588014c 100644
--- a/includes/classes/Security/HideVersion.php
+++ b/includes/classes/Security/HideVersion.php
@@ -18,14 +18,24 @@ class HideVersion {
const VERSIONED_URL_REGEX = '/(.+\?(?:ver|version)=)([^&]+)(.*)/';
/**
- * Run on init
+ * Setup module
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
+ */
+ public function init(): void {
if ( apply_filters( 'orbit_enable_expose_wordpress_version', false ) ) {
return;
}
+
remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );
add_filter( 'style_loader_src', [ $this, 'obfuscate_script_or_style_version' ], 20000 );
diff --git a/includes/classes/Security/RemoveHeadLinks.php b/includes/classes/Security/RemoveHeadLinks.php
index f606171..6455401 100644
--- a/includes/classes/Security/RemoveHeadLinks.php
+++ b/includes/classes/Security/RemoveHeadLinks.php
@@ -18,11 +18,20 @@ class RemoveHeadLinks {
use Singleton;
/**
- * Run on init
+ * Setup module
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
+ add_action( 'init', [ $this, 'init' ] );
+ }
+
+ /**
+ * Initialize module
+ *
+ * @return void
+ */
+ public function init(): void {
remove_action( 'wp_head', 'wlwmanifest_link' );
remove_action( 'wp_head', 'wp_shortlink_wp_head' );
diff --git a/includes/classes/ThirdParty/Altcha.php b/includes/classes/ThirdParty/Altcha.php
index dc4653e..113034c 100644
--- a/includes/classes/ThirdParty/Altcha.php
+++ b/includes/classes/ThirdParty/Altcha.php
@@ -20,7 +20,7 @@ class Altcha {
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
add_filter( 'altcha_challenge_url', [ $this, 'altcha_challenge_url' ] );
}
diff --git a/includes/classes/ThirdParty/WooCommerce.php b/includes/classes/ThirdParty/WooCommerce.php
index aa416fd..987d898 100644
--- a/includes/classes/ThirdParty/WooCommerce.php
+++ b/includes/classes/ThirdParty/WooCommerce.php
@@ -20,7 +20,7 @@ class WooCommerce {
*
* @return void
*/
- public function setup() {
+ public function setup(): void {
// Force WooCommerce tracking to always be disabled.
// This setting loads additional patterns from PTK.
diff --git a/includes/classes/Utilities/Templates.php b/includes/classes/Utilities/Templates.php
index 4545512..c9053f1 100644
--- a/includes/classes/Utilities/Templates.php
+++ b/includes/classes/Utilities/Templates.php
@@ -25,7 +25,7 @@ class Templates {
* @param string $template_name The name of the template file.
* @return string The path to the template file.
*/
- private static function get_template( $template_name ) {
+ private static function get_template( $template_name ): string {
$theme_template = get_theme_file_path( '//orbit//' . $template_name );
if ( file_exists( $theme_template ) ) :
@@ -41,7 +41,7 @@ private static function get_template( $template_name ) {
* @param string $template_name The name of the template file.
* @param array $args Optional. Associative array of variables to make available in the template.
*/
- public static function include_template( string $template_name, array $args = [] ) {
+ public static function include_template( string $template_name, array $args = [] ): array {
$template_path = self::get_template( $template_name );
if ( file_exists( $template_path ) ) {
diff --git a/js/settings.js b/js/settings.js
deleted file mode 100644
index a05713d..0000000
--- a/js/settings.js
+++ /dev/null
@@ -1,75 +0,0 @@
-(function ($) {
- $(document).ready(function () {
- const wpOpenGallery = function (o, callback) {
- const options = typeof o === 'object' ? o : {};
-
- // Predefined settings
- const defaultOptions = {
- title: 'Select Media',
- fileType: 'image',
- multiple: false,
- currentValue: '',
- };
-
- const opt = { ...defaultOptions, ...options };
-
- let image_frame;
-
- if (image_frame) {
- image_frame.open();
- }
-
- // Define image_frame as wp.media object
- image_frame = wp.media({
- title: opt.title,
- multiple: opt.multiple,
- library: {
- type: opt.fileType,
- },
- });
-
- image_frame.on('open', function () {
- // On open, get the id from the hidden input
- // and select the appropiate images in the media manager
- const selection = image_frame.state().get('selection');
- const ids = opt.currentValue.split(',');
-
- ids.forEach(function (id) {
- const attachment = wp.media.attachment(id);
- attachment.fetch();
- selection.add(attachment ? [attachment] : []);
- });
- });
-
- image_frame.on('close', function () {
- // On close, get selections and save to the hidden input
- // plus other AJAX stuff to refresh the image preview
- const selection = image_frame.state().get('selection');
- const files = [];
-
- selection.each(function (attachment) {
- files.push({
- id: attachment.attributes.id,
- filename: attachment.attributes.filename,
- url: attachment.attributes.url,
- type: attachment.attributes.type,
- subtype: attachment.attributes.subtype,
- sizes: attachment.attributes.sizes,
- });
- });
-
- callback(files);
- });
-
- image_frame.open();
- };
-
- // Set the logo attachment ID and preview on click.
- $('#orbit_ui_login_logo_button').click(function(event) {
- wpOpenGallery(null, function(data) {
- $('#orbit_ui_login_logo').val(data[0].id);
- $('#login-logo-preview').attr('src', data[0].url);
- });
- });
- });
-})(jQuery);
diff --git a/lefthook.yml b/lefthook.yml
new file mode 100644
index 0000000..4bf89b2
--- /dev/null
+++ b/lefthook.yml
@@ -0,0 +1,6 @@
+pre-commit:
+ parallel: true
+ jobs:
+ - run: composer run lint
+ glob: "*.php"
+ stage_fixed: true
diff --git a/orbit.php b/orbit.php
index 5860f42..34517b8 100644
--- a/orbit.php
+++ b/orbit.php
@@ -15,10 +15,7 @@
namespace Eighteen73\Orbit;
-// Exit if accessed directly
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
+defined( 'ABSPATH' ) || exit;
// Useful global constants.
define( 'ORBIT_URL', plugin_dir_url( __FILE__ ) );
@@ -27,28 +24,5 @@
require_once 'autoload.php';
-DisallowIndexing\DisallowIndexing::instance()->setup();
-Performance\Fast404::instance()->setup();
-ThirdParty\WooCommerce::instance()->setup();
-ThirdParty\Altcha::instance()->setup();
-
-add_action(
- 'init',
- function () {
- Admin\CleanUI::instance()->setup();
- Admin\HideUpdates::instance()->setup();
- Admin\EnvironmentIcon::instance()->setup();
- Capabilities\GravityForms::instance()->setup();
- Capabilities\Users::instance()->setup();
- Capabilities\Editor::instance()->setup();
- Security\DisableAPI::instance()->setup();
- Security\DisableXMLRPC::instance()->setup();
- Security\HideAuthor::instance()->setup();
- Security\HideVersion::instance()->setup();
- Security\RemoveHeadLinks::instance()->setup();
- Branding\BrandedEmails::instance()->setup();
- Monitoring\HealthCheck::instance()->setup();
- Media\RemoteFiles::instance()->setup();
- BlockEditor\Patterns::instance()->setup();
- }
-);
+// Initialise the plugin.
+Plugin::instance()->setup();
diff --git a/phpcs.xml b/phpcs.xml.dist
similarity index 73%
rename from phpcs.xml
rename to phpcs.xml.dist
index b48c21f..d5a98a5 100644
--- a/phpcs.xml
+++ b/phpcs.xml.dist
@@ -3,7 +3,12 @@
Eighteen73 Orbit
- .
+ ./
+
+
+ node_modules/
+ vendor/
+ build/
lib/packages/*
includes/lib/*
@@ -21,4 +26,5 @@
+