diff --git a/.gitattributes b/.gitattributes index 8db20f196..3dc19d8e6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7,3 +7,19 @@ *.tiff binary *.ico binary *.svg text +/.github/ export-ignore +/.wordpress-org/ export-ignore +/tests/ export-ignore +/.build-excludes export-ignore +/.editorconfig export-ignore +/.gitattributes export-ignore +/.gitignore export-ignore +/CONTRIBUTING.md export-ignore +/composer.lock export-ignore +/phpcs.xml export-ignore +/phpmd.xml export-ignore +/phpunit.xml export-ignore +/phpstan-baseline.neon export-ignore +/phpstan.neon.dist export-ignore +/webpack.config.js export-ignore +/yarn.lock export-ignore diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 722a3796e..0d5a3b19d 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -7,6 +7,33 @@ on: jobs: + # Generates stub file + stubs: + name: Genrate stubs + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '7.4' + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick + coverage: none + - name: Install stub generator globally + run: composer global require php-stubs/generator --dev + - name: Install Composer dependencies + uses: "ramsey/composer-install@v2" + with: + composer-options: "--no-dev" + - name: Create stubs + run: composer generate-stubs + - name: Upload stubs as artifact + uses: actions/upload-artifact@v4 + with: + name: notification-stubs + path: compat/stubs.php + # Builds the package and creates artifact with dist files build: name: Build @@ -14,45 +41,27 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 - - name: Setup PHP 7.4 + - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick coverage: none - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: '12' - - name: Setup variables - id: vars - run: | - echo "::set-output name=yarn-cache-path::$(yarn cache dir)" - echo "::set-output name=composer-cache-path::$(composer config cache-files-dir)" - - name: Cache Yarn - uses: actions/cache@v1 + - name: Install Strauss globally + run: composer global require brianhenryie/strauss + - name: Install Composer dependencies + uses: "ramsey/composer-install@v2" with: - path: ${{ steps.vars.outputs.yarn-cache-path }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: ${{ runner.os }}-yarn- - - name: Cache Composer - uses: actions/cache@v1 + composer-options: "--no-dev" + - name: Run Strauss + run: composer run-script prefix-namespaces-prod + - name: Setup Node + uses: actions/setup-node@v4 with: - path: ${{ steps.vars.outputs.composer-cache-path }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - - name: Install Node dependencies - run: yarn install --no-progress - - name: Install Composer dependencies - run: composer install --no-progress - - name: Install Composer build dependencies - run: composer bin build install --no-progress - - name: Compose dependencies - run: composer compose - - name: Remove dev depencencies - run: | - rm -rf vendor - composer install --no-dev --no-progress + node-version: '16' + cache: yarn + - name: Install yarn dependencies + run: yarn install --immutable - name: Build static assets run: yarn build - name: Create build dir @@ -67,7 +76,7 @@ jobs: src: '.' dest: 'build' - name: Upload artifact - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: build path: build @@ -79,7 +88,7 @@ jobs: needs: build steps: - name: Download artifact - uses: actions/download-artifact@v1 + uses: actions/download-artifact@v4 with: name: build path: ${{ secrets.SLUG }} @@ -87,7 +96,7 @@ jobs: run: | zip -rq ${{ secrets.SLUG }}-dev.zip ${{ secrets.SLUG }} - name: Upload artifact - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: ${{ secrets.SLUG }}-dev path: ${{ secrets.SLUG }}-dev.zip @@ -99,7 +108,7 @@ jobs: needs: pack steps: - name: Download artifact - uses: actions/download-artifact@v1 + uses: actions/download-artifact@v4 with: name: ${{ secrets.SLUG }}-dev path: . diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2c58dbffa..6091f6bdf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,7 @@ jobs: run: git flow init -d - name: Start release run: git flow release start ${{ github.event.inputs.new_version }} - - name: Replace 8.0.0 tags with new version number + - name: Replace Next tags with new version number uses: jacobtomlinson/gha-find-replace@master with: find: "(?i)\\[Next\\]" diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index cb2a107be..055258c15 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -14,45 +14,25 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 - - name: Setup PHP 7.4 + - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick coverage: none - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: '12' - - name: Setup variables - id: vars - run: | - echo "::set-output name=yarn-cache-path::$(yarn cache dir)" - echo "::set-output name=composer-cache-path::$(composer config cache-files-dir)" - - name: Cache Yarn - uses: actions/cache@v1 + - name: Install Composer dependencies + uses: "ramsey/composer-install@v2" with: - path: ${{ steps.vars.outputs.yarn-cache-path }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: ${{ runner.os }}-yarn- - - name: Cache Composer - uses: actions/cache@v1 + composer-options: "--no-dev" + - name: Run Strauss + run: composer run-script prefix-namespaces-prod + - name: Setup Node + uses: actions/setup-node@v4 with: - path: ${{ steps.vars.outputs.composer-cache-path }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - - name: Install Node dependencies - run: yarn install --no-progress - - name: Install Composer dependencies - run: composer install --no-progress - - name: Install Composer build dependencies - run: composer bin build install --no-progress - - name: Compose dependencies - run: composer compose - - name: Remove dev depencencies - run: | - rm -rf vendor - composer install --no-dev --no-progress + node-version: '16' + cache: yarn + - name: Install yarn dependencies + run: yarn install --immutable - name: Build static assets run: yarn build:production - name: Create build dir @@ -67,7 +47,7 @@ jobs: src: '.' dest: 'build' - name: Upload artifact - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: build path: build @@ -83,7 +63,7 @@ jobs: run: | echo "::set-output name=package-name::${{ secrets.SLUG }}-${GITHUB_REF#refs/tags/}" - name: Download artifact - uses: actions/download-artifact@v1 + uses: actions/download-artifact@v4 with: name: build path: ${{ secrets.SLUG }} @@ -91,36 +71,11 @@ jobs: run: | zip -rq ${{ steps.vars.outputs.package-name }}.zip ${{ secrets.SLUG }} - name: Upload artifact - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: ${{ steps.vars.outputs.package-name }} path: ${{ steps.vars.outputs.package-name }}.zip - # Uploads the stable package to internal repository - upload: - name: Upload to repo - runs-on: ubuntu-latest - needs: pack - steps: - - name: Setup variables - id: vars - run: | - echo "::set-output name=package-name::${{ secrets.SLUG }}-${GITHUB_REF#refs/tags/}" - - name: Download artifact - uses: actions/download-artifact@v1 - with: - name: ${{ steps.vars.outputs.package-name }} - path: . - - name: Upload to repo - uses: Pendect/action-rsyncer@v1.1.0 - env: - DEPLOY_KEY: ${{ secrets.PACKAGES_DEPLOY_KEY }} - with: - flags: '-avz' - options: '--recursive ' - src: '.' - dest: '${{ secrets.BRACKETSPACE_REPO_RSYNC_URL }}${{ secrets.SLUG }}/' - # Release on GitHub github-release: name: Release on GitHub @@ -141,71 +96,14 @@ jobs: grep -oPz "(?s)${START}.*?\n\K.*?(?=${END})" readme.txt > changelog.txt truncate -s-2 changelog.txt - name: Download artifact - uses: actions/download-artifact@v1 + uses: actions/download-artifact@v4 with: name: ${{ steps.vars.outputs.package-name }} path: . - name: Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v4 with: body_path: changelog.txt files: ${{ steps.vars.outputs.package-name }}.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - # Deploys the stable tag to WordPress.org repository - wordpress-org-release: - name: Release on WordPress.org - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Setup PHP 7.4 - uses: shivammathur/setup-php@v2 - with: - php-version: '7.4' - extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick - coverage: none - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: '12' - - name: Setup variables - id: vars - run: | - echo "::set-output name=yarn-cache-path::$(yarn cache dir)" - echo "::set-output name=composer-cache-path::$(composer config cache-files-dir)" - - name: Cache Yarn - uses: actions/cache@v1 - with: - path: ${{ steps.vars.outputs.yarn-cache-path }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: ${{ runner.os }}-yarn- - - name: Cache Composer - uses: actions/cache@v1 - with: - path: ${{ steps.vars.outputs.composer-cache-path }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - - name: Install Node dependencies - run: yarn install --no-progress - - name: Install Composer dependencies - run: composer install --no-progress - - name: Install Composer build dependencies - run: composer bin build install --no-progress - - name: Compose dependencies - run: composer compose - - name: Remove dev depencencies - run: | - rm -rf vendor - composer install --no-dev --no-progress - - name: Build static assets - run: yarn build:production - - name: Create .distignore file - run: cp .build-excludes .distignore - - name: Deploy to WordPress repository - uses: 10up/action-wordpress-plugin-deploy@1.4.0 - env: - SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} - SVN_USERNAME: ${{ secrets.SVN_USERNAME }} - SLUG: ${{ secrets.SLUG }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fb8a34e44..83b18ae92 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,177 +4,86 @@ on: push jobs: phpcs: - name: WordPress Coding Standards + name: PHP Coding Standards runs-on: ubuntu-latest + strategy: + matrix: + php: ['7.4', '8.0', '8.1', '8.2', '8.3'] steps: - name: Checkout uses: actions/checkout@v2 - - name: Setup variables - id: vars - run: | - echo "::set-output name=composer-cache-path::$(composer config cache-files-dir)" - - name: Setup PHP 7.4 + - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '7.4' + php-version: ${{ matrix.php }} extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick coverage: none - - name: Cache Composer - uses: actions/cache@v1 - with: - path: ${{ steps.vars.outputs.composer-cache-path }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - name: Install Composer dependencies - run: composer install --no-progress + uses: "ramsey/composer-install@v2" - name: Coding Standards run: composer phpcs phpstan: name: PHPStan runs-on: ubuntu-latest + strategy: + matrix: + php: ['7.4', '8.0', '8.1', '8.2', '8.3'] steps: - name: Checkout uses: actions/checkout@v2 - - name: Setup variables - id: vars - run: | - echo "::set-output name=composer-cache-path::$(composer config cache-files-dir)" - - name: Setup PHP 7.4 + - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '7.4' + php-version: ${{ matrix.php }} extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick coverage: none - - name: Cache Composer - uses: actions/cache@v1 - with: - path: ${{ steps.vars.outputs.composer-cache-path }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - name: Install Composer dependencies - run: composer install --no-progress - - name: Install Composer build dependencies - run: composer bin build install --no-progress - - name: Compose dependencies - run: composer compose + uses: "ramsey/composer-install@v2" - name: Analyze run: composer phpstan phplint: name: PHP Lint runs-on: ubuntu-latest + strategy: + matrix: + php: ['7.4', '8.0', '8.1', '8.2', '8.3'] steps: - name: Checkout uses: actions/checkout@v2 - - name: Setup variables - id: vars - run: | - echo "::set-output name=composer-cache-path::$(composer config cache-files-dir)" - - name: Setup PHP 7.4 + - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '7.4' + php-version: ${{ matrix.php }} extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick coverage: none - - name: Cache Composer - uses: actions/cache@v1 - with: - path: ${{ steps.vars.outputs.composer-cache-path }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - name: Install Composer dependencies - run: composer install --no-progress - - name: Install Composer build dependencies - run: composer bin build install --no-progress - - name: Compose dependencies - run: composer compose + uses: "ramsey/composer-install@v2" - name: Lint run: composer phplint - phpcompat: - name: PHP Compatibility (7.0) - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Setup variables - id: vars - run: | - echo "::set-output name=composer-cache-path::$(composer config cache-files-dir)" - - name: Setup PHP 7.4 - uses: shivammathur/setup-php@v2 - with: - php-version: '7.4' - extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick - coverage: none - - name: Cache Composer - uses: actions/cache@v1 - with: - path: ${{ steps.vars.outputs.composer-cache-path }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - - name: Install Composer dependencies - run: composer install --no-progress - - name: Install Composer build dependencies - run: composer bin build install --no-progress - - name: Compose dependencies - run: composer compose - - name: Check compatibility - run: composer phpcompat phpunit: name: PHPUnit runs-on: ubuntu-latest strategy: matrix: - php: ['7.0', '7.1', '7.2', '7.3', '7.4'] - services: - mysql: - image: mysql:5.7 - env: - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: wp_phpunit_tests - ports: - - 3306 - options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + php: ['7.4', '8.0', '8.1', '8.2', '8.3'] steps: - - name: Setup PHP 7.4 - uses: shivammathur/setup-php@v2 - with: - php-version: '7.4' - extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick - coverage: none - name: Checkout uses: actions/checkout@v2 - - name: Setup variables - id: vars - run: | - echo "::set-output name=composer-cache-path::$(composer config cache-files-dir)" - - name: Cache Composer - uses: actions/cache@v1 + - name: Setup Node + uses: actions/setup-node@v4 with: - path: ${{ steps.vars.outputs.composer-cache-path }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - - name: Set Composer version - run: composer self-update --2.2 + node-version: '16' + cache: yarn + - name: Install yarn dependencies + run: yarn install --immutable - name: Install Composer dependencies - run: composer install --no-progress - - name: Install Composer build dependencies - run: composer bin build install --no-progress - - name: Compose dependencies - run: composer compose - - name: Remove unused dependencies - run: composer remove --dev szepeviktor/phpstan-wordpress - - name: Setup PHP ${{ matrix.php }} - # https://github.com/shivammathur/setup-php/issues/446#issuecomment-824001225 - uses: shivammathur/setup-php@develop - with: - php-version: ${{ matrix.php }} - extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick - coverage: none - tools: none - - name: PHPUnit + uses: "ramsey/composer-install@v2" + - name: Start wp-env env: - WP_DB_HOST: 127.0.0.1:${{ job.services.mysql.ports['3306'] }} - run: composer phpunit + WP_ENV_PHP_VERSION: ${{ matrix.php }} + run: yarn run wp-env start + - name: Run Tests + run: yarn run test-php css: name: CSS Lint runs-on: ubuntu-latest @@ -182,21 +91,12 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Setup Node - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: - node-version: '12' - - name: Setup variables - id: vars - run: | - echo "::set-output name=yarn-cache-path::$(yarn cache dir)" - - name: Cache Yarn - uses: actions/cache@v1 - with: - path: ${{ steps.vars.outputs.yarn-cache-path }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: ${{ runner.os }}-yarn- - - name: Install Node dependencies - run: yarn install --no-progress + node-version: '16' + cache: yarn + - name: Install yarn dependencies + run: yarn install --immutable - name: CSS lint run: yarn lint:css js: @@ -206,20 +106,11 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: '12' - - name: Setup variables - id: vars - run: | - echo "::set-output name=yarn-cache-path::$(yarn cache dir)" - - name: Cache Yarn - uses: actions/cache@v1 + uses: actions/setup-node@v4 with: - path: ${{ steps.vars.outputs.yarn-cache-path }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: ${{ runner.os }}-yarn- - - name: Install Node dependencies - run: yarn install --no-progress + node-version: '16' + cache: yarn + - name: Install yarn dependencies + run: yarn install --immutable - name: JS lint run: yarn lint:js diff --git a/.gitignore b/.gitignore index e13c500d6..2d0151d22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,15 @@ - ### Project ### *.log +.phpunit.result.cache /classes/ node_modules/ /vendor/ package-lock.json /resources/*/dist/ -/src/Dependencies/ +/dependencies/ /tests/_wordpress/ /vendor-bin/**/vendor/ +compat/stubs.php ### Windows ### # Windows image file caches @@ -30,7 +31,6 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk - ### macOS ### *.DS_Store .AppleDouble @@ -39,7 +39,6 @@ $RECYCLE.BIN/ # Icon must end with two \r Icon - # Thumbnails ._* @@ -59,12 +58,10 @@ Network Trash Folder Temporary Items .apdisk - ### Sass ### .sass-cache/ *.css.map - ### SublimeText ### # cache files for sublime text *.tmlanguage.cache @@ -98,7 +95,6 @@ bh_unicode_properties.cache # https://packagecontrol.io/packages/sublime-github GitHub.sublime-settings - ### Vim ### # swap [._]*.s[a-w][a-z] @@ -110,4 +106,3 @@ Session.vim *~ # auto-generated tag files tags - diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 000000000..887f9402d --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,4 @@ +dependencies/**/* +node_modules/**/* +vendor/**/* +resources/css/dist/**/* diff --git a/.wp-env.json b/.wp-env.json new file mode 100644 index 000000000..35d8b477f --- /dev/null +++ b/.wp-env.json @@ -0,0 +1,6 @@ +{ + "phpVersion": "7.4", + "mappings": { + "wp-content/plugins/notification": "." + } +} diff --git a/README.md b/README.md index 2bdb3bcf8..d70ec7d6b 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ This covers all the taxonomies. Use `category`, `post_tag`, `another_taxonomy` i | Trigger name | Trigger slug | | :--- | :--- | | Available updates | `wordpress/updates_available` | +| WordPress updated | `wordpress/updated` | diff --git a/archived-changelog.txt b/archived-changelog.txt index 0176e2d08..2882c2747 100644 --- a/archived-changelog.txt +++ b/archived-changelog.txt @@ -1,5 +1,173 @@ This file contains old changelogs and it's refreshed periodically. +==================================================== VERSION 8 ==================================================== + += 8.0.15 = + +* [Fixed] Comment merge tags rendering empty values. +* [Changed] Development dependencies got some security patches. +* [Changed] `notification/merge_tag/value/resolve` now accepts unsanitized value. + += 8.0.14 = + +* [Fixed] Outdated dochoooks compatibility file, causing a fatal error while adding new post in some environments. + += 8.0.13 = + +* [Fixed] Regression with REST API check. +* [Changed] `repeater_api` internal runtime component to `api`. +* [Added] `get_endpoint` method to the API class. + += 8.0.12 = + +* [Changed] Logic of assigning property name is moved to Abstract Merge Tag Class. +* [Added] Property names to Term Merge Tags. +* [Added] 6h cache expire to the user queries. +* [Added] Email / Merge tag recipient now can also be separated with semicolon. +* [Added] Endpoint to check whether the REST api is enabled. + += 8.0.11 = + +* [Changed] Add php_xml to required php extensions. +* [Changed] Background processing cache is being stored in transient instead of an option. +* [Fixed] PHP 8.0 and 8.1 compatibility. +* [Fixed] Improper caching expiration times. +* [Fixed] Trigger keeping state between subsequent action runs. +* [Fixed] Password reset trigger is not processed on user registration anymore. +* [Added] Trigger `resume()` method to reset the stopped state. + += 8.0.10 = + +* [Fixed] User logout trigger. In WordPress 5.5 the context is set properly. +* [Fixed] Issue with persistent Trigger state if two or more actions assigned to the same trigger were called. +* [Changed] Carrier's recipients field is now returned with resolved data if available. +* [Added] Post Published privately trigger. + += 8.0.9 = + +* [Fixed] Merge Tags resolver problem caused by overriding the processed trigger instance. +* [Changed] `notification/should_send` filter is now executed when the queue is processed, not before the notification is added to the queue. +* [Added] New queue methods: `remove()` and `clear()`. + += 8.0.8 = + +* [Fixed] Two or more same triggers processed in the same request overwriting each other data. + += 8.0.7 = + +* [Fixed] Shortcode stripping regex that was matching JSON arrays. +* [Changed] Extensions are now reporting updates even if they are not activated. +* [Changed] Updated EDD Updater class. +* [Added] Webhook warning logging when response is not valid. + += 8.0.6 = + +* [Fixed] Extension activation notice link. +* [Fixed] Extension activation process. +* [Fixed] Incorrect empty merge tag cleaning which was misreading JSON format. + += 8.0.5 = + +* [Changed] Updated PHP dependencies. + += 8.0.4 = + +* [Changed] Updated PHP dependencies. +* [Changed] Extension license notice is now printed once and covers all the plugins. +* [Changed] Some of the core fields like Import/Export now have own setting classes. +* [Fixed] Remaining template variable escaping. +* [Removed] HTML Settings field, introduced in v8.0.3. Now it's required to create purpose-specific field classes. + += 8.0.3 = + +* [Added] HTML Settings field. +* [Added] Notification hash column in the Notification table. +* [Changed] Some of the Settings to HTML field instead of the Message field. +* [Fixed] Broken Import/Export sections. +* [Fixed] Notifications cache is now cleared when creating notification via wizard. + += 8.0.2 = + +* [Added] HTML escaping and nonce verifications. +* [Changed] Notification file syncing is now using Filesystem methods. +* [Changed] Internal cache classes with `micropackage/cache`. +* [Changed] Menu icon. +* [Changed] Vue is now loaded from within the plugin instead of CDN. +* [Removed] Internal cache classes `Bracketspace\Notification\Utils\Cache` and `Bracketspace\Notification\Utils\Interfaces` namespaces. +* [Removed] Settings internal caching that couldn't wait for all the fields to be registered. Now we're relying on the get_option() core function caching. + += 8.0.1 = + +* [Changed] Field and Merge Tag description field is now escaped and cannot contain any HTML tags. +* [Fixed] Recipients parser which didn't resolved Email Merge Tags. + += 8.0.0 = + +**Compatibility Breaking Changes** + +1. Runtime `get_filesystems()` method has been changed to `get_filesystem()` and now only root file system is defined. +2. Trigger `action()` method has been renamed to `context()`. +3. Trigger doesn't have the postponing feature anymore, as processing is happening on the `shutdown` action. +4. Trigger is now only a description object, all the processing is handled by the Runner class. +5. `notification/carrier/sent` action doesn't have the Notification context anymore, so there's no 3rd parameter. +6. Store classes now live under `BracketSpace\Notification\Store` namespace rather than `BracketSpace\Notification\Defaults\Store`. +7. Plugin doesn't cache anything anymore, the loading process is more streamlined and things like Post Types are lazy loaded when needed +8. Registration functions has been replaced with `Register` class and its static methods. +9. Multiple functions has been replaced with their static method equivalents. +10. `notification/elements` action has been deprecated, use `notification/init` instead. +11. `NOTIFICATION_VERSION` constant has been removed, use `Notification::version()` instead. +12. `BracketSpace\Notification\Vendor` namespace is replaced with `BracketSpace\Notification\Dependencies`. + +Removed deprecated hooks: +- `notification/notification/pre-send`, use `notification/carrier/pre-send` +- `notificaiton/notification/field/resolving`, use `notification/carrier/field/resolving` +- `notification/value/strip_empty_mergetags`, use `notification/resolve/strip_empty_mergetags` +- `notification/value/strip_shortcodes`, use `notification/carrier/field/value/strip_shortcodes` +- `notificaiton/notification/field/resolved`, use `notification/carrier/field/value/resolved` +- `notificaiton/merge_tag/value/resolved`, use `notification/merge_tag/value/resolved` +- `notification/webhook/remote_args/{$method}`, use `notification/carrier/webhook/remote_args/{$method}` +- `notification/webhook/called/{$method}`, use `notification/carrier/webhook/called/{$method}` +- `notification/boot/initial`, use `notification/init` +- `notification/boot`, use `notification/init` + +**Full changelog** + +* [Fixed] Code issues from not using static analysis. +* [Fixed] WordPress' balanceTags filter which was breaking the Notification content. +* [Fixed] Notification importing. +* [Fixed] Setting fields escaping. +* [Fixed] Post Updated Trigger which failed for updating pending posts, that doesn't have the slug yet. +* [Changed] Always return the single root filesystem in Runtime. +* [Changed] Stores with plugin objects, now they are much simpler and don't use WP filters. +* [Changed] Plugin loading stack, [see docs](https://docs.bracketspace.com/notification/developer/general/plugin-loading-chain) for more details. +* [Changed] Plugin settings now are initialized on `notification/init 5` action. +* [Changed] Recipients now can be loaded anytime, not only before Carriers get registered. +* [Changed] PHP Dependency handling, now all the PHP dependencies lives in src/Dependencies dir. +* [Removed] `Common` Abstract that has been replaced by HasName and HasSlug Traits. +* [Removed] Cache class and all caching mechanism for post types, taxonomies and comment types. +* [Removed] Trait Users. This is replaced with `BracketSpace\Notification\Queries\UserQueries` class. +* [Removed] Deprecated hooks for actions and filters. +* [Removed] Carrier helper functions: `notification_register_carrier`, `notification_get_carriers`, `notification_get_carrier`. +* [Removed] Recipient helper functions: `notification_register_recipient`, `notification_get_recipients`, `notification_get_carrier_recipients`, `notification_get_recipient`, `notification_parse_recipient`. +* [Removed] Resolver helper functions: `notification_register_resolver`, `notification_resolve`, `notification_clear_tags`. +* [Removed] Trigger helper functions: `notification_register_trigger`, `notification_get_triggers`, `notification_get_trigger`, `notification_get_triggers_grouped`. +* [Removed] GLobal Merge Tags helper functions: `notification_add_global_merge_tag`, `notification_get_global_merge_tags`. +* [Removed] Misc functions: `notification_display_wizard`, `notification_ajax_handler`, `notification_filesystem`. +* [Removed] Template functions: `notification_template`, `notification_get_template`. +* [Removed] Notification post functions: `notification_get_posts`, `notification_get_post_by_hash`, `notification_post_is_new`. +* [Removed] Syncing functions: `notification_sync`, `notification_get_sync_path`, `notification_is_syncing`. +* [Removed] Whitelabeling functions: `notification_whitelabel`, `notification_is_whitelabeled`. +* [Removed] Editor and Code Editor fields sanitizers to allow for HTML usage, ie. email templates. +* [Removed] `notification/elements` action hoook. +* [Removed] NOTIFICATION_VERSION constant. +* [Added] Runner class that processes the Triggers. +* [Added] ErrorHandler class that helps handle errors. It can throw an exception when NOTIFICATION_DEBUG is enabled or save a warning to error_log when it's disabled. +* [Added] Plugin settings value lazy loading. +* [Added] Email error catcher. +* [Added] Free and Premium extensions upselling. +* [Added] `Notification::fs()` helper that returns plugin filesystem. +* [Added] Core\Templates wrapper for Templates provider. + ==================================================== VERSION 7 ==================================================== = 7.2.4 = @@ -10,7 +178,7 @@ This file contains old changelogs and it's refreshed periodically. * [Fixed] Parent Comment ID Merge Tag returning reply ID not the parent. * [Changed] A check for activation nag if the user can manage options. Otherwise the useless notice is printed when a paid extension is not activated with license key, thanks to @mircobabini. * [Changed] Post published action to generic "publish_{post_type}" action which allows to trigger the notification when publishing from custom statuses. -* [Changed] Import process which now allows to import singular notification instead of always requireing a collection. +* [Changed] Import process which now allows to import singular notification instead of always requiring a collection. * [Added] [Filter for Background Processing](https://docs.bracketspace.com/notification/developer/snippets/general/background-processing-filter) which can be used to enable or disable particular trigger queueing. = 7.2.2 = @@ -85,7 +253,7 @@ This file contains old changelogs and it's refreshed periodically. 4. The plugin initializes now on `init 5` action and no functions/classes are available until then. You may use `notifiation/init` action to init the extensions and `notification/elements` to register custom Triggers and Carriers. 5. The Date and Time Merge Tags now require the Unix timestamp which shouldn't have the timezone offset. Use GMT timezone. 6. The `notification_runtime` function has been deprecated in favor of new `\Notification` static class. -7. Repeater and recipients fields on the front-end has been rewriten to use vue.js. Hooks for actions in js scripts for this fields provide now access to vue.js instance. Each repeater and recipient field, are now separate vue.js instances. +7. Repeater and recipients fields on the front-end has been rewritten to use vue.js. Hooks for actions in js scripts for this fields provide now access to vue.js instance. Each repeater and recipient field, are now separate vue.js instances. **Full changelog** @@ -98,9 +266,9 @@ This file contains old changelogs and it's refreshed periodically. * [Changed] Ajax utility to `micropackage/ajax`. * [Changed] Loading stack, now the plugin initializes on init 5 (or 4 if bundled). * [Changed] Merge Tags don't need the requirements now and throwable resolver errors are caught and changed to notices. -* [Changed] Date and Time Merge Tags now expect Unix timestaps (GMT) without offset. +* [Changed] Date and Time Merge Tags now expect Unix timestamps (GMT) without offset. * [Changed] All Trigger's slugs. -* [Changed] Settings section `notifiations` to proper `carriers` to follow the standard established in version 6. +* [Changed] Settings section `notifications` to proper `carriers` to follow the standard established in version 6. * [Changed] Repeater and recipient fields are now using vue.js on the front-end. * [Changed] Pretty select fields in the repeater and recipient fields are now handled by vue.js lifecycle hooks. * [Changed] `NOTIFICATION_VERSION` constant to `\Notification::version()` method. @@ -108,7 +276,7 @@ This file contains old changelogs and it's refreshed periodically. * [Changed] The Recipients section in Carrier box now displays Type column even if a single recipient type is registered. * [Added] Webhook and Cache trait. * [Added] Webhook JSON Carrier with plain JSON input code field. -* [Added] Composer imposter package to aviod package conflicts. +* [Added] Composer imposter package to avoid package conflicts. * [Added] `notification_filesystem` function to get plugin filesystem(s). * [Added] Scheduling user Merge Tags for Post Scheduled trigger. * [Added] Last updated by user Merge Tags for Post triggers. @@ -175,7 +343,7 @@ This file contains old changelogs and it's refreshed periodically. * [Fixed] Error when a new user was added by logged in user, the password reset notification was sent. = 6.1.4 = -* [Fixed] Addig the same Notification twice from the Wizard. Now Notification hash is regenerated. +* [Fixed] Adding the same Notification twice from the Wizard. Now Notification hash is regenerated. * [Changed] Post triggers now setup properties after checking all the conditions. This way second action call with wrong params won't change the trigger state. Thanks to Tom Angell. = 6.1.3 = @@ -211,7 +379,7 @@ This file contains old changelogs and it's refreshed periodically. * [Removed] Plugin internationalization files as all the translations comes from wp.org. = 6.0.4 = -* [Fixed] Webhook waring using empty header values. +* [Fixed] Webhook warning using empty header values. * [Fixed] Quick switch in Notifications table. * [Fixed] Catching Notifications. * [Added] Basic Gutenberg compatibility, post triggers are now postponed to `rest_after_insert_{$post_type}` action. @@ -391,7 +559,7 @@ This file contains old changelogs and it's refreshed periodically. * [Fixed] Bug when recipient types has been changed. * [Fixed] Every comment type being targeted in Comment trigger. * [Fixed] Used failed login datetime merge tag. -* [Added] `remove_action` metod in Trigger class. +* [Added] `remove_action` method in Trigger class. * [Added] Option to allow unfiltered HTML in Email body, thanks to @martinellimarco. * [Added] Post content HTML tag, for unfiltered output. * [Added] Better JSON support for webhooks, if webhook is sent as JSON the default Content-Type header is added. @@ -402,11 +570,11 @@ This file contains old changelogs and it's refreshed periodically. * [Fixed] Duplicated meta for active notification type. * [Fixed] Post Title merge tag HTML entities, thanks to @freshjustin. * [Fixed] Problem with disabling active notification types when switching notification status, thanks to @freshjustin. -* [Added] Notification duplicator to easly duplicate notifications. +* [Added] Notification duplicator to easily duplicate notifications. * [Added] `notification/trigger/action/did` action in Trigger class. * [Added] `get_post_type` method for PostTrigger. * [Added] `notification/load/default/priority` filter for registering default things. -* [Added] `user_IP` Merge Tag for User loged in Trigger. +* [Added] `user_IP` Merge Tag for User logged in Trigger. * [Changed] Plugin initializes the default things on `plugins_loaded` action. = 5.2.2 = @@ -494,10 +662,10 @@ This file contains old changelogs and it's refreshed periodically. = 5.1.2 = * [Added] Ability to suppress the Notification just before it's send. * [Added] Freemius integration to better understand the users. -* [Added] Current Notification post ID property for Notifiation object. +* [Added] Current Notification post ID property for Notification object. = 5.1.1 = -* [Fixed] Posponed action callback. +* [Fixed] Postponed action callback. * [Added] Support for NOTIFICATION_DEBUG constant. If it's defined the cache for extensions is not applied. * [Added] notificaiton/notification/field/resolving filter before any value is resolved with merge tags. @@ -511,7 +679,7 @@ This file contains old changelogs and it's refreshed periodically. * [Added] License handler for premium extensions = 5.0.0 = -* WARNING! This version is not compatible with previous version. No core notifications nor custom triggers will be transfered to the new version because of too many changes in the plugin. Consider updating the plugin in a safe, not-production environment. +* WARNING! This version is not compatible with previous version. No core notifications nor custom triggers will be transferred to the new version because of too many changes in the plugin. Consider updating the plugin in a safe, not-production environment. * Plugin has been redesigned from ground up * The only thing which is not available in new version is disabling the notifications @@ -552,7 +720,7 @@ This file contains old changelogs and it's refreshed periodically. = 3.0 = * [Fixed] Ignore tags which has been passed to `notification` but hasn't be registered in the trigger * [Fixed] Conflict with Advanced Custom Fields -* [Added] Filters for post and comment types to output disbale metabox. `notification/disable/post_types_allowed` and `notification/disable/comment_types_allowed`, default to saved general settings +* [Added] Filters for post and comment types to output disable metabox. `notification/disable/post_types_allowed` and `notification/disable/comment_types_allowed`, default to saved general settings * [Added] Extensions screen * [Added] While registering triggers you can now provide a default title and recipients * [Changed] bbPress post types are no longer available in the settings. Triggers for bbPress are provided by addon https://github.com/Kubitomakita/notification-bbpress @@ -561,7 +729,7 @@ This file contains old changelogs and it's refreshed periodically. = 2.4 = * [Fixed] Bug with "Can't use method return value in write context" in Settings class, thanks to @rozv -* [Fixed] Settings priorities, now every CPT registered not later than init 15 will be catched by the plugin, thanks to @rozv +* [Fixed] Settings priorities, now every CPT registered not later than init 15 will be caught by the plugin, thanks to @rozv * [Fixed] Double protocol in links added via TinyMCE insert link feature, thanks to Jozsef * [Fixed] Notices in Notification validation method * [Fixed] Empty Recipient value, ie. Administrator @@ -592,7 +760,7 @@ This file contains old changelogs and it's refreshed periodically. * [Fixed] Post type trashed template * [Changed] Gulpfile to not include any browser * [Fixed] Comment type added template -* [Changed] Comment added trigger now is Akismet compatibile, thanks to Nels Johnson +* [Changed] Comment added trigger now is Akismet compatible, thanks to Nels Johnson * [Changed] Core triggers current type global to anonymous functions, thanks to Bartosz Romanowski @toszcze = 2.1 = @@ -613,17 +781,17 @@ This file contains old changelogs and it's refreshed periodically. * [Added]: Plugin deactivation feedback popup * [Added]: Conditional tag `is_notification_defined()` to check if notification will be send * [Added]: Post permalink to comment triggers -* [Changed]: Notifications class is now singleton and partialy moved to Admin class +* [Changed]: Notifications class is now singleton and partially moved to Admin class * [Changed]: Notification trigger metabox is now under the subject * [Changed]: On the single Notification edit screen there are only allowed metaboxes displayed -* [Changed]: You can now controll what post types and comment types trigger use via plugin Settings +* [Changed]: You can now control what post types and comment types trigger use via plugin Settings = 1.4 = * [Fixed]: Missing 3rd argument on page publish * [Fixed]: Namespace issue for PHP < 5.3 * [Fixed]: Constant notification on post edit. Thanks to @pehbeh * [Changed]: Allow for merge tags empty values. Thanks to kokoq -* [Added]: Admin notice: beg for a review. It will display only if there's at least one notification set, on the Notification plugin screens and can be dismissed easly. +* [Added]: Admin notice: beg for a review. It will display only if there's at least one notification set, on the Notification plugin screens and can be dismissed easily. = 1.3.1 = * [Fixed]: Error with "Can't use function return value in write context" in empty() function. Thanks to Błażej Zabłotny diff --git a/compat/component-aliases.php b/compat/component-aliases.php new file mode 100644 index 000000000..be580f27a --- /dev/null +++ b/compat/component-aliases.php @@ -0,0 +1,40 @@ + Core\Cron::class, + 'core_whitelabel' => Core\Whitelabel::class, + 'core_debugging' => Core\Debugging::class, + 'core_settings' => Core\Settings::class, + 'core_upgrade' => Core\Upgrade::class, + 'core_sync' => Core\Sync::class, + 'core_binder' => Core\Binder::class, + 'core_processor' => Core\Processor::class, + 'test_rest_api' => Compat\RestApiCompat::class, + 'admin_impexp' => Admin\ImportExport::class, + 'admin_settings' => Admin\Settings::class, + 'admin_duplicator' => Admin\NotificationDuplicator::class, + 'admin_post_type' => Admin\PostType::class, + 'admin_post_table' => Admin\PostTable::class, + 'admin_extensions' => Admin\Extensions::class, + 'admin_scripts' => Admin\Scripts::class, + 'admin_screen' => Admin\Screen::class, + 'admin_wizard' => Admin\Wizard::class, + 'admin_sync' => Admin\Sync::class, + 'admin_debugging' => Admin\Debugging::class, + 'admin_upsell' => Admin\Upsell::class, + 'integration_wp' => Integration\WordPressIntegration::class, + 'integration_wp_emails' => Integration\WordPressEmails::class, + 'integration_2fa' => Integration\TwoFactor::class, + 'api' => Api\Api::class, +]; diff --git a/compat/register-hooks.php b/compat/register-hooks.php index 3a59f4736..c4d6bc3dd 100644 --- a/compat/register-hooks.php +++ b/compat/register-hooks.php @@ -1,100 +1,112 @@ component( 'core_cron' ), 'register_intervals' ], 10, 1 ); -add_action( 'admin_init', [ $this->component( 'core_cron' ), 'register_check_updates_event' ], 10, 0 ); -add_action( 'notification/init', [ $this->component( 'core_whitelabel' ), 'remove_defaults' ], 1000, 0 ); -add_action( 'notification/carrier/pre-send', [ $this->component( 'core_debugging' ), 'catch_notification' ], 1000000, 3 ); -add_action( 'admin_menu', [ $this->component( 'core_settings' ), 'register_page' ], 20, 0 ); -add_action( 'notification/init', [ $this->component( 'core_settings' ), 'register_settings' ], 5, 0 ); -add_action( 'admin_init', [ $this->component( 'core_upgrade' ), 'check_upgrade' ], 10, 0 ); -add_action( 'notification/init', [ $this->component( 'core_upgrade' ), 'upgrade_db' ], 10, 0 ); -add_action( 'notification/init', [ $this->component( 'core_sync' ), 'load_local_json' ], 100, 0 ); -add_action( 'notification/data/save/after', [ $this->component( 'core_sync' ), 'save_local_json' ], 10, 1 ); -add_action( 'delete_post', [ $this->component( 'core_sync' ), 'delete_local_json' ], 10, 1 ); -add_action( 'notification/trigger/registered', [ $this->component( 'core_binder' ), 'bind' ], 100, 1 ); -add_action( 'shutdown', [ $this->component( 'core_processor' ), 'process_queue' ], 10, 0 ); -add_action( 'notification_background_processing', [ $this->component( 'core_processor' ), 'handle_cron' ], 10, 2 ); -add_action( 'admin_notices', [ $this->component( 'test_rest_api' ), 'test_rest_api' ], 10, 0 ); -add_action( 'admin_post_notification_export', [ $this->component( 'admin_impexp' ), 'export_request' ], 10, 0 ); -add_action( 'wp_ajax_notification_import_json', [ $this->component( 'admin_impexp' ), 'import_request' ], 10, 0 ); -add_filter( 'notification/settings/triggers/valid_post_types', [ $this->component( 'admin_settings' ), 'filter_post_types' ], 10, 1 ); -add_filter( 'post_row_actions', [ $this->component( 'admin_duplicator' ), 'add_duplicate_row_action' ], 50, 2 ); -add_action( 'admin_post_notification_duplicate', [ $this->component( 'admin_duplicator' ), 'notification_duplicate' ], 10, 0 ); -add_action( 'init', [ $this->component( 'admin_post_type' ), 'register' ], 10, 0 ); -add_filter( 'post_updated_messages', [ $this->component( 'admin_post_type' ), 'post_updated_messages' ], 10, 1 ); -add_filter( 'bulk_post_updated_messages', [ $this->component( 'admin_post_type' ), 'bulk_action_messages' ], 10, 2 ); -add_filter( 'views_edit-notification', [ $this->component( 'admin_post_type' ), 'change_post_statuses' ], 10, 1 ); -add_action( 'wp_trash_post', [ $this->component( 'admin_post_type' ), 'bypass_trash' ], 100, 1 ); -add_filter( 'wp_insert_post_data', [ $this->component( 'admin_post_type' ), 'create_notification_hash' ], 100, 2 ); -add_action( 'save_post_notification', [ $this->component( 'admin_post_type' ), 'save' ], 10, 3 ); -add_action( 'wp_ajax_change_notification_status', [ $this->component( 'admin_post_type' ), 'ajax_change_notification_status' ], 10, 0 ); -add_action( 'notification/init', [ $this->component( 'admin_post_type' ), 'setup_notifications' ], 9999999, 0 ); -add_filter( 'manage_notification_posts_columns', [ $this->component( 'admin_post_table' ), 'table_columns' ], 10, 1 ); -add_action( 'manage_notification_posts_custom_column', [ $this->component( 'admin_post_table' ), 'table_column_content' ], 10, 2 ); -add_filter( 'display_post_states', [ $this->component( 'admin_post_table' ), 'remove_status_display' ], 10, 2 ); -add_filter( 'post_row_actions', [ $this->component( 'admin_post_table' ), 'remove_quick_edit' ], 10, 2 ); -add_filter( 'post_row_actions', [ $this->component( 'admin_post_table' ), 'adjust_trash_link' ], 10, 2 ); -add_filter( 'bulk_actions-edit-notification', [ $this->component( 'admin_post_table' ), 'adjust_bulk_actions' ], 10, 1 ); -add_filter( 'handle_bulk_actions-edit-notification', [ $this->component( 'admin_post_table' ), 'handle_status_bulk_actions' ], 10, 3 ); -add_action( 'admin_notices', [ $this->component( 'admin_post_table' ), 'display_bulk_actions_admin_notices' ], 10, 0 ); -add_action( 'admin_menu', [ $this->component( 'admin_extensions' ), 'register_page' ], 10, 0 ); -add_action( 'admin_init', [ $this->component( 'admin_extensions' ), 'updater' ], 10, 0 ); -add_action( 'admin_post_notification_activate_extension', [ $this->component( 'admin_extensions' ), 'activate' ], 10, 0 ); -add_action( 'admin_post_notification_deactivate_extension', [ $this->component( 'admin_extensions' ), 'deactivate' ], 10, 0 ); -add_action( 'admin_notices', [ $this->component( 'admin_extensions' ), 'activation_notices' ], 10, 0 ); -add_action( 'admin_notices', [ $this->component( 'admin_extensions' ), 'activation_nag' ], 10, 0 ); -add_action( 'admin_enqueue_scripts', [ $this->component( 'admin_scripts' ), 'enqueue_scripts' ], 10, 1 ); -add_action( 'edit_form_after_title', [ $this->component( 'admin_screen' ), 'render_main_column' ], 1, 1 ); -add_action( 'notification/post/column/main', [ $this->component( 'admin_screen' ), 'render_trigger_select' ], 10, 1 ); -add_action( 'notification/post/column/main', [ $this->component( 'admin_screen' ), 'render_carrier_boxes' ], 20, 1 ); -add_action( 'notification/admin/carriers', [ $this->component( 'admin_screen' ), 'render_carriers_widget' ], 10, 1 ); -add_action( 'add_meta_boxes', [ $this->component( 'admin_screen' ), 'add_save_meta_box' ], 10, 0 ); -add_action( 'add_meta_boxes', [ $this->component( 'admin_screen' ), 'add_merge_tags_meta_box' ], 10, 0 ); -add_action( 'add_meta_boxes', [ $this->component( 'admin_screen' ), 'metabox_cleanup' ], 999999999, 0 ); -add_action( 'current_screen', [ $this->component( 'admin_screen' ), 'add_help' ], 10, 1 ); -add_action( 'wp_ajax_get_merge_tags_for_trigger', [ $this->component( 'admin_screen' ), 'ajax_render_merge_tags' ], 10, 0 ); -add_action( 'admin_menu', [ $this->component( 'admin_wizard' ), 'register_page' ], 30, 0 ); -add_action( 'current_screen', [ $this->component( 'admin_wizard' ), 'maybe_redirect' ], 10, 0 ); -add_action( 'admin_post_save_notification_wizard', [ $this->component( 'admin_wizard' ), 'save_settings' ], 10, 0 ); -add_action( 'admin_post_save_notification_wizard', [ $this->component( 'admin_wizard' ), 'add_notifications' ], 10, 1 ); -add_action( 'wp_ajax_notification_sync', [ $this->component( 'admin_sync' ), 'ajax_sync' ], 10, 0 ); -add_action( 'admin_notices', [ $this->component( 'admin_debugging' ), 'debug_warning' ], 10, 0 ); -add_action( 'admin_post_notification_clear_logs', [ $this->component( 'admin_debugging' ), 'action_clear_logs' ], 10, 0 ); -add_action( 'add_meta_boxes', [ $this->component( 'admin_upsell' ), 'add_conditionals_meta_box' ], 10, 0 ); -add_action( 'notification/metabox/trigger/tags/groups/after', [ $this->component( 'admin_upsell' ), 'custom_fields_merge_tag_group' ], 10, 0 ); -add_action( 'notification/admin/metabox/save/post', [ $this->component( 'admin_upsell' ), 'review_queue_switch' ], 10, 0 ); -add_action( 'notification/settings/register', [ $this->component( 'admin_upsell' ), 'scheduled_triggers_settings' ], 200, 1 ); -add_action( 'notification/settings/section/triggers/before', [ $this->component( 'admin_upsell' ), 'triggers_settings_upsell' ], 10, 0 ); -add_action( 'notification/settings/section/carriers/before', [ $this->component( 'admin_upsell' ), 'carriers_settings_upsell' ], 10, 0 ); -add_action( 'notification/carrier/list/after', [ $this->component( 'admin_upsell' ), 'carriers_list' ], 10, 0 ); -add_action( 'notification/settings/sidebar/after', [ $this->component( 'admin_upsell' ), 'custom_development' ], 10, 0 ); -add_filter( 'wp_mail_from_name', [ $this->component( 'integration_wp' ), 'filter_email_from_name' ], 1000, 1 ); -add_filter( 'wp_mail_from', [ $this->component( 'integration_wp' ), 'filter_email_from_email' ], 1000, 1 ); -add_filter( 'notification/background_processing/trigger_key', [ $this->component( 'integration_wp' ), 'identify_trigger' ], 10, 2 ); -add_action( 'wp_insert_comment', [ $this->component( 'integration_wp' ), 'proxy_comment_reply' ], 10, 2 ); -add_action( 'comment_post', [ $this->component( 'integration_wp' ), 'proxy_post_comment_to_published' ], 10, 2 ); -add_action( 'transition_comment_status', [ $this->component( 'integration_wp' ), 'proxy_transition_comment_status_to_published' ], 10, 3 ); -add_action( 'notification/init', [ $this->component( 'integration_wp_emails' ), 'replace_new_user_notify_hooks' ], 10, 0 ); -add_filter( 'notify_post_author', [ $this->component( 'integration_wp_emails' ), 'disable_post_author_notify' ], 10, 2 ); -add_filter( 'notify_moderator', [ $this->component( 'integration_wp_emails' ), 'disable_comment_moderator_notify' ], 10, 2 ); -add_action( 'notification/init', [ $this->component( 'integration_wp_emails' ), 'disable_password_change_notify_to_admin' ], 10, 0 ); -add_action( 'notification/init', [ $this->component( 'integration_wp_emails' ), 'disable_send_confirmation_on_profile_email' ], 10, 0 ); -add_action( 'notification/init', [ $this->component( 'integration_wp_emails' ), 'disable_send_confirmation_on_admin_email' ], 10, 0 ); -add_filter( 'send_password_change_email', [ $this->component( 'integration_wp_emails' ), 'disable_password_change_notify_to_user' ], 10, 3 ); -add_filter( 'retrieve_password_message', [ $this->component( 'integration_wp_emails' ), 'disable_password_reset_notify_to_user' ], 100, 1 ); -add_filter( 'send_email_change_email', [ $this->component( 'integration_wp_emails' ), 'disable_email_change_notify_to_user' ], 10, 3 ); -add_filter( 'auto_core_update_send_email', [ $this->component( 'integration_wp_emails' ), 'disable_automatic_wp_core_update_notify' ], 10, 4 ); -add_action( 'notification/trigger/registered', [ $this->component( 'integration_2fa' ), 'add_trigger_action' ], 10, 1 ); -add_action( 'two_factor_user_authenticated', [ $this->component( 'integration_2fa' ), 'user_login_with_2fa' ], 10, 1 ); -add_action( 'rest_api_init', [ $this->component( 'api' ), 'rest_api_init' ], 10, 0 ); +add_action('notification/init', [$this, 'defaults'], 8, 0); +add_filter('cron_schedules', [$this->component('BracketSpace\Notification\Core\Cron'), 'registerIntervals'], 10, 1); +add_action('admin_init', [$this->component('BracketSpace\Notification\Core\Cron'), 'registerCheckUpdatesEvent'], 10, 0); +add_action('notification/init', [$this->component('BracketSpace\Notification\Core\Whitelabel'), 'removeDefaults'], 1000, 0); +add_action('notification/carrier/pre-send', [$this->component('BracketSpace\Notification\Core\Debugging'), 'catchNotification'], 1000000, 3); +add_action('admin_menu', [$this->component('BracketSpace\Notification\Core\Settings'), 'registerPage'], 20, 0); +add_action('notification/init', [$this->component('BracketSpace\Notification\Core\Settings'), 'registerSettings'], 5, 0); +add_action('notification/init', [$this->component('BracketSpace\Notification\Core\Upgrade'), 'checkUpgrade'], 100, 0); +add_action('notification/init', [$this->component('BracketSpace\Notification\Core\Upgrade'), 'upgradeDb'], 10, 0); +add_action('notification/init', [$this->component('BracketSpace\Notification\Core\Sync'), 'loadLocalJson'], 100, 0); +add_action('notification/data/saved', [$this->component('BracketSpace\Notification\Core\Sync'), 'saveLocalJson'], 10, 1); +add_action('delete_post', [$this->component('BracketSpace\Notification\Core\Sync'), 'deleteLocalJson'], 10, 1); +add_action('notification/trigger/registered', [$this->component('BracketSpace\Notification\Core\Binder'), 'bind'], 100, 1); +add_action('shutdown', [$this->component('BracketSpace\Notification\Core\Processor'), 'processQueue'], 10, 0); +add_action('notification_background_processing', [$this->component('BracketSpace\Notification\Core\Processor'), 'handleCron'], 10, 2); +add_action('notification/settings/register', [$this->component('BracketSpace\Notification\Admin\ImportExport'), 'settings'], 60, 1); +add_action('admin_post_notification_export', [$this->component('BracketSpace\Notification\Admin\ImportExport'), 'exportRequest'], 10, 0); +add_action('wp_ajax_notification_import_json', [$this->component('BracketSpace\Notification\Admin\ImportExport'), 'importRequest'], 10, 0); +add_action('notification/settings/register', [$this->component('BracketSpace\Notification\Admin\Settings'), 'generalSettings'], 10, 1); +add_action('notification/settings/register', [$this->component('BracketSpace\Notification\Admin\Settings'), 'triggersSettings'], 20, 1); +add_action('notification/settings/register', [$this->component('BracketSpace\Notification\Admin\Settings'), 'carriersSettings'], 30, 1); +add_action('notification/settings/register', [$this->component('BracketSpace\Notification\Admin\Settings'), 'emailsSettings'], 40, 1); +add_filter('notification/settings/triggers/valid_post_types', [$this->component('BracketSpace\Notification\Admin\Settings'), 'filterPostTypes'], 10, 1); +add_filter('post_row_actions', [$this->component('BracketSpace\Notification\Admin\NotificationDuplicator'), 'addDuplicateRowAction'], 50, 2); +add_action('admin_post_notification_duplicate', [$this->component('BracketSpace\Notification\Admin\NotificationDuplicator'), 'notificationDuplicate'], 10, 0); +add_action('init', [$this->component('BracketSpace\Notification\Admin\PostType'), 'register'], 10, 0); +add_filter('post_updated_messages', [$this->component('BracketSpace\Notification\Admin\PostType'), 'postUpdatedMessages'], 10, 1); +add_filter('bulk_post_updated_messages', [$this->component('BracketSpace\Notification\Admin\PostType'), 'bulkActionMessages'], 10, 2); +add_filter('views_edit-notification', [$this->component('BracketSpace\Notification\Admin\PostType'), 'changePostStatuses'], 10, 1); +add_action('wp_trash_post', [$this->component('BracketSpace\Notification\Admin\PostType'), 'bypassTrash'], 100, 1); +add_action('after_delete_post', [$this->component('BracketSpace\Notification\Admin\PostType'), 'deleteNotification'], 100, 2); +add_action('save_post_notification', [$this->component('BracketSpace\Notification\Admin\PostType'), 'save'], 10, 3); +add_action('wp_ajax_change_notification_status', [$this->component('BracketSpace\Notification\Admin\PostType'), 'ajaxChangeNotificationStatus'], 10, 0); +add_filter('manage_notification_posts_columns', [$this->component('BracketSpace\Notification\Admin\PostTable'), 'tableColumns'], 10, 1); +add_filter('manage_edit-notification_columns', [$this->component('BracketSpace\Notification\Admin\PostTable'), 'columnCleanup'], 999999999, 1); +add_action('manage_notification_posts_custom_column', [$this->component('BracketSpace\Notification\Admin\PostTable'), 'tableColumnContent'], 10, 2); +add_filter('display_post_states', [$this->component('BracketSpace\Notification\Admin\PostTable'), 'removeStatusDisplay'], 10, 2); +add_filter('post_row_actions', [$this->component('BracketSpace\Notification\Admin\PostTable'), 'removeQuickEdit'], 10, 2); +add_filter('post_row_actions', [$this->component('BracketSpace\Notification\Admin\PostTable'), 'adjustTrashLink'], 10, 2); +add_filter('bulk_actions-edit-notification', [$this->component('BracketSpace\Notification\Admin\PostTable'), 'adjustBulkActions'], 10, 1); +add_filter('handle_bulk_actions-edit-notification', [$this->component('BracketSpace\Notification\Admin\PostTable'), 'handleStatusBulkActions'], 10, 3); +add_action('admin_notices', [$this->component('BracketSpace\Notification\Admin\PostTable'), 'displayBulkActionsAdminNotices'], 10, 0); +add_action('admin_menu', [$this->component('BracketSpace\Notification\Admin\Extensions'), 'registerPage'], 10, 0); +add_action('admin_init', [$this->component('BracketSpace\Notification\Admin\Extensions'), 'updater'], 10, 0); +add_action('admin_post_notification_activate_extension', [$this->component('BracketSpace\Notification\Admin\Extensions'), 'activate'], 10, 0); +add_action('admin_post_notification_deactivate_extension', [$this->component('BracketSpace\Notification\Admin\Extensions'), 'deactivate'], 10, 0); +add_action('admin_notices', [$this->component('BracketSpace\Notification\Admin\Extensions'), 'activationNotices'], 10, 0); +add_action('admin_notices', [$this->component('BracketSpace\Notification\Admin\Extensions'), 'activationNag'], 10, 0); +add_action('notification/admin/extensions/premium/pre', [$this->component('BracketSpace\Notification\Admin\Extensions'), 'inactiveLicenseWarning'], 10, 0); +add_action('admin_enqueue_scripts', [$this->component('BracketSpace\Notification\Admin\Scripts'), 'enqueueScripts'], 10, 1); +add_action('load-post.php', [$this->component('BracketSpace\Notification\Admin\Screen'), 'setupNotification'], 10, 0); +add_action('edit_form_after_title', [$this->component('BracketSpace\Notification\Admin\Screen'), 'renderMainColumn'], 1, 1); +add_action('notification/post/column/main', [$this->component('BracketSpace\Notification\Admin\Screen'), 'renderTriggerSelect'], 10, 1); +add_action('notification/post/column/main', [$this->component('BracketSpace\Notification\Admin\Screen'), 'renderCarrierBoxes'], 20, 1); +add_action('notification/admin/carriers', [$this->component('BracketSpace\Notification\Admin\Screen'), 'renderCarriersWidget'], 10, 1); +add_action('add_meta_boxes', [$this->component('BracketSpace\Notification\Admin\Screen'), 'addSaveMetaBox'], 10, 0); +add_action('add_meta_boxes', [$this->component('BracketSpace\Notification\Admin\Screen'), 'addMergeTagsMetaBox'], 10, 0); +add_action('add_meta_boxes', [$this->component('BracketSpace\Notification\Admin\Screen'), 'metaboxCleanup'], 999999999, 0); +add_action('current_screen', [$this->component('BracketSpace\Notification\Admin\Screen'), 'addHelp'], 10, 1); +add_action('wp_ajax_get_merge_tags_for_trigger', [$this->component('BracketSpace\Notification\Admin\Screen'), 'ajaxRenderMergeTags'], 10, 0); +add_action('admin_menu', [$this->component('BracketSpace\Notification\Admin\Wizard'), 'registerPage'], 30, 0); +add_action('current_screen', [$this->component('BracketSpace\Notification\Admin\Wizard'), 'maybeRedirect'], 10, 0); +add_action('admin_post_save_notification_wizard', [$this->component('BracketSpace\Notification\Admin\Wizard'), 'saveSettings'], 10, 0); +add_action('admin_post_save_notification_wizard', [$this->component('BracketSpace\Notification\Admin\Wizard'), 'addNotifications'], 10, 1); +add_action('notification/settings/register', [$this->component('BracketSpace\Notification\Admin\Sync'), 'settings'], 50, 1); +add_action('wp_ajax_notification_sync', [$this->component('BracketSpace\Notification\Admin\Sync'), 'ajaxSync'], 10, 0); +add_action('notification/settings/register', [$this->component('BracketSpace\Notification\Admin\Debugging'), 'debuggingSettings'], 70, 1); +add_action('admin_notices', [$this->component('BracketSpace\Notification\Admin\Debugging'), 'debugWarning'], 10, 0); +add_action('admin_post_notification_clear_logs', [$this->component('BracketSpace\Notification\Admin\Debugging'), 'actionClearLogs'], 10, 0); +add_action('add_meta_boxes', [$this->component('BracketSpace\Notification\Admin\Upsell'), 'addConditionalsMetaBox'], 10, 0); +add_action('notification/metabox/trigger/tags/groups/after', [$this->component('BracketSpace\Notification\Admin\Upsell'), 'customFieldsMergeTagGroup'], 10, 0); +add_action('notification/admin/metabox/save/post', [$this->component('BracketSpace\Notification\Admin\Upsell'), 'reviewQueueSwitch'], 10, 0); +add_action('notification/settings/register', [$this->component('BracketSpace\Notification\Admin\Upsell'), 'scheduledTriggersSettings'], 200, 1); +add_action('notification/settings/section/triggers/before', [$this->component('BracketSpace\Notification\Admin\Upsell'), 'triggersSettingsUpsell'], 10, 0); +add_action('notification/settings/section/carriers/before', [$this->component('BracketSpace\Notification\Admin\Upsell'), 'carriersSettingsUpsell'], 10, 0); +add_action('notification/carrier/list/after', [$this->component('BracketSpace\Notification\Admin\Upsell'), 'carriersList'], 10, 0); +add_action('notification/settings/sidebar/after', [$this->component('BracketSpace\Notification\Admin\Upsell'), 'customDevelopment'], 10, 0); +add_action('notification/init', [$this->component('BracketSpace\Notification\Integration\WordPressIntegration'), 'loadDatabaseNotifications'], 9999999, 0); +add_filter('notification/background_processing/trigger_key', [$this->component('BracketSpace\Notification\Integration\WordPressIntegration'), 'identifyTrigger'], 10, 2); +add_action('wp_insert_comment', [$this->component('BracketSpace\Notification\Integration\WordPressIntegration'), 'proxyCommentReply'], 10, 2); +add_action('comment_post', [$this->component('BracketSpace\Notification\Integration\WordPressIntegration'), 'proxyPostCommentToPublished'], 10, 2); +add_action('transition_comment_status', [$this->component('BracketSpace\Notification\Integration\WordPressIntegration'), 'proxyTransitionCommentStatusToPublished'], 10, 3); +add_action('notification/init', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'replaceNewUserNotifyHooks'], 10, 0); +add_filter('notify_post_author', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disablePostAuthorNotify'], 10, 2); +add_filter('notify_moderator', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disableCommentModeratorNotify'], 10, 2); +add_action('notification/init', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disablePasswordChangeNotifyToAdmin'], 10, 0); +add_action('notification/init', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disableSendConfirmationOnProfileEmail'], 10, 0); +add_action('notification/init', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disableSendConfirmationOnAdminEmail'], 10, 0); +add_filter('send_site_admin_email_change_email', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disableSendConfirmationOnAdminEmailChanged'], 10, 0); +add_filter('send_password_change_email', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disablePasswordChangeNotifyToUser'], 10, 3); +add_filter('retrieve_password_message', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disablePasswordResetNotifyToUser'], 100, 1); +add_filter('send_email_change_email', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disableEmailChangeNotifyToUser'], 10, 3); +add_filter('auto_core_update_send_email', [$this->component('BracketSpace\Notification\Integration\WordPressEmails'), 'disableAutomaticWpCoreUpdateNotify'], 10, 4); +add_action('notification/trigger/registered', [$this->component('BracketSpace\Notification\Integration\TwoFactor'), 'addTriggerAction'], 10, 1); +add_action('two_factor_user_authenticated', [$this->component('BracketSpace\Notification\Integration\TwoFactor'), 'userLoginWith2fa'], 10, 1); +add_action('rest_api_init', [$this->component('BracketSpace\Notification\Api\Api'), 'restApiInit'], 10, 0); +add_action('admin_notices', [$this->component('BracketSpace\Notification\Compat\WebhookCompat'), 'displayNotice'], 10, 0); +add_action('admin_notices', [$this->component('BracketSpace\Notification\Compat\RestApiCompat'), 'testRestApi'], 10, 0); diff --git a/compat/src-deprecated/Abstracts/Adapter.php b/compat/src-deprecated/Abstracts/Adapter.php new file mode 100644 index 000000000..e4082c7cb --- /dev/null +++ b/compat/src-deprecated/Abstracts/Adapter.php @@ -0,0 +1,117 @@ +notification = $notification; + } + + /** + * Pass the method calls to Notification object + * + * @param string $methodName Method name. + * @param array $arguments Arguments. + * @return mixed + * @since 6.0.0 + */ + public function __call($methodName, $arguments) + { + if (CaseHelper::isSnake($methodName)) { + $methodName = CaseHelper::toCamel($methodName); + } + + if ($methodName === 'getNotification') { + return $this->getNotification(); + } + + $method = [$this->getNotification(), $methodName]; + + if (is_callable($method)) { + return call_user_func_array($method, $arguments); + } + } + + /** + * Gets Notification object + * + * @return \BracketSpace\Notification\Core\Notification + * @since 6.0.0 + */ + public function getNotification() + { + return $this->notification; + } + + /** + * Sets up Notification object with data. + * + * phpcs:ignore SlevomatCodingStandard.Namespaces.FullyQualifiedClassNameInAnnotation.NonFullyQualifiedClassName + * @param array $data Data array. + * @return \BracketSpace\Notification\Core\Notification + * @since 6.0.0 + */ + public function setupNotification($data = []) + { + return $this->getNotification()->setup($data); + } + + /** + * Checks if enabled + * + * @return bool + * @since 6.0.0 + */ + public function isEnabled() + { + return $this->getNotification()->isEnabled(); + } + + /** + * Registers Notification + * + * @return void + * @since 6.0.0 + */ + public function registerNotification() + { + notification_add($this->getNotification()); + } +} diff --git a/compat/src-deprecated/Abstracts/Notification.php b/compat/src-deprecated/Abstracts/Notification.php deleted file mode 100644 index e71ccb9df..000000000 --- a/compat/src-deprecated/Abstracts/Notification.php +++ /dev/null @@ -1,26 +0,0 @@ -setupNotification(notification_convert_data((array)$data)); + $this->setSource('JSON'); + + return $this; + } + + /** + * {@inheritdoc} + * + * @param int|null $jsonOptions JSON options, pass null to use default as well. + * @param bool $onlyEnabledCarriers If only enabled Carriers should be saved. + * @return mixed + */ + public function save($jsonOptions = JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE, $onlyEnabledCarriers = false) + { + if ($jsonOptions === null) { + $jsonOptions = JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE; + } + + $data = $this->getNotification()->toArray($onlyEnabledCarriers); + return wp_json_encode($data, $jsonOptions); + } +} diff --git a/compat/src-deprecated/Adapter/WordPress.php b/compat/src-deprecated/Adapter/WordPress.php new file mode 100644 index 000000000..f50c15b36 --- /dev/null +++ b/compat/src-deprecated/Adapter/WordPress.php @@ -0,0 +1,222 @@ +setPost($input); + } elseif (is_integer($input)) { + $post = get_post($input); + + if (!$post instanceof \WP_Post) { + return; + } + + $this->setPost($post); + } else { + throw new \Exception('Read method of WordPress adapter expects the post ID or WP_Post object'); + } + + try { + $jsonAdapter = notification_adapt_from( + 'JSON', + wp_specialchars_decode( + $this->post->post_content, + ENT_COMPAT + ) + ); + $this->setupNotification( + notification_convert_data( + $jsonAdapter->getNotification()->toArray() + ) + ); + } catch (\Throwable $e) { + $doNothing = true; + } + + // Hash sync with WordPress post. + $this->setHash($this->post->post_name); + + // Source. + $this->setSource('WordPress'); + $this->setSourcePostId($this->getId()); + + return $this; + } + + /** + * {@inheritdoc} + * + * @return $this|\WP_Error + */ + public function save() + { + // Update version as WordPress automatically does this while updating the post. + $versionBackup = $this->getVersion(); + $this->setVersion(time()); + + $data = $this->getNotification()->toArray(); + + /** @var \BracketSpace\Notification\Defaults\Adapter\JSON */ + $jsonAdapter = notification_swap_adapter('JSON', $this); + $json = $jsonAdapter->save(JSON_UNESCAPED_UNICODE); + + // Update the hash. + if (!preg_match('/notification_[a-z0-9]{13}/', $data['hash'])) { + $data['hash'] = Notification::createHash(); + } + + // Fix WordPress balance tags filter. + remove_filter( + 'content_save_pre', + 'balanceTags', + 50 + ); + + // WordPress post related: Title, Hash, Status, Version. + $postId = wp_insert_post( + [ + 'ID' => $this->getId(), + 'post_content' => wp_slash($json), // Cache. + 'post_type' => $this->postType, + 'post_title' => $data['title'], + 'post_name' => $data['hash'], + 'post_status' => $data['enabled'] + ? 'publish' + : 'draft', + ], + true + ); + + add_filter( + 'content_save_pre', + 'balanceTags', + 50 + ); + + if (is_wp_error($postId)) { + $this->setVersion($versionBackup); + return $postId; + } + + if (!$this->hasPost()) { + $post = get_post($postId); + $post ? $this->setPost($post) : ''; + } + + return $this; + } + + /** + * Checks if notification post has been just started + * + * @return bool + * @since 6.0.0 + */ + public function isNew() + { + return empty($this->post) || $this->post->post_date_gmt === '0000-00-00 00:00:00'; + } + + /** + * Gets notification post ID + * + * @return int post ID + * @since 6.0.0 + */ + public function getId() + { + return !empty($this->post) + ? $this->post->ID + : 0; + } + + /** + * Gets post + * + * @return \WP_Post|null + * @since 6.0.0 + */ + public function getPost() + { + return $this->post; + } + + /** + * Sets post + * + * @param \WP_Post $post WP Post to set. + * @return $this + * @since 6.0.0 + */ + public function setPost(\WP_Post $post) + { + $this->post = $post; + return $this; + } + + /** + * Sets post type + * + * @param string $postType WP Post Type. + * @return $this + * @since 6.0.0 + */ + public function setPostType($postType) + { + $this->postType = $postType; + return $this; + } + + /** + * Checks if adapter already have the post + * + * @return bool + * @since 6.0.0 + */ + public function hasPost() + { + return !empty($this->getPost()); + } +} diff --git a/compat/src-deprecated/Database/Queries/NotificationQueries.php b/compat/src-deprecated/Database/Queries/NotificationQueries.php new file mode 100644 index 000000000..a88ea50a5 --- /dev/null +++ b/compat/src-deprecated/Database/Queries/NotificationQueries.php @@ -0,0 +1,87 @@ + + * @since 8.0.0 + */ + public static function all(bool $includingDisabled = false): array + { + $queryArgs = [ + 'posts_per_page' => -1, + 'post_type' => 'notification', + ]; + + if ($includingDisabled) { + $queryArgs['post_status'] = ['publish', 'draft']; + } + + // WPML compat. + if (defined('ICL_LANGUAGE_CODE')) { + $queryArgs['suppress_filters'] = 0; + } + + $wpposts = get_posts($queryArgs); + $posts = []; + + if (empty($wpposts)) { + return $posts; + } + + foreach ($wpposts as $wppost) { + $notification = Db::postToNotification($wppost); + + if (!($notification instanceof Notification)) { + continue; + } + + $posts[] = $notification; + } + + return $posts; + } + + /** + * Gets Notification post by hash. + * + * @param string $hash Notification hash. + * @return ?Notification + * @since 8.0.0 + */ + public static function withHash(string $hash) + { + $post = get_page_by_path($hash, OBJECT, 'notification'); + + return empty($post) ? null : Db::postToNotification($post); + } +} diff --git a/compat/src-deprecated/Defaults/Carrier/Webhook.php b/compat/src-deprecated/Defaults/Carrier/Webhook.php new file mode 100644 index 000000000..31927a235 --- /dev/null +++ b/compat/src-deprecated/Defaults/Carrier/Webhook.php @@ -0,0 +1,177 @@ +'; + + /** + * Used to register Carrier form fields + * Uses $this->addFormField(); + * + * @return void + */ + public function formFields() + { + $this->addFormField( + new Field\MessageField( + [ + 'name' => 'deprecated', + 'label' => __('Deprecated', 'notification'), + 'type' => 'error', + 'message' => + '

' . __("This carrier doesn't work since Notification v9.", 'notification') . '

' . + '' . + esc_html__('Get Notification : Webhooks extension', 'notification') . + '', + ] + ) + ); + + $this->addRecipientsField( + [ + 'label' => __('URLs', 'notification'), + 'name' => 'urls', + 'add_button_label' => __('Add URL', 'notification'), + ] + ); + + $this->addFormField( + new Field\RepeaterField( + [ + 'label' => __('Arguments', 'notification'), + 'name' => 'args', + 'add_button_label' => __('Add argument', 'notification'), + 'fields' => [ + new Field\CheckboxField( + [ + 'label' => __('Hide', 'notification-slack'), + 'name' => 'hide', + 'checkbox_label' => __('Hide if empty value', 'notification'), + ] + ), + new Field\InputField( + [ + 'label' => __('Key', 'notification'), + 'name' => 'key', + 'resolvable' => true, + 'description' => __('You can use merge tags', 'notification'), + ] + ), + new Field\InputField( + [ + 'label' => __('Value', 'notification'), + 'name' => 'value', + 'resolvable' => true, + 'allow_linebreaks' => true, + 'description' => __('You can use merge tags', 'notification'), + ] + ), + ], + ] + ) + ); + + $this->addFormField( + new Field\CheckboxField( + [ + 'label' => __('JSON', 'notification'), + 'name' => 'json', + 'checkbox_label' => __('Send the arguments in JSON format', 'notification'), + ] + ) + ); + + if (! \Notification::settings()->getSetting('carriers/webhook/headers')) { + return; + } + + $this->addFormField( + new Field\RepeaterField( + [ + 'label' => __('Headers', 'notification'), + 'name' => 'headers', + 'add_button_label' => __('Add header', 'notification'), + 'fields' => [ + new Field\CheckboxField( + [ + 'label' => __('Hide', 'notification-slack'), + 'name' => 'hide', + 'checkbox_label' => __('Hide if empty value', 'notification'), + ] + ), + new Field\InputField( + [ + 'label' => __('Key', 'notification'), + 'name' => 'key', + 'resolvable' => true, + 'description' => __('You can use merge tags', 'notification'), + ] + ), + new Field\InputField( + [ + 'label' => __('Value', 'notification'), + 'name' => 'value', + 'resolvable' => true, + 'description' => __('You can use merge tags', 'notification'), + ] + ), + ], + ] + ) + ); + } + + /** + * Sends the notification + * + * @param \BracketSpace\Notification\Interfaces\Triggerable $trigger trigger object. + * @return void + */ + public function send(Triggerable $trigger) + { + /** + * ================== WARNING! ================== + * + * The Webhook carrier is not available in the plugin since version 9. + * + * We moved that function into a more robust paid extension that can + * also handle incoming webhooks. + * + * Read more: https://docs.bracketspace.com/notification/extensions/webhooks#webhooks-dont-work-after-upgrading-to-notification-v9 + * Extension: https://bracketspace.com/downloads/notification-webhooks/ + */ + } +} diff --git a/compat/src-deprecated/Defaults/Carrier/WebhookJson.php b/compat/src-deprecated/Defaults/Carrier/WebhookJson.php new file mode 100644 index 000000000..7bfbee1eb --- /dev/null +++ b/compat/src-deprecated/Defaults/Carrier/WebhookJson.php @@ -0,0 +1,146 @@ +'; + + /** + * Used to register Carrier form fields + * Uses $this->addFormField(); + * + * @return void + */ + public function formFields() + { + $this->addFormField( + new Field\MessageField( + [ + 'name' => 'deprecated', + 'label' => __('Deprecated', 'notification'), + 'type' => 'error', + 'message' => + '

' . __("This carrier doesn't work since Notification v9.", 'notification') . '

' . + '' . + esc_html__('Get Notification : Webhooks extension', 'notification') . + '', + ] + ) + ); + + $this->addRecipientsField( + [ + 'label' => __('URLs', 'notification'), + 'name' => 'urls', + 'add_button_label' => __('Add URL', 'notification'), + ] + ); + + $this->addFormField( + new Field\CodeEditorField( + [ + 'label' => __('JSON', 'notification'), + 'name' => 'json', + 'resolvable' => true, + 'settings' => [ + 'mode' => 'application/json', + 'lineNumbers' => true, + ], + 'description' => __('You can use merge tags', 'notification'), + ] + ) + ); + + if (! \Notification::settings()->getSetting('carriers/webhook/headers')) { + return; + } + + $this->addFormField( + new Field\RepeaterField( + [ + 'label' => __('Headers', 'notification'), + 'name' => 'headers', + 'add_button_label' => __('Add header', 'notification'), + 'fields' => [ + new Field\CheckboxField( + [ + 'label' => __('Hide', 'notification-slack'), + 'name' => 'hide', + 'checkbox_label' => __('Hide if empty value', 'notification'), + ] + ), + new Field\InputField( + [ + 'label' => __('Key', 'notification'), + 'name' => 'key', + 'resolvable' => true, + 'description' => __('You can use merge tags', 'notification'), + ] + ), + new Field\InputField( + [ + 'label' => __('Value', 'notification'), + 'name' => 'value', + 'resolvable' => true, + 'description' => __('You can use merge tags', 'notification'), + ] + ), + ], + ] + ) + ); + } + + /** + * Sends the notification + * + * @param \BracketSpace\Notification\Interfaces\Triggerable $trigger trigger object. + * @return void + */ + public function send(Triggerable $trigger) + { + /** + * ================== WARNING! ================== + * + * The Webhook carrier is not available in the plugin since version 9. + * + * We moved that function into a more robust paid extension that can + * also handle incoming webhooks. + * + * Read more: https://docs.bracketspace.com/notification/extensions/webhooks#webhooks-dont-work-after-upgrading-to-notification-v9 + * Extension: https://bracketspace.com/downloads/notification-webhooks/ + */ + } +} diff --git a/compat/src-deprecated/Defaults/Notification/Email.php b/compat/src-deprecated/Defaults/Notification/Email.php deleted file mode 100644 index e323df8c8..000000000 --- a/compat/src-deprecated/Defaults/Notification/Email.php +++ /dev/null @@ -1,28 +0,0 @@ - $slug, + 'name' => $name, + 'default_value' => '', + ] + ); + } + + /** + * {@inheritdoc} + * + * @param string $value raw value saved by the user. + * @return array array of resolved values + */ + public function parseValue($value = '') + { + if (empty($value)) { + $value = $this->getDefaultValue(); + } + + return [esc_url($value)]; + } + + /** + * {@inheritdoc} + * + * @return object + */ + public function input() + { + return new Field\InputField( + [ + 'label' => __('URL', 'notification'), // don't edit this! + 'name' => 'recipient', // don't edit this! + 'css_class' => 'recipient-value', // don't edit this! + 'placeholder' => site_url(), + 'description' => __('You can use any valid email merge tag.', 'notification'), + 'resolvable' => true, + ] + ); + } +} diff --git a/src/Interfaces/Adaptable.php b/compat/src-deprecated/Interfaces/Adaptable.php similarity index 61% rename from src/Interfaces/Adaptable.php rename to compat/src-deprecated/Interfaces/Adaptable.php index f97e45ea3..ed570d6db 100644 --- a/src/Interfaces/Adaptable.php +++ b/compat/src-deprecated/Interfaces/Adaptable.php @@ -1,28 +1,29 @@ $args Arguments. Default: empty. + * @param array $headers Headers. Default: empty. + * @param string $method HTTP request method. + * @return void + * @since 7.0.0 + */ + public function httpRequest($url, $args = [], $headers = [], $method = 'GET') + { + $remoteArgs = apply_filters( + "notification/carrier/webhook/remote_args/{$method}", + [ + 'body' => $args, + 'headers' => $headers, + 'method' => strtoupper($method), + ], + $url, + $args, + $this + ); + + $response = wp_remote_request($url, $remoteArgs); + + if (is_wp_error($response)) { + Debugging::log( + $this->getName(), + 'error', + // phpcs:ignore Squiz.PHP.DiscouragedFunctions.Discouraged + '
' . print_r(
+					[
+						'url' => $url,
+						'args' => $remoteArgs,
+						'errors' => $response->get_error_messages(),
+					],
+					true
+				) . '
' + ); + } + + $code = wp_remote_retrieve_response_code($response); + + if ($code < 200 || $code >= 300) { + Debugging::log( + $this->getName(), + 'warning', + // phpcs:ignore Squiz.PHP.DiscouragedFunctions.Discouraged + '
' . print_r(
+					[
+						'url' => $url,
+						'args' => $remoteArgs,
+						'response_code' => $code,
+						'message' => wp_remote_retrieve_response_message($response),
+					],
+					true
+				) . '
' + ); + } + + do_action( + "notification/carrier/webhook/called/{$method}", + $response, + $url, + $args, + $remoteArgs, + $this + ); + } + + /** + * Parses args to be understand by the wp_remote_* functions + * + * @param array $args Args from saved fields. + * @return array Parsed args as key => value array + * @since 7.0.0 + */ + private function parseArgs($args) + { + $parsedArgs = []; + + if (empty($args)) { + return $parsedArgs; + } + + foreach ($args as $arg) { + if (isset($arg['hide']) && $arg['hide']) { + continue; + } + + $parsedArgs[$arg['key']] = $arg['value']; + } + + return $parsedArgs; + } +} diff --git a/compat/src-deprecated/functions.php b/compat/src-deprecated/functions.php index 1d6b79a0f..64792a74d 100644 --- a/compat/src-deprecated/functions.php +++ b/compat/src-deprecated/functions.php @@ -6,219 +6,18 @@ */ use BracketSpace\Notification\Admin\Wizard; +use BracketSpace\Notification\Core\Debugging; +use BracketSpace\Notification\Core\Notification; use BracketSpace\Notification\Core\Resolver; +use BracketSpace\Notification\Core\Settings; use BracketSpace\Notification\Core\Sync; use BracketSpace\Notification\Core\Templates; use BracketSpace\Notification\Core\Whitelabel; +use BracketSpace\Notification\Database\NotificationDatabaseService; use BracketSpace\Notification\Interfaces; use BracketSpace\Notification\Register; use BracketSpace\Notification\Store; use BracketSpace\Notification\Dependencies\Micropackage\DocHooks\Helper as DocHooksHelper; -use BracketSpace\Notification\Queries\NotificationQueries; - -/** - * Helper function. - * Throws a deprecation notice from deprecated class - * - * @since 6.0.0 - * @param string $class Deprecated class name. - * @param string $version Version since deprecated. - * @param string $replacement Replacement class. - * @return void - */ -function notification_deprecated_class( $class, $version, $replacement = null ) { - - // phpcs:disable - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { - if ( function_exists( '__' ) ) { - if ( ! is_null( $replacement ) ) { - /* translators: 1: Class name, 2: version number, 3: alternative function name */ - trigger_error( sprintf( __('Class %1$s is deprecated since version %2$s! Use %3$s instead.'), $class, $version, $replacement ) ); - } else { - /* translators: 1: Class name, 2: version number */ - trigger_error( sprintf( __('Class %1$s is deprecated since version %2$s with no alternative available.'), $class, $version ) ); - } - } else { - if ( ! is_null( $replacement ) ) { - trigger_error( sprintf( 'Class %1$s is deprecated since version %2$s! Use %3$s instead.', $class, $version, $replacement ) ); - } else { - trigger_error( sprintf( 'Class %1$s is deprecated since version %2$s with no alternative available.', $class, $version ) ); - } - } - } - // phpcs:enable - -} - -/** - * Gets the plugin Runtime. - * - * @deprecated 7.0.0 New Notification static class should be used. - * @param string $property Optional property to get. - * @return object Runtime class instance - */ -function notification_runtime( $property = null ) { - _deprecated_function( __FUNCTION__, '7.0.0', '\Notification' ); - - if ( null !== $property ) { - return Notification::component( $property ); - } - - return Notification::runtime(); -} - -/** - * Checks if notification post has been just started - * - * @since 5.0.0 - * @deprecated 6.0.0 Changed name for consistency. - * @param mixed $post Post ID or WP_Post. - * @return boolean True if notification has been just started - */ -function notification_is_new_notification( $post ) { - _deprecated_function( __FUNCTION__, '6.0.0', 'notification_post_is_new' ); - return notification_post_is_new( $post ); -} - -/** - * Registers notification - * - * @deprecated 6.0.0 Changed name for consistency. - * @param Interfaces\Sendable $notification Carrier object. - * @return void - */ -function register_notification( Interfaces\Sendable $notification ) { - _deprecated_function( __FUNCTION__, '6.0.0', 'notification_register_carrier' ); - notification_register_carrier( $notification ); -} - -/** - * Gets all registered notifications - * - * @since 5.0.0 - * @deprecated 6.0.0 Changed name for consistency. - * @return array notifications - */ -function notification_get_notifications() { - _deprecated_function( __FUNCTION__, '6.0.0', 'notification_get_carriers' ); - return notification_get_carriers(); -} - -/** - * Gets single registered notification - * - * @deprecated 6.0.0 Changed name for consistency. - * @param string $notification_slug notification slug. - * @return mixed notification object or false - */ -function notification_get_single_notification( $notification_slug ) { - _deprecated_function( __FUNCTION__, '6.0.0', 'notification_get_carrier' ); - return notification_get_carrier( $notification_slug ); -} - -/** - * Registers trigger - * Uses notification/triggers filter - * - * @deprecated 6.0.0 Changed name for consistency. - * @param Interfaces\Triggerable $trigger trigger object. - * @return void - */ -function register_trigger( Interfaces\Triggerable $trigger ) { - _deprecated_function( __FUNCTION__, '6.0.0', 'notification_register_trigger' ); - notification_register_trigger( $trigger ); -} - -/** - * Gets single registered recipient for notification type - * - * @since 5.0.0 - * @deprecated 6.0.0 Changed name for consistency. - * @param string $carrier_slug Carrier slug. - * @param string $recipient_slug Recipient slug. - * @return mixed Recipient object or false - */ -function notification_get_single_recipient( $carrier_slug, $recipient_slug ) { - _deprecated_function( __FUNCTION__, '6.0.0', 'notification_get_recipient' ); - return notification_get_recipient( $carrier_slug, $recipient_slug ); -} - -/** - * Gets register recipients for notification type - * - * @since 5.0.0 - * @deprecated 6.0.0 Changed name for consistency. - * @param string $carrier_slug Carrier slug. - * @return array Recipients array - */ -function notification_get_notification_recipients( $carrier_slug ) { - _deprecated_function( __FUNCTION__, '6.0.0', 'notification_get_carrier_recipients' ); - return notification_get_carrier_recipients( $carrier_slug ); -} - -/** - * Gets single registered trigger - * - * @since 5.0.0 - * @deprecated 6.0.0 Changed name for consistency. - * @param string $trigger_slug trigger slug. - * @return mixed trigger object or false - */ -function notification_get_single_trigger( $trigger_slug ) { - _deprecated_function( __FUNCTION__, '6.0.0', 'notification_get_trigger' ); - return notification_get_trigger( $trigger_slug ); -} - -/** - * Registers recipient - * Uses notification/recipients filter - * - * @deprecated 6.0.0 Changed name for consistency. - * @param string $carrier_slug Carrier slug. - * @param Interfaces\Receivable $recipient Recipient object. - * @return void - */ -function register_recipient( $carrier_slug, Interfaces\Receivable $recipient ) { - _deprecated_function( __FUNCTION__, '6.0.0', 'notification_register_recipient' ); - notification_register_recipient( $carrier_slug, $recipient ); -} - -/** - * Adds handlers for doc hooks to an object - * - * @since 5.2.2 - * @deprecated 7.0.0 Use `the micropackage/dochooks` package. - * @param object $object Object to create the hooks. - * @return object - */ -function notification_add_doc_hooks( $object ) { - _deprecated_function( __FUNCTION__, '7.0.0' ); - return DocHooksHelper::hook( $object ); -} - -/** - * Checks if the DocHooks are enabled and working. - * - * @since 6.1.0 - * @deprecated 7.0.0 Use the `micropackage/dochooks` package. - * @return bool - */ -function notification_dochooks_enabled() { - _deprecated_function( __FUNCTION__, '7.0.0' ); - return DocHooksHelper::is_enabled(); -} - -/** - * Creates new View object. - * - * @since 6.0.0 - * @deprecated 7.0.0 Use Templates object. - * @return bool - */ -function notification_create_view() { - _deprecated_function( __FUNCTION__, '7.0.0' ); - return false; -} /** * Gets cached value or cache object @@ -232,7 +31,6 @@ function notification_cache() { return null; } - /** * Checks if the Wizard should be displayed. * @@ -243,7 +41,7 @@ function notification_cache() { function notification_display_wizard() { _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Admin\\Wizard::should_display' ); - return Wizard::should_display(); + return Wizard::shouldDisplay(); } /** @@ -257,7 +55,7 @@ function notification_display_wizard() { function notification_ajax_handler() { _deprecated_function( __FUNCTION__, '8.0.0' ); - return new BracketSpace\Notification\Dependencies\Micropackage\Ajax\Response(); + return new \BracketSpace\Notification\Dependencies\Micropackage\Ajax\Response(); } /** @@ -287,9 +85,9 @@ function notification_filesystem( $deprecated ) { * @return array */ function notification_get_posts( $trigger_slug = null, $all = false ) { - _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Queries\\NotificationQueries::all()' ); + _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Database\\NotificationDatabaseService::getAll()' ); - return NotificationQueries::all( $all ); + return NotificationDatabaseService::getAll(); } /** @@ -301,9 +99,9 @@ function notification_get_posts( $trigger_slug = null, $all = false ) { * @return mixed null or Notification object */ function notification_get_post_by_hash( $hash ) { - _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Queries\\NotificationQueries::with_hash()' ); + _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Database\\NotificationDatabaseService::get()' ); - return NotificationQueries::with_hash( $hash ); + return NotificationDatabaseService::get( $hash ); } /** @@ -319,7 +117,7 @@ function notification_post_is_new( $post ) { /** @var BracketSpace\Notification\Defaults\Adapter\WordPress $notification */ $notification = notification_adapt_from( 'WordPress', $post ); - return $notification->is_new(); + return $notification->isNew(); } /** @@ -358,7 +156,7 @@ function notification_get_template( $template_name, $vars = [] ) { /** * Enables the notification syncing - * By default path used is current theme's `notifiations` dir. + * By default path used is current theme's `notifications` dir. * * @since 6.0.0 * @deprecated 8.0.0 @@ -381,7 +179,7 @@ function notification_sync( $path = null ) { function notification_get_sync_path() { _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Core\\Sync::get_sync_path' ); - return Sync::get_sync_path(); + return Sync::getSyncPath(); } /** @@ -394,7 +192,7 @@ function notification_get_sync_path() { function notification_is_syncing() { _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Core\\Sync::is_syncing' ); - return Sync::is_syncing(); + return Sync::isSyncing(); } /** @@ -421,7 +219,7 @@ function notification_whitelabel( $args = [] ) { function notification_is_whitelabeled() { _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Core\\Whitelabel::is_whitelabeled' ); - return Whitelabel::is_whitelabeled(); + return Whitelabel::isWhitelabeled(); } /** @@ -508,7 +306,7 @@ function notification_get_recipients() { function notification_get_carrier_recipients( $carrier_slug ) { _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Store\\Recipient::all_for_carrier' ); - return Store\Recipient::all_for_carrier( $carrier_slug ); + return Store\Recipient::allForCarrier( $carrier_slug ); } /** @@ -558,7 +356,6 @@ function notification_register_resolver( Interfaces\Resolvable $resolver ) { Register::resolver( $resolver ); } - /** * Resolves the value * @@ -655,7 +452,7 @@ function notification_get_triggers_grouped() { function notification_add_global_merge_tag( Interfaces\Taggable $merge_tag ) { _deprecated_function( __FUNCTION__, '8.0.0', 'BracketSpace\\Notification\\Register::global_merge_tag' ); - return Register::global_merge_tag( $merge_tag ); + return Register::globalMergeTag( $merge_tag ); } /** @@ -670,3 +467,201 @@ function notification_get_global_merge_tags() { return Store\GlobalMergeTag::all(); } + +/** + * Adapts Notification object + * Default adapters are: WordPress || JSON + * + * @param string $adapterName Adapter class name. + * @param \BracketSpace\Notification\Core\Notification $notification Notification object. + * @return \BracketSpace\Notification\Interfaces\Adaptable + * @since 6.0.0 + * @deprecated 9.0.0 + */ +function notification_adapt($adapterName, \BracketSpace\Notification\Core\Notification $notification) { + _deprecated_function( __FUNCTION__, '9.0.0', 'Notification::to()'); + + if (class_exists($adapterName)) { + $adapter = new $adapterName($notification); + } elseif (class_exists('BracketSpace\\Notification\\Defaults\\Adapter\\' . $adapterName)) { + $adapterName = 'BracketSpace\\Notification\\Defaults\\Adapter\\' . $adapterName; + $adapter = new $adapterName($notification); + } else { + throw new \Exception( + sprintf('Couldn\'t find %s adapter', $adapterName) + ); + } + + /** @var \BracketSpace\Notification\Interfaces\Adaptable $adapter */ + return $adapter; +} + +/** + * Adapts Notification from input data + * Default adapters are: WordPress || JSON + * + * @param string $adapterName Adapter class name. + * @param mixed $data Input data needed by adapter. + * @return \BracketSpace\Notification\Interfaces\Adaptable + * @since 6.0.0 + * @deprecated 9.0.0 + */ +function notification_adapt_from($adapterName, $data) { + _deprecated_function( __FUNCTION__, '9.0.0', 'Notification::from()'); + + $adapter = notification_adapt( + $adapterName, + new Notification() + ); + return $adapter->read($data); +} + +/** + * Changes one adapter to another + * + * @param string $newAdapterName Adapter class name. + * @param \BracketSpace\Notification\Interfaces\Adaptable $adapter Adapter. + * @return \BracketSpace\Notification\Interfaces\Adaptable + * @since 6.0.0 + * @deprecated 9.0.0 + */ +function notification_swap_adapter($newAdapterName, Interfaces\Adaptable $adapter) { + _deprecated_function( __FUNCTION__, '9.0.0'); + + return notification_adapt( + $newAdapterName, + $adapter->getNotification() + ); +} + +/** + * Logs the message in database + * + * @since 6.0.0 + * @deprecated 9.0.0 + * @param string $component Component nice name, like `Core` or `Any Plugin Name`. + * @param string $type Log type, values: notification|error|warning. + * @param string $message Log formatted message. + * @return bool|\WP_Error + */ +function notification_log($component, $type, $message) { + _deprecated_function( __FUNCTION__, '9.0.0', 'BracketSpace\\Notification\\Core\\Debugging::log()'); + + return Debugging::log($component, $type, $message); +} + +/** + * Adds Notification to Store + * + * @since 6.0.0 + * @deprecated 9.0.0 + * @param \BracketSpace\Notification\Core\Notification $notification Notification object. + * @return void + */ +function notification_add(\BracketSpace\Notification\Core\Notification $notification) { + _deprecated_function( __FUNCTION__, '9.0.0', 'BracketSpace\\Notification\\Register::notification()'); + + Register::notification($notification); +} + +/** + * Converts the static data to Trigger and Carrier objects + * + * If no `trigger` nor `carriers` keys are available it does nothing. + * If the data is already in form of objects it does nothing. + * + * @param array $data Notification static data. + * @return array Converted data. + * @since 6.0.0 + * @deprecated 9.0.0 + */ +function notification_convert_data($data = []) { + _deprecated_function( __FUNCTION__, '9.0.0', "Bracketspace\\Notification\\Core\\Notification::from('array', ...)"); + + $notification = Notification::from('array', $data); + + return (array)$notification->to('array'); +} + +/** + * Registers settings + * + * @param mixed $callback Callback for settings registration, array of string. + * @param int $priority Action priority. + * @return void + * @since 5.0.0 + * @deprecated 9.0.0 + */ +function notification_register_settings($callback, $priority = 10) { + _deprecated_function( __FUNCTION__, '9.0.0', 'Use the `notification/settings/register` action directly'); + + if (!is_callable($callback)) { + trigger_error( + 'You have to pass callable while registering the settings', + E_USER_ERROR + ); + } + + add_action( + 'notification/settings/register', + $callback, + $priority + ); +} + +/** + * Gets setting values + * + * @return mixed + * @since 5.0.0 + * @deprecated 9.0.0 + */ +function notification_get_settings() { + _deprecated_function( __FUNCTION__, '9.0.0', "\Notification::settings()->getSettings()"); + + return \Notification::component(Settings::class)->getSettings(); +} + +/** + * Gets single setting value + * + * @param string $setting setting name in `a/b/c` format. + * @return mixed + * @since 5.0.0 + * @since 7.0.0 The `notifications` section has been changed to `carriers`. + * @deprecated 9.0.0 + */ +function notification_get_setting($setting) { + _deprecated_function( __FUNCTION__, '9.0.0', "\Notification::settings()->getSetting()"); + + return \Notification::component(Settings::class)->getSetting($setting); +} + +/** + * Updates single setting value. + * + * @deprecated 9.0.0 + * @param string $setting setting name in `a/b/c` format. + * @param mixed $value setting value. + * @return mixed + */ +function notification_update_setting($setting, $value) { + _deprecated_function( __FUNCTION__, '9.0.0', "\Notification::settings()->updateSetting(setting, value)"); + + return \Notification::component(Settings::class)->updateSetting($setting, $value); +} + +/** + * Creates new Notification from array + * + * @since 6.0.0 + * @deprecated 9.0.0 + * @param NotificationUnconvertedData $data Notification data. + * @return void + */ +function notification($data = []) +{ + _deprecated_function( __FUNCTION__, '9.0.0', 'BracketSpace\\Notification\\Register::notificationFromArray()'); + + Register::notificationFromArray($data); +} diff --git a/compat/src-deprecated/helpers.php b/compat/src-deprecated/helpers.php new file mode 100644 index 000000000..a6aa1a1e1 --- /dev/null +++ b/compat/src-deprecated/helpers.php @@ -0,0 +1,38 @@ +deprecated since version %2$s! Use %3$s instead.'), $class, $version, $replacement), E_USER_DEPRECATED); + } else { + /* translators: 1: Class name, 2: version number */ + trigger_error(sprintf(__('Class %1$s is deprecated since version %2$s with no alternative available.'), $class, $version), E_USER_DEPRECATED); + } + } else { + if (! is_null($replacement)) { + trigger_error(sprintf('Class %1$s is deprecated since version %2$s! Use %3$s instead.', $class, $version, $replacement), E_USER_DEPRECATED); + } else { + trigger_error(sprintf('Class %1$s is deprecated since version %2$s with no alternative available.', $class, $version), E_USER_DEPRECATED); + } + } +} diff --git a/compat/src-deprecated/namespaces.php b/compat/src-deprecated/namespaces.php new file mode 100644 index 000000000..71cc6b11b --- /dev/null +++ b/compat/src-deprecated/namespaces.php @@ -0,0 +1,51 @@ + [ + 'BracketSpace\Notification\Defaults' => 'BracketSpace\Notification\Repository', + 'BracketSpace\Notification\Abstracts\Carrier' => 'BracketSpace\Notification\Repository\Carrier\BaseCarrier', + 'BracketSpace\Notification\Abstracts\Field' => 'BracketSpace\Notification\Repository\Field\BaseField', + 'BracketSpace\Notification\Abstracts\MergeTag' => 'BracketSpace\Notification\Repository\MergeTag\BaseMergeTag', + 'BracketSpace\Notification\Abstracts\Recipient' => 'BracketSpace\Notification\Repository\Recipient\BaseRecipient', + 'BracketSpace\Notification\Abstracts\Resolver' => 'BracketSpace\Notification\Repository\Resolver\BaseResolver', + 'BracketSpace\Notification\Abstracts\Trigger' => 'BracketSpace\Notification\Repository\Trigger\BaseTrigger', + ], + ]; + + // Classes meant to be left as is, ie. deprecated ones. + $exclusions = [ + 'BracketSpace\Notification\Defaults\Adapter', + ]; + + foreach ($deprecations as $version => $map) { + foreach ($map as $oldNamespace => $newNamespace) { + // Match the loaded classname. + if (strpos($class, $oldNamespace) !== 0) { + continue; + } + + // Check for exclusions. + foreach ($exclusions as $excludedNamespace) { + if (strpos($class, $excludedNamespace) === 0) { + break 2; + } + } + + $newClass = str_replace($oldNamespace, $newNamespace, $class); + + if (! class_exists($newClass)) { + break; + } + + notification_deprecated_class($class, $version, $newClass); + + class_alias($newClass, $class); + } + } +}); diff --git a/compat/stub-finder.php b/compat/stub-finder.php index 4fb8dcdca..2d54466e4 100644 --- a/compat/stub-finder.php +++ b/compat/stub-finder.php @@ -4,11 +4,16 @@ * * Used to generate stubs of all the important classes and functions in the core. * + * How to use: + * - install php-stubs/generator **globally** + * - run `composer generate-stubs` from within the project's root directory + * * @package notification */ return \StubsGenerator\Finder::create() ->in( realpath( __DIR__ . '/..' ) ) + ->notPath( 'dependencies/' ) ->notPath( 'resources/' ) ->notPath( 'node_modules/' ) ->notPath( 'vendor/' ) diff --git a/composer.json b/composer.json index 20c92bb7f..7ec939065 100644 --- a/composer.json +++ b/composer.json @@ -4,70 +4,92 @@ "license": "GPL-3.0-or-later", "description": "Notification plugin for WordPress", "require": { - "php": "^7.0", + "php": "^7.4 | ^8.0", "composer-runtime-api": "^2.0", + "brianhenryie/strauss": "^0.19.1", "enshrined/svg-sanitize": "^0.16.0", "micropackage/ajax": "^1.0", "micropackage/cache": "^1.0", + "micropackage/casegnostic": "^1.0", "micropackage/dochooks": "1.0.2", "micropackage/filesystem": "^1.1", "micropackage/requirements": "^1.1", "micropackage/templates": "^1.1" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4", + "brain/monkey": "^2.6", "dealerdirect/phpcodesniffer-composer-installer": "^0.7", - "jakub-onderka/php-parallel-lint": "^1.0", + "pestphp/pest": "^1.23", + "php-parallel-lint/php-parallel-lint": "^1.3", "php-stubs/wp-cli-stubs": "^2.4", "phpcompatibility/php-compatibility": "^9.3", - "phpunit/phpunit": "6.5", - "roots/wordpress": "*", - "szepeviktor/phpstan-wordpress": "^0.7.2", - "wp-coding-standards/wpcs": "^2.0", - "wp-phpunit/wp-phpunit": "^5.8", - "yoast/phpunit-polyfills": "^1.0" + "phpcompatibility/phpcompatibility-wp": "*", + "phpunit/phpunit": "^9", + "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^0.6.1", + "szepeviktor/phpstan-wordpress": "^1.3", + "yoast/phpunit-polyfills": "^2.0" }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true, - "allow-plugins": true - }, - "extra": { - "mozart": { - "dep_namespace": "BracketSpace\\Notification\\Dependencies\\", - "dep_directory": "/src/Dependencies/", - "classmap_directory": "/classes/dependencies/", - "classmap_prefix": "BRSET_", - "delete_vendor_directories": true - }, - "wordpress-install-dir": "tests/_wordpress" + "allow-plugins": true, + "platform-check": false }, "autoload": { "psr-4": { "BracketSpace\\Notification\\": "src/" }, "classmap": [ - "compat/src-deprecated/" + "compat/src-deprecated/", + "dependencies/" ], "files": [ - "compat/src-deprecated/functions.php", - "src/api.php" + "compat/src-deprecated/helpers.php", + "compat/src-deprecated/namespaces.php", + "compat/src-deprecated/functions.php" ] }, "autoload-dev": { "psr-4": { - "BracketSpace\\Notification\\Tests\\": "tests" + "BracketSpace\\Notification\\Tests\\": "tests/unit/", + "Tests\\": "tests/" + } + }, + "extra": { + "strauss": { + "namespace_prefix": "BracketSpace\\Notification\\Dependencies\\", + "target_directory": "dependencies", + "classmap_prefix": "BracketSpace_Notification_Dependencies_", + "exclude_from_prefix": { + "file_patterns": [ + "compat/src-deprecated/helpers.php" + ] + } } }, "scripts": { - "compose": "mozart compose && composer dump-autoload", - "phpcbf": "phpcbf", - "phpcs": "phpcs", - "phpcompat": "phpcs --standard=PHPCompatibility --runtime-set testVersion 7.0 notification.php load.php uninstall.php src/ resources/templates/", - "phplint": "parallel-lint --exclude node_modules --exclude vendor --exclude vendor-bin .", - "phpstan": "phpstan analyze", - "phpunit": "phpunit", - "phpunit-coverage": "phpunit --coverage-text" + "phpcbf": "phpcbf --parallel=4", + "phpcs": "phpcs --parallel=4", + "phplint": "parallel-lint --exclude node_modules --exclude vendor --exclude dependencies .", + "phpstan": "phpstan analyze --memory-limit=-1", + "generate-stubs": "generate-stubs --finder=compat/stub-finder.php --out=compat/stubs.php --force", + "prefix-namespaces-dev": [ + "strauss", + "composer dump-autoload" + ], + "prefix-namespaces-prod": [ + "strauss --deleteVendorPackages=true", + "composer dump-autoload", + "rm -r vendor/bin", + "rm -r vendor/brianhenryie", + "find vendor -type d -empty -delete" + ], + "post-install-cmd": [ + "@prefix-namespaces-dev" + ], + "post-update-cmd": [ + "@prefix-namespaces-dev" + ] } } diff --git a/composer.lock b/composer.lock index a337d1abc..bfdd46d49 100644 --- a/composer.lock +++ b/composer.lock @@ -4,595 +4,4054 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "858bf31c6c396d961ef9cc1593bfd90a", + "content-hash": "a20bc30dd0bbf2b76aeec424e8b276c3", "packages": [ { - "name": "enshrined/svg-sanitize", - "version": "0.16.0", + "name": "brianhenryie/strauss", + "version": "0.19.1", "source": { "type": "git", - "url": "https://github.com/darylldoyle/svg-sanitizer.git", - "reference": "239e257605e2141265b429e40987b2ee51bba4b4" + "url": "https://github.com/BrianHenryIE/strauss.git", + "reference": "12be71cbf147900dfc1fc32a85b01bb7ee7f870b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/239e257605e2141265b429e40987b2ee51bba4b4", - "reference": "239e257605e2141265b429e40987b2ee51bba4b4", + "url": "https://api.github.com/repos/BrianHenryIE/strauss/zipball/12be71cbf147900dfc1fc32a85b01bb7ee7f870b", + "reference": "12be71cbf147900dfc1fc32a85b01bb7ee7f870b", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ezyang/htmlpurifier": "^4.16", - "php": "^5.6 || ^7.0 || ^8.0" + "composer/composer": "*", + "json-mapper/json-mapper": "^2.2", + "league/flysystem": "^2.1|^3.0", + "symfony/console": "^4|^5|^6|^7", + "symfony/finder": "^4|^5|^6|^7" + }, + "replace": { + "coenjacobs/mozart": "*" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5" + "brianhenryie/php-diff-test": "dev-master", + "clue/phar-composer": "^1.2", + "ext-json": "*", + "jaschilz/php-coverage-badger": "^2.0", + "mheap/phpunit-github-actions-printer": "^1.4", + "mockery/mockery": "^1.6", + "php": "^7.4|^8.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9|^10", + "squizlabs/php_codesniffer": "^3.5" }, + "bin": [ + "bin/strauss" + ], "type": "library", "autoload": { "psr-4": { - "enshrined\\svgSanitize\\": "src" + "BrianHenryIE\\Strauss\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-2.0-or-later" + "MIT" ], "authors": [ { - "name": "Daryll Doyle", - "email": "daryll@enshrined.co.uk" + "name": "Brian Henry", + "email": "BrianHenryIE@gmail.com" + }, + { + "name": "Coen Jacobs", + "email": "coenjacobs@gmail.com" } ], - "description": "An SVG sanitizer for PHP", + "description": "Composes all dependencies as a package inside a WordPress plugin", "support": { - "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", - "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.16.0" + "issues": "https://github.com/BrianHenryIE/strauss/issues", + "source": "https://github.com/BrianHenryIE/strauss/tree/0.19.1" }, - "time": "2023-03-20T10:51:12+00:00" + "time": "2024-04-26T16:51:21+00:00" }, { - "name": "ezyang/htmlpurifier", - "version": "v4.16.0", + "name": "composer/ca-bundle", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" + "url": "https://github.com/composer/ca-bundle.git", + "reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/0c5ccfcfea312b5c5a190a21ac5cef93f74baf99", + "reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^7.2 || ^8.0" }, "require-dev": { - "cerdic/css-tidy": "^1.7 || ^2.0", - "simpletest/simpletest": "dev-master" - }, - "suggest": { - "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", - "ext-bcmath": "Used for unit conversion and imagecrash protection", - "ext-iconv": "Converts text to and from non-UTF-8 encodings", - "ext-tidy": "Used for pretty-printing HTML" + "phpstan/phpstan": "^1.10", + "psr/log": "^1.0", + "symfony/phpunit-bridge": "^4.2 || ^5", + "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, "autoload": { - "files": [ - "library/HTMLPurifier.composer.php" - ], - "psr-0": { - "HTMLPurifier": "library/" - }, - "exclude-from-classmap": [ - "/library/HTMLPurifier/Language/" - ] + "psr-4": { + "Composer\\CaBundle\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-or-later" + "MIT" ], "authors": [ { - "name": "Edward Z. Yang", - "email": "admin@htmlpurifier.org", - "homepage": "http://ezyang.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Standards compliant HTML filter written in PHP", - "homepage": "http://htmlpurifier.org/", + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", "keywords": [ - "html" + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" ], "support": { - "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" + "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" }, - "time": "2022-09-18T07:06:19+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-03-15T14:00:32+00:00" }, { - "name": "micropackage/ajax", - "version": "1.0.1", + "name": "composer/class-map-generator", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/micropackage/ajax.git", - "reference": "8bf2c0528776696208f53ce8c393da3aba7b24ac" + "url": "https://github.com/composer/class-map-generator.git", + "reference": "8286a62d243312ed99b3eee20d5005c961adb311" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/micropackage/ajax/zipball/8bf2c0528776696208f53ce8c393da3aba7b24ac", - "reference": "8bf2c0528776696208f53ce8c393da3aba7b24ac", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/8286a62d243312ed99b3eee20d5005c961adb311", + "reference": "8286a62d243312ed99b3eee20d5005c961adb311", "shasum": "" }, "require": { - "php": ">=5.6" + "composer/pcre": "^2.1 || ^3.1", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", - "php-mock/php-mock-phpunit": "^2.6", - "phpcompatibility/php-compatibility": "^9.1", - "phpunit/phpunit": "^6.5.5", - "wp-coding-standards/wpcs": "^2.0" + "phpstan/phpstan": "^1.6", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/filesystem": "^5.4 || ^6", + "symfony/phpunit-bridge": "^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, "autoload": { "psr-4": { - "Micropackage\\Ajax\\": "src" + "Composer\\ClassMapGenerator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-3.0-or-later" + "MIT" ], "authors": [ { - "name": "Jakub Mikita", - "email": "jakub@bracketspace.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" } ], - "description": "Wrapper for WordPress' AJAX", + "description": "Utilities to scan PHP code and generate class maps.", + "keywords": [ + "classmap" + ], "support": { - "issues": "https://github.com/micropackage/ajax/issues", - "source": "https://github.com/micropackage/ajax/tree/1.0.1" + "issues": "https://github.com/composer/class-map-generator/issues", + "source": "https://github.com/composer/class-map-generator/tree/1.1.1" }, - "time": "2020-02-11T09:58:59+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-03-15T12:53:41+00:00" }, { - "name": "micropackage/cache", - "version": "1.0.3", + "name": "composer/composer", + "version": "2.7.2", "source": { "type": "git", - "url": "https://github.com/micropackage/cache.git", - "reference": "4132b1de3036d72befc526ba4e78f50b5f23764c" + "url": "https://github.com/composer/composer.git", + "reference": "b826edb791571ab1eaf281eb1bd6e181a1192adc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/micropackage/cache/zipball/4132b1de3036d72befc526ba4e78f50b5f23764c", - "reference": "4132b1de3036d72befc526ba4e78f50b5f23764c", + "url": "https://api.github.com/repos/composer/composer/zipball/b826edb791571ab1eaf281eb1bd6e181a1192adc", + "reference": "b826edb791571ab1eaf281eb1bd6e181a1192adc", "shasum": "" }, "require": { - "php": ">=5.6" + "composer/ca-bundle": "^1.0", + "composer/class-map-generator": "^1.0", + "composer/metadata-minifier": "^1.0", + "composer/pcre": "^2.1 || ^3.1", + "composer/semver": "^3.2.5", + "composer/spdx-licenses": "^1.5.7", + "composer/xdebug-handler": "^2.0.2 || ^3.0.3", + "justinrainbow/json-schema": "^5.2.11", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "react/promise": "^2.8 || ^3", + "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/polyfill-php73": "^1.24", + "symfony/polyfill-php80": "^1.24", + "symfony/polyfill-php81": "^1.24", + "symfony/process": "^5.4 || ^6.0 || ^7" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", - "phpcompatibility/php-compatibility": "^9.1", - "phpunit/phpunit": "^6.5.5", - "wp-coding-standards/wpcs": "^2.0" + "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" }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.7-dev" + }, + "phpstan": { + "includes": [ + "phpstan/rules.neon" + ] + } + }, "autoload": { "psr-4": { - "Micropackage\\Cache\\": "src" + "Composer\\": "src/Composer/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-3.0-or-later" + "MIT" ], "authors": [ { - "name": "Jakub Mikita", - "email": "jakub@bracketspace.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "https://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" } ], - "description": "WordPress Cache wrapper with Object and Transient drivers", + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], "support": { - "issues": "https://github.com/micropackage/cache/issues", - "source": "https://github.com/micropackage/cache/tree/1.0.3" + "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" }, - "time": "2021-10-30T17:44:14+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-03-11T16:12:18+00:00" }, { - "name": "micropackage/dochooks", - "version": "1.0.2", + "name": "composer/metadata-minifier", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/micropackage/dochooks.git", - "reference": "9eddd9b480fce394d0123ebe806d542e6409105e" + "url": "https://github.com/composer/metadata-minifier.git", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/micropackage/dochooks/zipball/9eddd9b480fce394d0123ebe806d542e6409105e", - "reference": "9eddd9b480fce394d0123ebe806d542e6409105e", + "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", - "phpcompatibility/php-compatibility": "^9.1", - "wp-coding-standards/wpcs": "^2.0" + "composer/composer": "^2", + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, "autoload": { "psr-4": { - "Micropackage\\DocHooks\\": "src" + "Composer\\MetadataMinifier\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-3.0-or-later" + "MIT" ], "authors": [ { - "name": "Jakub Mikita", - "email": "jakub@bracketspace.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "DocHooks - annotated WordPress hooks", + "description": "Small utility library that handles metadata minification and expansion.", + "keywords": [ + "composer", + "compression" + ], "support": { - "issues": "https://github.com/micropackage/dochooks/issues", - "source": "https://github.com/micropackage/dochooks/tree/1.0.2" + "issues": "https://github.com/composer/metadata-minifier/issues", + "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" }, - "time": "2020-03-10T10:11:47+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-04-07T13:37:33+00:00" }, { - "name": "micropackage/filesystem", - "version": "1.1.4", + "name": "composer/pcre", + "version": "3.1.3", "source": { "type": "git", - "url": "https://github.com/micropackage/filesystem.git", - "reference": "fb643749ff282bf9d057caf9903ab17c5deceb33" + "url": "https://github.com/composer/pcre.git", + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/micropackage/filesystem/zipball/fb643749ff282bf9d057caf9903ab17c5deceb33", - "reference": "fb643749ff282bf9d057caf9903ab17c5deceb33", + "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^7.4 || ^8.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", - "phpcompatibility/php-compatibility": "^9.1", - "phpunit/phpunit": "^6.5.5", - "wp-coding-standards/wpcs": "^2.0" + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { - "Micropackage\\Filesystem\\": "src" + "Composer\\Pcre\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-3.0-or-later" + "MIT" ], "authors": [ { - "name": "Jakub Mikita", - "email": "jakub@bracketspace.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Wrapper for WordPress' Filesystem for easier file manipulations.", + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], "support": { - "issues": "https://github.com/micropackage/filesystem/issues", - "source": "https://github.com/micropackage/filesystem/tree/1.1.4" + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.1.3" }, - "time": "2021-10-29T14:01:09+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-03-19T10:26:25+00:00" }, { - "name": "micropackage/internationalization", - "version": "1.0.1", + "name": "composer/semver", + "version": "3.4.0", "source": { "type": "git", - "url": "https://github.com/micropackage/internationalization.git", - "reference": "8de158b8fc71557a8310f0d98d2b8ad9f4f44dd5" + "url": "https://github.com/composer/semver.git", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/micropackage/internationalization/zipball/8de158b8fc71557a8310f0d98d2b8ad9f4f44dd5", - "reference": "8de158b8fc71557a8310f0d98d2b8ad9f4f44dd5", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", - "phpcompatibility/php-compatibility": "^9.1", - "wp-coding-standards/wpcs": "^2.0" + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { - "Micropackage\\Internationalization\\": "src" + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-3.0-or-later" + "MIT" ], "authors": [ { - "name": "Jakub Mikita", - "email": "jakub@bracketspace.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Internationalization (i18n) wrapper for WordPress plugins, themes or libraries", + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], "support": { - "issues": "https://github.com/micropackage/internationalization/issues", - "source": "https://github.com/micropackage/internationalization/tree/1.0.1" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.0" }, - "time": "2020-02-04T19:48:51+00:00" - }, - { - "name": "micropackage/requirements", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/micropackage/requirements.git", - "reference": "d21f2b54100d15246d493382dfd06a23ed49630a" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2023-08-31T09:50:34+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.5.8", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/micropackage/requirements/zipball/d21f2b54100d15246d493382dfd06a23ed49630a", - "reference": "d21f2b54100d15246d493382dfd06a23ed49630a", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a", + "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a", "shasum": "" }, "require": { - "micropackage/internationalization": "^1.0", - "php": ">=5.6" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", - "php-mock/php-mock-phpunit": "^2.5", - "phpcompatibility/php-compatibility": "^9.1", - "phpunit/phpunit": "^6.5.5", - "wp-coding-standards/wpcs": "^2.0" + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, "autoload": { "psr-4": { - "Micropackage\\Requirements\\": "src" + "Composer\\Spdx\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-3.0-or-later" + "MIT" ], "authors": [ { - "name": "Jakub Mikita", - "email": "jakub@bracketspace.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Requirements checker for WordPress plugins", + "description": "SPDX licenses list and validation library.", + "keywords": [ + "license", + "spdx", + "validator" + ], "support": { - "issues": "https://github.com/micropackage/requirements/issues", - "source": "https://github.com/micropackage/requirements/tree/1.1.2" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/spdx-licenses/issues", + "source": "https://github.com/composer/spdx-licenses/tree/1.5.8" }, - "time": "2021-11-14T08:45:42+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2023-11-20T07:44:33+00:00" }, { - "name": "micropackage/templates", - "version": "1.1.6", + "name": "composer/xdebug-handler", + "version": "3.0.4", "source": { "type": "git", - "url": "https://github.com/micropackage/templates.git", - "reference": "c29a59437d5a027ac4dd80ef87c1350f5186986a" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/micropackage/templates/zipball/c29a59437d5a027ac4dd80ef87c1350f5186986a", - "reference": "c29a59437d5a027ac4dd80ef87c1350f5186986a", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", "shasum": "" }, "require": { - "micropackage/filesystem": "^1.0", - "php": ">=5.6" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "phpcompatibility/php-compatibility": "^9.1", - "phpunit/phpunit": "^6.5.5", - "wp-coding-standards/wpcs": "^2.0", - "yoast/phpunit-polyfills": "^1.0" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { "psr-4": { - "Micropackage\\Templates\\": "src" + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "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" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-03-26T18:29:49+00:00" + }, + { + "name": "enshrined/svg-sanitize", + "version": "0.16.0", + "source": { + "type": "git", + "url": "https://github.com/darylldoyle/svg-sanitizer.git", + "reference": "239e257605e2141265b429e40987b2ee51bba4b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/239e257605e2141265b429e40987b2ee51bba4b4", + "reference": "239e257605e2141265b429e40987b2ee51bba4b4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ezyang/htmlpurifier": "^4.16", + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "enshrined\\svgSanitize\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Daryll Doyle", + "email": "daryll@enshrined.co.uk" + } + ], + "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" + }, + "time": "2023-03-20T10:51:12+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.17.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "shasum": "" + }, + "require": { + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + }, + "require-dev": { + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" + }, + "type": "library", + "autoload": { "files": [ - "src/functions/template.php" + "library/HTMLPurifier.composer.php" + ], + "psr-0": { + "HTMLPurifier": "library/" + }, + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-3.0-or-later" + "LGPL-2.1-or-later" ], "authors": [ { - "name": "Jakub Mikita", - "email": "jakub@bracketspace.com" + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" } ], - "description": "Simple PHP template engine which is easy to use", + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], "support": { - "issues": "https://github.com/micropackage/templates/issues", - "source": "https://github.com/micropackage/templates/tree/1.1.6" + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" }, - "time": "2021-11-15T21:12:41+00:00" - } - ], - "packages-dev": [ + "time": "2023-11-17T15:01:25+00:00" + }, { - "name": "bamarni/composer-bin-plugin", - "version": "1.4.1", + "name": "json-mapper/json-mapper", + "version": "2.22.0", "source": { "type": "git", - "url": "https://github.com/bamarni/composer-bin-plugin.git", - "reference": "9329fb0fbe29e0e1b2db8f4639a193e4f5406225" + "url": "https://github.com/JsonMapper/JsonMapper.git", + "reference": "6ad28693169ccd7b09ac9c282b562a90f428a7ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/9329fb0fbe29e0e1b2db8f4639a193e4f5406225", - "reference": "9329fb0fbe29e0e1b2db8f4639a193e4f5406225", + "url": "https://api.github.com/repos/JsonMapper/JsonMapper/zipball/6ad28693169ccd7b09ac9c282b562a90f428a7ea", + "reference": "6ad28693169ccd7b09ac9c282b562a90f428a7ea", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": "^5.5.9 || ^7.0 || ^8.0" + "ext-json": "*", + "myclabs/php-enum": "^1.7", + "nikic/php-parser": "^4.13", + "php": "^7.1 || ^8.0", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "psr/simple-cache": " ^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.0 || ^6.0", + "symfony/polyfill-php73": "^1.18" }, "require-dev": { - "composer/composer": "^1.0 || ^2.0", - "symfony/console": "^2.5 || ^3.0 || ^4.0" + "guzzlehttp/guzzle": "^6.5 || ^7.0", + "php-coveralls/php-coveralls": "^2.4", + "phpstan/phpstan": "^0.12.14", + "phpstan/phpstan-phpunit": "^0.12.17", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.5", + "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0", + "vimeo/psalm": "^4.10 || ^5.0" }, - "type": "composer-plugin", - "extra": { - "class": "Bamarni\\Composer\\Bin\\Plugin" + "suggest": { + "json-mapper/laravel-package": "Use JsonMapper directly with Laravel", + "json-mapper/symfony-bundle": "Use JsonMapper directly with Symfony" }, + "type": "library", "autoload": { "psr-4": { - "Bamarni\\Composer\\Bin\\": "src" + "JsonMapper\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "No conflicts for your bin dependencies", + "description": "Map JSON structures to PHP classes", + "homepage": "https://jsonmapper.net", "keywords": [ - "composer", - "conflict", - "dependency", - "executable", - "isolation", - "tool" + "json", + "jsonmapper", + "mapper", + "middleware" ], "support": { - "issues": "https://github.com/bamarni/composer-bin-plugin/issues", - "source": "https://github.com/bamarni/composer-bin-plugin/tree/master" + "docs": "https://jsonmapper.net", + "issues": "https://github.com/JsonMapper/JsonMapper/issues", + "source": "https://github.com/JsonMapper/JsonMapper" }, - "time": "2020-05-03T08:27:20+00:00" + "funding": [ + { + "url": "https://github.com/DannyvdSluijs", + "type": "github" + } + ], + "time": "2024-03-05T08:44:51+00:00" }, { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.1", + "name": "justinrainbow/json-schema", + "version": "v5.2.13", "source": { "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c" + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/fbbe7e5d79f618997bc3332a6f49246036c45793", + "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0" + "php": ">=5.3.3" }, "require-dev": { - "composer/composer": "*", - "phpcompatibility/php-compatibility": "^9.0", - "sensiolabs/security-checker": "^4.1.0" + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" }, - "type": "composer-plugin", + "bin": [ + "bin/validate-json" + ], + "type": "library", "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "support": { + "issues": "https://github.com/justinrainbow/json-schema/issues", + "source": "https://github.com/justinrainbow/json-schema/tree/v5.2.13" + }, + "time": "2023-09-26T02:20:38+00:00" + }, + { + "name": "league/flysystem", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", + "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", + "shasum": "" + }, + "require": { + "ext-json": "*", + "league/mime-type-detection": "^1.0.0", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "guzzlehttp/ringphp": "<1.1.1" }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.0", + "aws/aws-sdk-php": "^3.132.4", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "friendsofphp/php-cs-fixer": "^3.2", + "google/cloud-storage": "^1.23", + "phpseclib/phpseclib": "^2.0", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^8.5 || ^9.4", + "sabre/dav": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/2.5.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-09-17T21:02:32+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.15.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "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.15.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-01-28T23:22:08+00:00" + }, + { + "name": "micropackage/ajax", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/micropackage/ajax.git", + "reference": "8bf2c0528776696208f53ce8c393da3aba7b24ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/micropackage/ajax/zipball/8bf2c0528776696208f53ce8c393da3aba7b24ac", + "reference": "8bf2c0528776696208f53ce8c393da3aba7b24ac", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "php-mock/php-mock-phpunit": "^2.6", + "phpcompatibility/php-compatibility": "^9.1", + "phpunit/phpunit": "^6.5.5", + "wp-coding-standards/wpcs": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Micropackage\\Ajax\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "authors": [ + { + "name": "Jakub Mikita", + "email": "jakub@bracketspace.com" + } + ], + "description": "Wrapper for WordPress' AJAX", + "support": { + "issues": "https://github.com/micropackage/ajax/issues", + "source": "https://github.com/micropackage/ajax/tree/1.0.1" + }, + "time": "2020-02-11T09:58:59+00:00" + }, + { + "name": "micropackage/cache", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/micropackage/cache.git", + "reference": "b5ae58e65c30033e425a7c7aafa9ec8cd62ad2db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/micropackage/cache/zipball/b5ae58e65c30033e425a7c7aafa9ec8cd62ad2db", + "reference": "b5ae58e65c30033e425a7c7aafa9ec8cd62ad2db", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "phpcompatibility/php-compatibility": "^9.1", + "phpunit/phpunit": "^6.5.5", + "wp-coding-standards/wpcs": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Micropackage\\Cache\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jakub Mikita", + "email": "jakub@bracketspace.com" + } + ], + "description": "WordPress Cache wrapper with Object and Transient drivers", + "support": { + "issues": "https://github.com/micropackage/cache/issues", + "source": "https://github.com/micropackage/cache/tree/1.0.4" + }, + "time": "2023-06-26T20:23:43+00:00" + }, + { + "name": "micropackage/casegnostic", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/micropackage/casegnostic.git", + "reference": "fbe11c5c1ce8bc57ed5544a206244af78ce31619" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/micropackage/casegnostic/zipball/fbe11c5c1ce8bc57ed5544a206244af78ce31619", + "reference": "fbe11c5c1ce8bc57ed5544a206244af78ce31619", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", + "pestphp/pest": "^1.22", + "phpstan/phpstan": "^1.9", + "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^0.6.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Micropackage\\Casegnostic\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "description": "Casegnostic - access properties and methods both snake_case and camelCase", + "support": { + "issues": "https://github.com/micropackage/casegnostic/issues", + "source": "https://github.com/micropackage/casegnostic/tree/1.0.0" + }, + "time": "2022-11-28T13:47:17+00:00" + }, + { + "name": "micropackage/dochooks", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/micropackage/dochooks.git", + "reference": "9eddd9b480fce394d0123ebe806d542e6409105e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/micropackage/dochooks/zipball/9eddd9b480fce394d0123ebe806d542e6409105e", + "reference": "9eddd9b480fce394d0123ebe806d542e6409105e", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "phpcompatibility/php-compatibility": "^9.1", + "wp-coding-standards/wpcs": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Micropackage\\DocHooks\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "authors": [ + { + "name": "Jakub Mikita", + "email": "jakub@bracketspace.com" + } + ], + "description": "DocHooks - annotated WordPress hooks", + "support": { + "issues": "https://github.com/micropackage/dochooks/issues", + "source": "https://github.com/micropackage/dochooks/tree/1.0.2" + }, + "time": "2020-03-10T10:11:47+00:00" + }, + { + "name": "micropackage/filesystem", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/micropackage/filesystem.git", + "reference": "dddb63d0f90428c788734ce61e089ba2b5910daa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/micropackage/filesystem/zipball/dddb63d0f90428c788734ce61e089ba2b5910daa", + "reference": "dddb63d0f90428c788734ce61e089ba2b5910daa", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "phpcompatibility/php-compatibility": "^9.1", + "phpunit/phpunit": "^6.5.5", + "wp-coding-standards/wpcs": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Micropackage\\Filesystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "authors": [ + { + "name": "Jakub Mikita", + "email": "jakub@bracketspace.com" + } + ], + "description": "Wrapper for WordPress' Filesystem for easier file manipulations.", + "support": { + "issues": "https://github.com/micropackage/filesystem/issues", + "source": "https://github.com/micropackage/filesystem/tree/1.1.5" + }, + "time": "2023-06-23T08:33:34+00:00" + }, + { + "name": "micropackage/internationalization", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/micropackage/internationalization.git", + "reference": "cb140d4c4cbf9828bfcb20242b202517379381df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/micropackage/internationalization/zipball/cb140d4c4cbf9828bfcb20242b202517379381df", + "reference": "cb140d4c4cbf9828bfcb20242b202517379381df", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "phpcompatibility/php-compatibility": "^9.1", + "wp-coding-standards/wpcs": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Micropackage\\Internationalization\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "authors": [ + { + "name": "Jakub Mikita", + "email": "jakub@bracketspace.com" + } + ], + "description": "Internationalization (i18n) wrapper for WordPress plugins, themes or libraries", + "support": { + "issues": "https://github.com/micropackage/internationalization/issues", + "source": "https://github.com/micropackage/internationalization/tree/1.0.2" + }, + "time": "2023-06-23T08:54:05+00:00" + }, + { + "name": "micropackage/requirements", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/micropackage/requirements.git", + "reference": "c2fa8c2df7cefa3c7016a6e0ad755b8bdc73f519" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/micropackage/requirements/zipball/c2fa8c2df7cefa3c7016a6e0ad755b8bdc73f519", + "reference": "c2fa8c2df7cefa3c7016a6e0ad755b8bdc73f519", + "shasum": "" + }, + "require": { + "micropackage/internationalization": "^1.0", + "php": ">=5.6" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", + "php-mock/php-mock-phpunit": "^2.5", + "phpcompatibility/php-compatibility": "^9.1", + "phpunit/phpunit": "^6.5.5", + "wp-coding-standards/wpcs": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Micropackage\\Requirements\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "authors": [ + { + "name": "Jakub Mikita", + "email": "jakub@bracketspace.com" + } + ], + "description": "Requirements checker for WordPress plugins", + "support": { + "issues": "https://github.com/micropackage/requirements/issues", + "source": "https://github.com/micropackage/requirements/tree/1.2.2" + }, + "time": "2023-06-23T09:01:05+00:00" + }, + { + "name": "micropackage/templates", + "version": "1.1.6", + "source": { + "type": "git", + "url": "https://github.com/micropackage/templates.git", + "reference": "c29a59437d5a027ac4dd80ef87c1350f5186986a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/micropackage/templates/zipball/c29a59437d5a027ac4dd80ef87c1350f5186986a", + "reference": "c29a59437d5a027ac4dd80ef87c1350f5186986a", + "shasum": "" + }, + "require": { + "micropackage/filesystem": "^1.0", + "php": ">=5.6" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "phpcompatibility/php-compatibility": "^9.1", + "phpunit/phpunit": "^6.5.5", + "wp-coding-standards/wpcs": "^2.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions/template.php" + ], + "psr-4": { + "Micropackage\\Templates\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "authors": [ + { + "name": "Jakub Mikita", + "email": "jakub@bracketspace.com" + } + ], + "description": "Simple PHP template engine which is easy to use", + "support": { + "issues": "https://github.com/micropackage/templates/issues", + "source": "https://github.com/micropackage/templates/tree/1.1.6" + }, + "time": "2021-11-15T21:12:41+00:00" + }, + { + "name": "myclabs/php-enum", + "version": "1.8.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^4.6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "support": { + "issues": "https://github.com/myclabs/php-enum/issues", + "source": "https://github.com/myclabs/php-enum/tree/1.8.4" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", + "type": "tidelift" + } + ], + "time": "2022-08-04T09:53:51+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.19.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.1" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" + }, + "time": "2024-03-17T08:10:35+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.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": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "react/promise", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", + "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.1.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-16T16:21:57+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9bb7db07b5d66d90f6ebf542f09fc67d800e5259", + "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "support": { + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.10.2" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2024-02-07T12:57:50+00:00" + }, + { + "name": "seld/phar-utils", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", + "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phar" + ], + "support": { + "issues": "https://github.com/Seldaek/phar-utils/issues", + "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1" + }, + "time": "2022-08-31T10:31:18+00:00" + }, + { + "name": "seld/signal-handler", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/signal-handler.git", + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "require-dev": { + "phpstan/phpstan": "^1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^7.5.20 || ^8.5.23", + "psr/log": "^1 || ^2 || ^3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\Signal\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development", + "keywords": [ + "posix", + "sigint", + "signal", + "sigterm", + "unix" + ], + "support": { + "issues": "https://github.com/Seldaek/signal-handler/issues", + "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2" + }, + "time": "2023-09-03T09:24:00+00:00" + }, + { + "name": "symfony/cache", + "version": "v5.4.38", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "223c3afac82e003a76931b71d77db408636a0de8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/223c3afac82e003a76931b71d77db408636a0de8", + "reference": "223c3afac82e003a76931b71d77db408636a0de8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "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 extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.4.38" + }, + "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-03-19T09:55:32+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.5.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463", + "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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 caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.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-01-23T13:51:25+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e", + "reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e", + "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.36" + }, + "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-02-20T16:33:57+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "80d075412b557d41002320b96a096ca65aa2c98d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d", + "reference": "80d075412b557d41002320b96a096ca65aa2c98d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.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": "2023-01-24T14:02:46+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.4.38", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "899330a01056077271e2f614c7b28b0379a671eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/899330a01056077271e2f614c7b28b0379a671eb", + "reference": "899330a01056077271e2f614c7b28b0379a671eb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.4.38" + }, + "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-03-21T08:05:07+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.35", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "abe6d6f77d9465fed3cd2d029b29d03b56b56435" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/abe6d6f77d9465fed3cd2d029b29d03b56b56435", + "reference": "abe6d6f77d9465fed3cd2d029b29d03b56b56435", + "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.35" + }, + "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-01-23T13:51:25+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.29.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-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.29.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-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.29.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-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.29.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-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.29.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-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.29.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-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "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.29.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-01-29T20:11:03+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "4fdf34004f149cc20b2f51d7d119aa500caad975" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/4fdf34004f149cc20b2f51d7d119aa500caad975", + "reference": "4fdf34004f149cc20b2f51d7d119aa500caad975", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "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/v5.4.36" + }, + "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-02-12T15:49:53+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3", + "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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/v2.5.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": "2023-04-21T15:04:16+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "4e232c83622bd8cd32b794216aa29d0d266d353b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/4e232c83622bd8cd32b794216aa29d0d266d353b", + "reference": "4e232c83622bd8cd32b794216aa29d0d266d353b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "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/v5.4.36" + }, + "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-02-01T08:49:30+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.4.35", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "abb0a151b62d6b07e816487e20040464af96cae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/abb0a151b62d6b07e816487e20040464af96cae7", + "reference": "abb0a151b62d6b07e816487e20040464af96cae7", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.4.35" + }, + "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-01-23T13:51:25+00:00" + } + ], + "packages-dev": [ + { + "name": "antecedent/patchwork", + "version": "2.1.28", + "source": { + "type": "git", + "url": "https://github.com/antecedent/patchwork.git", + "reference": "6b30aff81ebadf0f2feb9268d3e08385cebcc08d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/6b30aff81ebadf0f2feb9268d3e08385cebcc08d", + "reference": "6b30aff81ebadf0f2feb9268d3e08385cebcc08d", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": ">=4" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignas Rudaitis", + "email": "ignas.rudaitis@gmail.com" + } + ], + "description": "Method redefinition (monkey-patching) functionality for PHP.", + "homepage": "https://antecedent.github.io/patchwork/", + "keywords": [ + "aop", + "aspect", + "interception", + "monkeypatching", + "redefinition", + "runkit", + "testing" + ], + "support": { + "issues": "https://github.com/antecedent/patchwork/issues", + "source": "https://github.com/antecedent/patchwork/tree/2.1.28" + }, + "time": "2024-02-06T09:26:11+00:00" + }, + { + "name": "automattic/phpcs-neutron-ruleset", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/Automattic/phpcs-neutron-ruleset.git", + "reference": "0d79b6016a274d1bb8cbb359592e8dad7ffa47ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Automattic/phpcs-neutron-ruleset/zipball/0d79b6016a274d1bb8cbb359592e8dad7ffa47ca", + "reference": "0d79b6016a274d1bb8cbb359592e8dad7ffa47ca", + "shasum": "" + }, + "require": { + "automattic/phpcs-neutron-standard": "^1.5.3", + "php": "^7.0 || ^8.0", + "sirbrillig/phpcs-import-detection": "^1.1.4", + "sirbrillig/phpcs-variable-analysis": "^2.6.1", + "wp-coding-standards/wpcs": "^2.1.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "squizlabs/php_codesniffer": "^3.4.2" + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHPCS meta-ruleset for WordPress development", + "support": { + "issues": "https://github.com/Automattic/phpcs-neutron-ruleset/issues", + "source": "https://github.com/Automattic/phpcs-neutron-ruleset/tree/v3.4.0" + }, + "time": "2021-03-15T19:18:33+00:00" + }, + { + "name": "automattic/phpcs-neutron-standard", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/Automattic/phpcs-neutron-standard.git", + "reference": "566ad70534296073afa9143858671356444ddead" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Automattic/phpcs-neutron-standard/zipball/566ad70534296073afa9143858671356444ddead", + "reference": "566ad70534296073afa9143858671356444ddead", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "squizlabs/php_codesniffer": "^3.3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.4 || ^0.5 || ^0.6 || ^0.7", + "phpunit/phpunit": "^5.0 || ^6.5 || ^7.0 || ^8.0", + "sirbrillig/phpcs-variable-analysis": "^2.0.1" + }, + "type": "phpcodesniffer-standard", + "autoload": { + "psr-4": { + "NeutronStandard\\": "NeutronStandard/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Payton Swick", + "email": "payton@foolord.com" + } + ], + "description": "A set of phpcs sniffs for modern php development.", + "support": { + "issues": "https://github.com/sirbrillig/phpcs-neutron-standard/issues", + "source": "https://github.com/sirbrillig/phpcs-neutron-standard", + "wiki": "https://github.com/sirbrillig/phpcs-neutron-standard/wiki" + }, + "time": "2021-02-15T22:42:03+00:00" + }, + { + "name": "brain/monkey", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/Brain-WP/BrainMonkey.git", + "reference": "a31c84515bb0d49be9310f52ef1733980ea8ffbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Brain-WP/BrainMonkey/zipball/a31c84515bb0d49be9310f52ef1733980ea8ffbb", + "reference": "a31c84515bb0d49be9310f52ef1733980ea8ffbb", + "shasum": "" + }, + "require": { + "antecedent/patchwork": "^2.1.17", + "mockery/mockery": "^1.3.5 || ^1.4.4", + "php": ">=5.6.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", + "phpcompatibility/php-compatibility": "^9.3.0", + "phpunit/phpunit": "^5.7.26 || ^6.0 || ^7.0 || >=8.0 <8.5.12 || ^8.5.14 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-version/1": "1.x-dev", + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "files": [ + "inc/api.php" + ], + "psr-4": { + "Brain\\Monkey\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Giuseppe Mazzapica", + "email": "giuseppe.mazzapica@gmail.com", + "homepage": "https://gmazzap.me", + "role": "Developer" + } + ], + "description": "Mocking utility for PHP functions and WordPress plugin API", + "keywords": [ + "Monkey Patching", + "interception", + "mock", + "mock functions", + "mockery", + "patchwork", + "redefinition", + "runkit", + "test", + "testing" + ], + "support": { + "issues": "https://github.com/Brain-WP/BrainMonkey/issues", + "source": "https://github.com/Brain-WP/BrainMonkey" + }, + "time": "2021-11-11T15:53:55+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": "doctrine/instantiator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:15:36+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, + { + "name": "filp/whoops", + "version": "2.15.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-11-03T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.11", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "81a161d0b135df89951abd52296adf97deb0723d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d", + "reference": "81a161d0b135df89951abd52296adf97deb0723d", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-03-21T18:34:15+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + "DeepCopy\\": "src/DeepCopy/" } }, "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" - } - ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", + "description": "Create deep copies (clones) of your objects", "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" + "clone", + "copy", + "duplicate", + "object", + "object graph" ], "support": { - "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, - "time": "2020-12-07T18:04:37+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.4.0", + "name": "nunomaduro/collision", + "version": "v5.11.0", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "url": "https://github.com/nunomaduro/collision.git", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.14.3", + "php": "^7.3 || ^8.0", + "symfony/console": "^5.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "brianium/paratest": "^6.1", + "fideloper/proxy": "^4.4.1", + "fruitcake/laravel-cors": "^2.0.3", + "laravel/framework": "8.x-dev", + "nunomaduro/larastan": "^0.6.2", + "nunomaduro/mock-final-classes": "^1.0", + "orchestra/testbench": "^6.0", + "phpstan/phpstan": "^0.12.64", + "phpunit/phpunit": "^9.5.0" }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "NunoMaduro\\Collision\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -601,172 +4060,234 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "description": "Cli error handling for console/command-line PHP applications.", "keywords": [ - "constructor", - "instantiate" + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" ], "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", + "url": "https://www.paypal.com/paypalme/enunomaduro", "type": "custom" }, { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" + "url": "https://github.com/nunomaduro", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-01-10T16:22:52+00:00" }, { - "name": "jakub-onderka/php-parallel-lint", - "version": "v1.0.0", + "name": "pestphp/pest", + "version": "v1.23.1", "source": { "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Parallel-Lint.git", - "reference": "04fbd3f5fb1c83f08724aa58a23db90bd9086ee8" + "url": "https://github.com/pestphp/pest.git", + "reference": "5c56ad8772b89611c72a07e23f6e30aa29dc677a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Parallel-Lint/zipball/04fbd3f5fb1c83f08724aa58a23db90bd9086ee8", - "reference": "04fbd3f5fb1c83f08724aa58a23db90bd9086ee8", + "url": "https://api.github.com/repos/pestphp/pest/zipball/5c56ad8772b89611c72a07e23f6e30aa29dc677a", + "reference": "5c56ad8772b89611c72a07e23f6e30aa29dc677a", "shasum": "" }, "require": { - "php": ">=5.3.3" + "nunomaduro/collision": "^5.11.0|^6.4.0", + "pestphp/pest-plugin": "^1.1.0", + "php": "^7.3 || ^8.0", + "phpunit/phpunit": "^9.6.10" }, "require-dev": { - "jakub-onderka/php-console-highlighter": "~0.3", - "nette/tester": "~1.3", - "squizlabs/php_codesniffer": "~2.7" - }, - "suggest": { - "jakub-onderka/php-console-highlighter": "Highlight syntax in code snippet" + "illuminate/console": "^8.83.27", + "illuminate/support": "^8.83.27", + "laravel/dusk": "^6.25.2", + "pestphp/pest-dev-tools": "^1.0.0", + "pestphp/pest-plugin-parallel": "^1.2.1" }, "bin": [ - "parallel-lint" + "bin/pest" ], "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + }, + "pest": { + "plugins": [ + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Environment" + ] + }, + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] + } + }, "autoload": { - "classmap": [ - "./" - ] + "files": [ + "src/Functions.php", + "src/Pest.php" + ], + "psr-4": { + "Pest\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "MIT" ], "authors": [ { - "name": "Jakub Onderka", - "email": "ahoj@jakubonderka.cz" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "This tool check syntax of PHP files about 20x faster than serial check.", - "homepage": "https://github.com/JakubOnderka/PHP-Parallel-Lint", + "description": "An elegant PHP Testing Framework.", + "keywords": [ + "framework", + "pest", + "php", + "test", + "testing", + "unit" + ], "support": { - "issues": "https://github.com/JakubOnderka/PHP-Parallel-Lint/issues", - "source": "https://github.com/JakubOnderka/PHP-Parallel-Lint/tree/master" + "issues": "https://github.com/pestphp/pest/issues", + "source": "https://github.com/pestphp/pest/tree/v1.23.1" }, - "abandoned": "php-parallel-lint/php-parallel-lint", - "time": "2018-02-24T15:31:20+00:00" + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2023-07-12T19:42:47+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.10.2", + "name": "pestphp/pest-plugin", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "606c5f79c6a339b49838ffbee0151ca519efe378" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/606c5f79c6a339b49838ffbee0151ca519efe378", + "reference": "606c5f79c6a339b49838ffbee0151ca519efe378", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "composer-plugin-api": "^1.1.0 || ^2.0.0", + "php": "^7.3 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "pestphp/pest": "<1.0" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "composer/composer": "^2.4.2", + "pestphp/pest": "^1.22.1", + "pestphp/pest-dev-tools": "^1.0.0" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "class": "Pest\\Plugin\\Manager" }, - "type": "library", "autoload": { "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] + "Pest\\Plugin\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", + "description": "The Pest plugin manager", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "framework", + "manager", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" ], "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/pestphp/pest-plugin/tree/v1.1.0" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-09-18T13:18:17+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.1", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", - "phar-io/version": "^1.0.1", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -798,26 +4319,32 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2017-03-05T18:14:27+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", - "version": "1.0.1", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -849,34 +4376,98 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/master" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2017-03-05T17:38:23+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { - "name": "php-stubs/wordpress-stubs", - "version": "v5.8.1", + "name": "php-parallel-lint/php-parallel-lint", + "version": "v1.4.0", "source": { "type": "git", - "url": "https://github.com/php-stubs/wordpress-stubs.git", - "reference": "8b333464d3183bccde2fdbb814e3cae592434943" + "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", + "reference": "6db563514f27e19595a19f45a4bf757b6401194e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/8b333464d3183bccde2fdbb814e3cae592434943", - "reference": "8b333464d3183bccde2fdbb814e3cae592434943", + "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6db563514f27e19595a19f45a4bf757b6401194e", + "reference": "6db563514f27e19595a19f45a4bf757b6401194e", "shasum": "" }, + "require": { + "ext-json": "*", + "php": ">=5.3.0" + }, "replace": { - "giacocorsiglia/wordpress-stubs": "*" + "grogy/php-parallel-lint": "*", + "jakub-onderka/php-parallel-lint": "*" + }, + "require-dev": { + "nette/tester": "^1.3 || ^2.0", + "php-parallel-lint/php-console-highlighter": "0.* || ^1.0", + "squizlabs/php_codesniffer": "^3.6" + }, + "suggest": { + "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet" + }, + "bin": [ + "parallel-lint" + ], + "type": "library", + "autoload": { + "classmap": [ + "./src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "ahoj@jakubonderka.cz" + } + ], + "description": "This tool checks the syntax of PHP files about 20x faster than serial check.", + "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", + "keywords": [ + "lint", + "static analysis" + ], + "support": { + "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", + "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.4.0" + }, + "time": "2024-03-27T12:14:49+00:00" + }, + { + "name": "php-stubs/wordpress-stubs", + "version": "v6.5.2", + "source": { + "type": "git", + "url": "https://github.com/php-stubs/wordpress-stubs.git", + "reference": "379f17a90c01498d4c99a0d15aab6e7aa6a2c840" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/379f17a90c01498d4c99a0d15aab6e7aa6a2c840", + "reference": "379f17a90c01498d4c99a0d15aab6e7aa6a2c840", + "shasum": "" }, "require-dev": { - "giacocorsiglia/stubs-generator": "^0.5.0", - "php": "~7.1" + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "nikic/php-parser": "^4.13", + "php": "^7.4 || ~8.0.0", + "php-stubs/generator": "^0.8.3", + "phpdocumentor/reflection-docblock": "5.3", + "phpstan/phpstan": "^1.10.49", + "phpunit/phpunit": "^9.5", + "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^0.11" }, "suggest": { "paragonie/sodium_compat": "Pure PHP implementation of libsodium", - "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "symfony/polyfill-php80": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan" }, "type": "library", @@ -893,30 +4484,30 @@ ], "support": { "issues": "https://github.com/php-stubs/wordpress-stubs/issues", - "source": "https://github.com/php-stubs/wordpress-stubs/tree/v5.8.1" + "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.5.2" }, - "time": "2021-09-09T22:10:19+00:00" + "time": "2024-04-14T17:30:14+00:00" }, { "name": "php-stubs/wp-cli-stubs", - "version": "v2.5.0", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/php-stubs/wp-cli-stubs.git", - "reference": "9140bf3f59d9df1f67f69c0d49d9364ee1684348" + "reference": "fbd7ff47393c9478e0f557d0b4caadaed20986fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-stubs/wp-cli-stubs/zipball/9140bf3f59d9df1f67f69c0d49d9364ee1684348", - "reference": "9140bf3f59d9df1f67f69c0d49d9364ee1684348", + "url": "https://api.github.com/repos/php-stubs/wp-cli-stubs/zipball/fbd7ff47393c9478e0f557d0b4caadaed20986fb", + "reference": "fbd7ff47393c9478e0f557d0b4caadaed20986fb", "shasum": "" }, "require": { - "php-stubs/wordpress-stubs": "^4.7 || ^5.0" + "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0" }, "require-dev": { - "giacocorsiglia/stubs-generator": "^0.5.0", - "php": "~7.1" + "php": "~7.3 || ~8.0", + "php-stubs/generator": "^0.8.0" }, "suggest": { "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", @@ -937,9 +4528,9 @@ ], "support": { "issues": "https://github.com/php-stubs/wp-cli-stubs/issues", - "source": "https://github.com/php-stubs/wp-cli-stubs/tree/v2.5.0" + "source": "https://github.com/php-stubs/wp-cli-stubs/tree/v2.10.0" }, - "time": "2021-05-19T16:06:45+00:00" + "time": "2024-02-09T02:10:10+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -966,286 +4557,224 @@ "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": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } + "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": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "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": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", + "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "compatibility", + "phpcs", + "standards" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", + "source": "https://github.com/PHPCompatibility/PHPCompatibility" }, - "time": "2020-06-27T09:03:43+00:00" + "time": "2019-12-27T09:44:58+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "name": "phpcompatibility/phpcompatibility-paragonie", + "version": "1.3.2", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", + "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", + "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "phpcompatibility/php-compatibility": "^9.0" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } + "dealerdirect/phpcodesniffer-composer-installer": "^0.7", + "paragonie/random_compat": "dev-master", + "paragonie/sodium_compat": "dev-master" }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || 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": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Wim Godden", + "role": "lead" }, { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "name": "Juliette Reinders Folmer", + "role": "lead" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "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/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues", + "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie" }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2022-10-25T01:46:02+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "name": "phpcompatibility/phpcompatibility-wp", + "version": "2.1.4", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", + "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", + "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "phpcompatibility/php-compatibility": "^9.0", + "phpcompatibility/phpcompatibility-paragonie": "^1.0" }, "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } + "dealerdirect/phpcodesniffer-composer-installer": "^0.7" }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || 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": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Wim Godden", + "role": "lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "lead" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "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/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", + "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" }, - "time": "2021-10-02T14:08:47+00:00" + "time": "2022-10-24T09:00:36+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.10.3", + "name": "phpstan/phpdoc-parser", + "version": "0.4.9", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/98a088b17966bdf6ee25c8a4b634df313d8aa531", + "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + "consistence/coding-standard": "^3.5", + "ergebnis/composer-normalize": "^2.0.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "phing/phing": "^2.16.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.26", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^6.3", + "slevomat/coding-standard": "^4.7.2", + "symfony/process": "^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10.x-dev" + "dev-master": "0.4-dev" } }, "autoload": { "psr-4": { - "Prophecy\\": "src/Prophecy" + "PHPStan\\PhpDocParser\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/master" }, - "time": "2020-03-05T15:02:03+00:00" + "time": "2020-08-03T20:32:43+00:00" }, { "name": "phpstan/phpstan", - "version": "0.12.99", + "version": "1.11.5", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7" + "reference": "490f0ae1c92b082f154681d7849aee776a7c1443" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b4d40f1d759942f523be267a1bab6884f46ca3f7", - "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/490f0ae1c92b082f154681d7849aee776a7c1443", + "reference": "490f0ae1c92b082f154681d7849aee776a7c1443", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.2|^8.0" }, "conflict": { "phpstan/phpstan-shim": "*" @@ -1255,11 +4784,6 @@ "phpstan.phar" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - } - }, "autoload": { "files": [ "bootstrap.php" @@ -1270,9 +4794,16 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/0.12.99" + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { @@ -1282,54 +4813,50 @@ { "url": "https://github.com/phpstan", "type": "github" - }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" } ], - "time": "2021-09-12T20:09:55+00:00" + "time": "2024-06-17T15:10:54+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.3.2", + "version": "9.2.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-xdebug": "^2.5.5" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3.x-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -1357,31 +4884,41 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/5.3" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" }, - "time": "2018-04-06T15:36:58+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:37:42+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1396,7 +4933,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -1407,30 +4944,47 @@ "iterator" ], "support": { - "irc": "irc://irc.freenode.net/phpunit", "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, - "time": "2017-11-27T13:52:08+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -1447,41 +5001,47 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "template" + "process" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" }, - "time": "2015-06-21T13:50:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "phpunit/php-timer", - "version": "1.0.9", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1496,46 +5056,51 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "timer" + "template" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/master" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" }, - "time": "2017-02-26T11:10:40+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "2.0.2", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1550,70 +5115,73 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "tokenizer" + "timer" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, - "abandoned": true, - "time": "2017-11-27T05:48:46+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", - "version": "6.5.0", + "version": "9.6.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9582244325db2dda80ee8bd920c3f353b0b6329d" + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9582244325db2dda80ee8bd920c3f353b0b6329d", - "reference": "9582244325db2dda80ee8bd920c3f353b0b6329d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.2.3", - "phpunit/php-file-iterator": "^1.4.3", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", - "sebastian/environment": "^3.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" - }, - "require-dev": { - "ext-pdo": "*" + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.28", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" }, "suggest": { - "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -1621,10 +5189,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5.x-dev" + "dev-master": "9.6-dev" } }, "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], "classmap": [ "src/" ] @@ -1649,43 +5220,49 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/6.5.0" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" }, - "time": "2017-11-30T16:20:46+00:00" + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-04-05T04:35:58+00:00" }, { - "name": "phpunit/phpunit-mock-objects", - "version": "5.0.10", + "name": "sebastian/cli-parser", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.1" - }, - "conflict": { - "phpunit/phpunit": "<6.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.5.11" - }, - "suggest": { - "ext-soap": "*" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -1704,172 +5281,100 @@ "role": "lead" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues", - "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/5.0.10" - }, - "abandoned": true, - "time": "2018-08-09T05:50:03+00:00" - }, - { - "name": "roots/wordpress", - "version": "5.8.2", - "source": { - "type": "git", - "url": "https://github.com/WordPress/WordPress.git", - "reference": "5.8.2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/WordPress/WordPress/zipball/refs/tags/5.8.2" - }, - "require": { - "php": ">=5.3.2", - "roots/wordpress-core-installer": ">=1.0.0" - }, - "provide": { - "wordpress/core-implementation": "5.8.2" - }, - "type": "wordpress-core", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" - } - ], - "description": "WordPress is web software you can use to create a beautiful website or blog.", - "homepage": "https://wordpress.org/", - "keywords": [ - "blog", - "cms", - "wordpress" - ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "docs": "https://developer.wordpress.org/", - "forum": "https://wordpress.org/support/", - "irc": "irc://irc.freenode.net/wordpress", - "issues": "https://core.trac.wordpress.org/", - "rss": "https://wordpress.org/news/feed/", - "source": "https://core.trac.wordpress.org/browser", - "wiki": "https://codex.wordpress.org/" + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { - "url": "https://github.com/roots", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://www.patreon.com/rootsdev", - "type": "patreon" } ], - "time": "2021-11-10T23:24:02+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { - "name": "roots/wordpress-core-installer", - "version": "1.100.0", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/roots/wordpress-core-installer.git", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/roots/wordpress-core-installer/zipball/73f8488e5178c5d54234b919f823a9095e2b1847", - "reference": "73f8488e5178c5d54234b919f823a9095e2b1847", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.6.0" - }, - "conflict": { - "composer/installers": "<1.0.6" - }, - "replace": { - "johnpbloch/wordpress-core-installer": "*" + "php": ">=7.3" }, "require-dev": { - "composer/composer": "^1.0 || ^2.0", - "phpunit/phpunit": ">=5.7.27" + "phpunit/phpunit": "^9.3" }, - "type": "composer-plugin", + "type": "library", "extra": { - "class": "Roots\\Composer\\WordPressCorePlugin" + "branch-alias": { + "dev-master": "1.0-dev" + } }, "autoload": { - "psr-4": { - "Roots\\Composer\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-2.0-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "John P. Bloch", - "email": "me@johnpbloch.com" - }, - { - "name": "Roots", - "email": "team@roots.io" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A custom installer to handle deploying WordPress with composer", - "keywords": [ - "wordpress" - ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "issues": "https://github.com/roots/wordpress-core-installer/issues", - "source": "https://github.com/roots/wordpress-core-installer/tree/master" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" }, "funding": [ { - "url": "https://github.com/roots", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://www.patreon.com/rootsdev", - "type": "patreon" } ], - "time": "2020-08-20T00:27:30+00:00" + "time": "2020-10-26T13:08:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1891,7 +5396,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, "funding": [ { @@ -1899,34 +5404,34 @@ "type": "github" } ], - "time": "2020-11-30T08:15:22+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { "name": "sebastian/comparator", - "version": "2.1.3", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", - "sebastian/exporter": "^3.1" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1939,6 +5444,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -1950,10 +5459,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -1965,29 +5470,36 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/master" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, - "time": "2018-02-01T13:46:46+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" }, { - "name": "sebastian/diff", - "version": "2.0.1", + "name": "sebastian/complexity", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "php": "^7.0" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -2006,49 +5518,118 @@ ], "authors": [ { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/master" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, - "time": "2017-08-03T08:09:46+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", - "version": "3.1.0", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.1" + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2075,36 +5656,42 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/master" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, - "time": "2017-07-01T08:51:00+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2139,14 +5726,14 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -2154,27 +5741,30 @@ "type": "github" } ], - "time": "2021-11-11T13:51:24+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "2.0.0", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-uopz": "*" @@ -2182,7 +5772,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -2207,36 +5797,99 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, - "time": "2017-04-27T15:39:26+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.4", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2258,7 +5911,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" }, "funding": [ { @@ -2266,32 +5919,32 @@ "type": "github" } ], - "time": "2020-11-30T07:40:27+00:00" + "time": "2020-10-26T13:12:34+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2313,7 +5966,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" }, "funding": [ { @@ -2321,32 +5974,32 @@ "type": "github" } ], - "time": "2020-11-30T07:37:18+00:00" + "time": "2020-10-26T13:14:26+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.1", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2373,10 +6026,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -2384,29 +6037,32 @@ "type": "github" } ], - "time": "2020-11-30T07:34:24+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", - "version": "1.0.0", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2427,298 +6083,442 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/master" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, - "time": "2015-07-28T20:34:47+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "sirbrillig/phpcs-import-detection", + "version": "v1.3.3", + "source": { + "type": "git", + "url": "https://github.com/sirbrillig/phpcs-import-detection.git", + "reference": "7035ef6f3a15db182b59664d2c060918aa827e16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sirbrillig/phpcs-import-detection/zipball/7035ef6f3a15db182b59664d2c060918aa827e16", + "reference": "7035ef6f3a15db182b59664d2c060918aa827e16", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^7.0 || ^8.0", + "squizlabs/php_codesniffer": "^3.5.8" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", + "phpunit/phpunit": "^9.0", + "sirbrillig/phpcs-variable-analysis": "^2.0.1" }, + "type": "phpcodesniffer-standard", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "ImportDetection\\": "ImportDetection/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Payton Swick", + "email": "payton@foolord.com" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "A set of phpcs sniffs to look for unused or unimported symbols.", + "keywords": [ + "phpcs", + "static analysis" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/master" + "issues": "https://github.com/sirbrillig/phpcs-import-detection/issues", + "source": "https://github.com/sirbrillig/phpcs-import-detection/tree/v1.3.3" }, - "time": "2016-10-03T07:35:21+00:00" + "time": "2022-10-30T19:04:13+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "3.6.1", + "name": "sirbrillig/phpcs-variable-analysis", + "version": "v2.11.17", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e" + "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git", + "reference": "3b71162a6bf0cde2bff1752e40a1788d8273d049" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/f268ca40d54617c6e06757f83f699775c9b3ff2e", - "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e", + "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/3b71162a6bf0cde2bff1752e40a1788d8273d049", + "reference": "3b71162a6bf0cde2bff1752e40a1788d8273d049", "shasum": "" }, "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" + "php": ">=5.4.0", + "squizlabs/php_codesniffer": "^3.5.6" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0", + "phpcsstandards/phpcsdevcs": "^1.1", + "phpstan/phpstan": "^1.7", + "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0", + "sirbrillig/phpcs-import-detection": "^1.1", + "vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0@beta" }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" + "type": "phpcodesniffer-standard", + "autoload": { + "psr-4": { + "VariableAnalysis\\": "VariableAnalysis/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-2-Clause" ], "authors": [ { - "name": "Greg Sherwood", - "role": "lead" + "name": "Sam Graham", + "email": "php-codesniffer-variableanalysis@illusori.co.uk" + }, + { + "name": "Payton Swick", + "email": "payton@foolord.com" } ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "description": "A PHPCS sniff to detect problems with variables.", "keywords": [ "phpcs", - "standards" + "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/sirbrillig/phpcs-variable-analysis/issues", + "source": "https://github.com/sirbrillig/phpcs-variable-analysis", + "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki" }, - "time": "2021-10-11T04:00:11+00:00" + "time": "2023-08-05T23:46:11+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "name": "slevomat/coding-standard", + "version": "6.4.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "696dcca217d0c9da2c40d02731526c1e25b65346" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/696dcca217d0c9da2c40d02731526c1e25b65346", + "reference": "696dcca217d0c9da2c40d02731526c1e25b65346", "shasum": "" }, "require": { - "php": ">=7.1" + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", + "php": "^7.1 || ^8.0", + "phpstan/phpdoc-parser": "0.4.5 - 0.4.9", + "squizlabs/php_codesniffer": "^3.5.6" }, - "suggest": { - "ext-ctype": "For best performance" + "require-dev": { + "phing/phing": "2.16.3", + "php-parallel-lint/php-parallel-lint": "1.2.0", + "phpstan/phpstan": "0.12.48", + "phpstan/phpstan-deprecation-rules": "0.12.5", + "phpstan/phpstan-phpunit": "0.12.16", + "phpstan/phpstan-strict-rules": "0.12.5", + "phpunit/phpunit": "7.5.20|8.5.5|9.4.0" }, - "type": "library", + "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "6.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] + "SlevomatCodingStandard\\": "SlevomatCodingStandard" + } }, "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" - ], + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "issues": "https://github.com/slevomat/coding-standard/issues", + "source": "https://github.com/slevomat/coding-standard/tree/6.4.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/kukulich", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2020-10-05T12:39:37+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.23.0", + "name": "squizlabs/php_codesniffer", + "version": "3.9.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/267a4405fff1d9c847134db3a3c92f1ab7f77909", + "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909", "shasum": "" }, "require": { - "php": ">=7.1" + "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-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "3.x-dev" } }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Greg Sherwood", + "role": "Former lead" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", + "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": [ - "compatibility", - "polyfill", - "portable", - "shim" + "phpcs", + "standards", + "static analysis" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + "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://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/PHPCSStandards", + "type": "github" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/jrfnl", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2024-03-31T21:03:09+00:00" + }, + { + "name": "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset", + "version": "v0.6.1", + "source": { + "type": "git", + "url": "https://github.com/szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset.git", + "reference": "9b6f8a08bf5ebc8b70da4d37d4d584b954fc5a41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset/zipball/9b6f8a08bf5ebc8b70da4d37d4d584b954fc5a41", + "reference": "9b6f8a08bf5ebc8b70da4d37d4d584b954fc5a41", + "shasum": "" + }, + "require": { + "automattic/phpcs-neutron-ruleset": "^3.4.0", + "php": "^7.1 || ^8.0", + "slevomat/coding-standard": "^6.0.0", + "squizlabs/php_codesniffer": "^3.5.3" + }, + "require-dev": { + "phpcsstandards/phpcsdevcs": "^1.0" + }, + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0" + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Hybrid PHPCS ruleset for OOP WordPress development", + "support": { + "issues": "https://github.com/szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset/issues", + "source": "https://github.com/szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset/tree/v0.6.1" + }, + "time": "2021-07-01T07:23:18+00:00" }, { "name": "szepeviktor/phpstan-wordpress", - "version": "v0.7.7", + "version": "v1.3.4", "source": { "type": "git", "url": "https://github.com/szepeviktor/phpstan-wordpress.git", - "reference": "bdbea69b2ba4a69998c3b6fe2b7106d78a23bd72" + "reference": "891d0767855a32c886a439efae090408cc1fa156" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/bdbea69b2ba4a69998c3b6fe2b7106d78a23bd72", - "reference": "bdbea69b2ba4a69998c3b6fe2b7106d78a23bd72", + "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/891d0767855a32c886a439efae090408cc1fa156", + "reference": "891d0767855a32c886a439efae090408cc1fa156", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", - "php-stubs/wordpress-stubs": "^4.7 || ^5.0", - "phpstan/phpstan": "^0.12.26", + "php": "^7.2 || ^8.0", + "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0", + "phpstan/phpstan": "^1.10.31", "symfony/polyfill-php73": "^1.12.0" }, "require-dev": { - "composer/composer": "^1.10.22", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7", + "composer/composer": "^2.1.14", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", "php-parallel-lint/php-parallel-lint": "^1.1", - "phpstan/phpstan-strict-rules": "^0.12", - "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^0.6" + "phpstan/phpstan-strict-rules": "^1.2", + "phpunit/phpunit": "^8.0 || ^9.0", + "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^0.8" + }, + "suggest": { + "swissspidy/phpstan-no-private": "Detect usage of internal core functions, classes and methods" }, "type": "phpstan-extension", "extra": { @@ -2747,28 +6547,22 @@ ], "support": { "issues": "https://github.com/szepeviktor/phpstan-wordpress/issues", - "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v0.7.7" + "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v1.3.4" }, - "funding": [ - { - "url": "https://www.paypal.me/szepeviktor", - "type": "custom" - } - ], - "time": "2021-07-14T09:19:15+00:00" + "time": "2024-03-21T16:32:59+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -2797,7 +6591,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -2805,65 +6599,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "wp-coding-standards/wpcs", @@ -2916,80 +6652,33 @@ }, "time": "2020-05-13T23:57:56+00:00" }, - { - "name": "wp-phpunit/wp-phpunit", - "version": "5.8.2", - "source": { - "type": "git", - "url": "https://github.com/wp-phpunit/wp-phpunit.git", - "reference": "0cefcc49fd8a7e8c2f8d755e314532441618aee5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/0cefcc49fd8a7e8c2f8d755e314532441618aee5", - "reference": "0cefcc49fd8a7e8c2f8d755e314532441618aee5", - "shasum": "" - }, - "type": "library", - "autoload": { - "files": [ - "__loaded.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Evan Mattson", - "email": "me@aaemnnost.tv" - }, - { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" - } - ], - "description": "WordPress core PHPUnit library", - "homepage": "https://github.com/wp-phpunit", - "keywords": [ - "phpunit", - "test", - "wordpress" - ], - "support": { - "docs": "https://github.com/wp-phpunit/docs", - "issues": "https://github.com/wp-phpunit/issues", - "source": "https://github.com/wp-phpunit/wp-phpunit" - }, - "time": "2021-11-10T19:49:29+00:00" - }, { "name": "yoast/phpunit-polyfills", - "version": "1.0.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "1a582ab1d91e86aa450340c4d35631a85314ff9f" + "reference": "4a088f125c970d6d6ea52c927f96fe39b330d0f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/1a582ab1d91e86aa450340c4d35631a85314ff9f", - "reference": "1a582ab1d91e86aa450340c4d35631a85314ff9f", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/4a088f125c970d6d6ea52c927f96fe39b330d0f1", + "reference": "4a088f125c970d6d6ea52c927f96fe39b330d0f1", "shasum": "" }, "require": { - "php": ">=5.4", - "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + "php": ">=5.6", + "phpunit/phpunit": "^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0" }, "require-dev": { - "yoast/yoastcs": "^2.2.0" + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "yoast/yoastcs": "^3.1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev", - "dev-develop": "1.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -3021,9 +6710,10 @@ ], "support": { "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", + "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2021-10-03T08:40:26+00:00" + "time": "2024-04-05T16:36:44+00:00" } ], "aliases": [], @@ -3032,9 +6722,9 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.0", + "php": "^7.4 | ^8.0", "composer-runtime-api": "^2.0" }, "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } diff --git a/dependencies/.gitkeep b/dependencies/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/load.php b/load.php index 9f5e89f85..69c02e69a 100644 --- a/load.php +++ b/load.php @@ -1,10 +1,13 @@ init(); -}, 4 ); +add_action( + 'init', + static function () { + Notification::init(__FILE__)->init(); + }, + 4 +); diff --git a/notification.php b/notification.php index 736c47030..7076e0fc5 100644 --- a/notification.php +++ b/notification.php @@ -4,7 +4,9 @@ * Description: Customisable email and webhook notifications with powerful developer friendly API for custom triggers and notifications. Send alerts easily. * Author: BracketSpace * Author URI: https://bracketspace.com - * Version: 8.0.15 + * Version: 9.0.0 + * Requires PHP: 7.4 + * Requires at least: 5.8 * License: GPL3 * Text Domain: notification * Domain Path: /languages @@ -30,14 +32,14 @@ class Notification { * Initializes the plugin runtime * * @since 7.0.0 - * @param string $plugin_file Main plugin file. + * @param string $pluginFile Main plugin file. * @return BracketSpace\Notification\Runtime */ - public static function init( $plugin_file ) { + public static function init( $pluginFile ) { if ( ! isset( self::$runtime ) ) { // Autoloading. - require_once dirname( $plugin_file ) . '/vendor/autoload.php'; - self::$runtime = new BracketSpace\Notification\Runtime( $plugin_file ); + require_once dirname( $pluginFile ) . '/vendor/autoload.php'; + self::$runtime = new BracketSpace\Notification\Runtime( $pluginFile ); } return self::$runtime; @@ -57,11 +59,11 @@ public static function components() { * Gets runtime component * * @since 7.0.0 - * @param string $component_name Component name. + * @param class-string $componentName Component name. * @return mixed */ - public static function component( $component_name ) { - return isset( self::$runtime ) ? self::$runtime->component( $component_name ) : null; + public static function component( $componentName ) { + return isset( self::$runtime ) ? self::$runtime->component( $componentName ) : null; } /** @@ -88,6 +90,23 @@ public static function version() { * Gets plugin filesystem * * @since 8.0.0 + * @throws \Exception When settings class wasn't invoked yet. + * @return BracketSpace\Notification\Core\Settings + */ + public static function settings() { + $settings = self::component('BracketSpace\Notification\Core\Settings'); + + if (! $settings instanceof BracketSpace\Notification\Core\Settings) { + throw new Exception( 'Notification runtime has not been invoked yet.' ); + } + + return $settings; + } + + /** + * Gets plugin settings instance + * + * @since 9.0.0 * @throws \Exception When runtime wasn't invoked yet. * @return \BracketSpace\Notification\Dependencies\Micropackage\Filesystem\Filesystem */ @@ -96,7 +115,7 @@ public static function fs() { throw new Exception( 'Notification runtime has not been invoked yet.' ); } - return self::$runtime->get_filesystem(); + return self::$runtime->getFilesystem(); } } diff --git a/package.json b/package.json index 160e0de40..343d178c6 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,14 @@ "fix:css": "mp-scripts lint-style --fix", "fix:js": "mp-scripts lint-js --fix", "lint": "run-p \"lint:*\"", - "fix": "run-p \"fix:*\"" + "fix": "run-p \"fix:*\"", + "test-php": "wp-env run tests-wordpress --env-cwd=wp-content/plugins/notification ./vendor/bin/pest -- --configuration phpunit.xml" }, "author": "BracketSpace", "license": "GPL-3.0-or-later", "devDependencies": { - "@micropackage/scripts": "^1.0.0", + "@micropackage/scripts": "^1.2.5", + "@wordpress/env": "^9.7.0", "npm-run-all": "^4.1.5" }, "dependencies": { diff --git a/phpcs.xml b/phpcs.xml index f2a11ba35..3eaefaff3 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -1,38 +1,99 @@ - - Sniffs for Notification WordPress plugin - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + - - - + + @@ -41,12 +102,13 @@ + bin/* node_modules/* + resources/js.* + resources/css.* tests/* vendor/* - vendor-bin/* - src/Dependencies/* - src/Utils/EDDUpdater.php - resources/css/* - resources/js/* + dependencies/* + compat/* + notification.php diff --git a/phpmd.xml b/phpmd.xml deleted file mode 100644 index f52317327..000000000 --- a/phpmd.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - PHP MD Standards for Notification plugin - - - - - - - - - - - - - - - - - - - - - - - diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 1b478baab..b2ccf1768 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1,2477 +1,2207 @@ parameters: ignoreErrors: - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'action_clear_logs'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'actionClearLogs'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'activate'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'activate'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'activation_nag'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'activationNag'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'activation_notices'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'activationNotices'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'add_conditionals…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'addConditionalsMeta…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'add_help'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'addHelp'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'add_merge_tags_meta…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'addMergeTagsMetaBox'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'add_notifications'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'addNotifications'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'add_save_meta_box'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'addSaveMetaBox'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'add_trigger_action'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'addTriggerAction'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'ajax_change…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'ajaxChangeNotificat…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'ajax_render_merge…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'ajaxRenderMergeTags'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'ajax_sync'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'ajaxSync'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'bind'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'bind'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'bypass_trash'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'bypassTrash'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'carriers_list'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'carriersList'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'carriers_settings…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'carriersSettings'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'catch_notification'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'carriersSettingsUps…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'check_upgrade'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'catchNotification'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'custom_development'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'checkUpgrade'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'custom_fields_merge…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'customDevelopment'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'deactivate'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'customFieldsMergeTa…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'debug_warning'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'deactivate'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'delete_local_json'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'debugWarning'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'disable_password…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'debuggingSettings'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'disable_send…'\\) given\\.$#" - count: 2 - path: compat/register-hooks.php - - - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'display_bulk…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'deleteLocalJson'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'enqueue_scripts'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'deleteNotification'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'export_request'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'disablePasswordChan…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'handle_cron'\\) given\\.$#" - count: 1 + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'disableSendConfirma…'\\} given\\.$#" + count: 2 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'import_request'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'displayBulkActionsA…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'load_local_json'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'displayNotice'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'maybe_redirect'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'emailsSettings'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'metabox_cleanup'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'enqueueScripts'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'notification…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'exportRequest'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'process_queue'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'generalSettings'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'proxy_comment_reply'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'handleCron'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'proxy_post_comment…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'importRequest'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'proxy_transition…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'inactiveLicenseWarn…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'register'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'loadDatabaseNotific…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'register_check…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'loadLocalJson'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'register_page'\\) given\\.$#" - count: 3 - path: compat/register-hooks.php - - - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'register_settings'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'maybeRedirect'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'remove_defaults'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'metaboxCleanup'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'render_carrier_boxes'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'notificationDuplica…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'render_carriers…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'processQueue'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'render_main_column'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'proxyCommentReply'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'render_trigger…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'proxyPostCommentToP…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'replace_new_user…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'proxyTransitionComm…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'rest_api_init'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'register'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'review_queue_switch'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'registerCheckUpdate…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'save'\\) given\\.$#" - count: 1 + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'registerPage'\\} given\\.$#" + count: 3 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'save_local_json'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'registerSettings'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'save_settings'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'removeDefaults'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'scheduled_triggers…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'renderCarrierBoxes'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'setup_notifications'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'renderCarriersWidget'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'table_column_content'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'renderMainColumn'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'test_rest_api'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'renderTriggerSelect'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'triggers_settings…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'replaceNewUserNotif…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'updater'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'restApiInit'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'upgrade_db'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'reviewQueueSwitch'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\(mixed, 'user_login_with_2fa'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'save'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'add_duplicate_row…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'saveLocalJson'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'adjust_bulk_actions'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'saveSettings'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'adjust_trash_link'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'scheduledTriggersSe…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'bulk_action_messages'\\) given\\.$#" - count: 1 + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'settings'\\} given\\.$#" + count: 2 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'change_post_statuses'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'setupNotification'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'create_notification…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'tableColumnContent'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'disable_automatic…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'testRestApi'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'disable_comment…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'triggersSettings'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'disable_email…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'triggersSettingsUps…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'disable_password…'\\) given\\.$#" - count: 2 + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'updater'\\} given\\.$#" + count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'disable_post_author…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'upgradeDb'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'filter_email_from…'\\) given\\.$#" - count: 2 + message: "#^Parameter \\#2 \\$callback of function add_action expects callable\\(\\)\\: mixed, array\\{mixed, 'userLoginWith2fa'\\} given\\.$#" + count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'filter_post_types'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'addDuplicateRowActi…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'handle_status_bulk…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'adjustBulkActions'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'identify_trigger'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'adjustTrashLink'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'post_updated…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'bulkActionMessages'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'register_intervals'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'changePostStatuses'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'remove_quick_edit'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'columnCleanup'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'remove_status…'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'disableAutomaticWpC…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\(mixed, 'table_columns'\\) given\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'disableCommentModer…'\\} given\\.$#" count: 1 path: compat/register-hooks.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Interfaces\\\\Cacheable\\:\\:add\\(\\) has no return typehint specified\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'disableEmailChangeN…'\\} given\\.$#" count: 1 - path: compat/src-deprecated/Utils/Interfaces/Cacheable.php + path: compat/register-hooks.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Interfaces\\\\Cacheable\\:\\:delete\\(\\) has no return typehint specified\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'disablePasswordChan…'\\} given\\.$#" count: 1 - path: compat/src-deprecated/Utils/Interfaces/Cacheable.php + path: compat/register-hooks.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Interfaces\\\\Cacheable\\:\\:set\\(\\) has no return typehint specified\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'disablePasswordRese…'\\} given\\.$#" count: 1 - path: compat/src-deprecated/Utils/Interfaces/Cacheable.php + path: compat/register-hooks.php - - message: "#^Function notification_get_notification_recipients\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'disablePostAuthorNo…'\\} given\\.$#" count: 1 - path: compat/src-deprecated/functions.php + path: compat/register-hooks.php - - message: "#^Function notification_get_notifications\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'disableSendConfirma…'\\} given\\.$#" count: 1 - path: compat/src-deprecated/functions.php + path: compat/register-hooks.php - - message: "#^Function notification_get_posts\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'filterPostTypes'\\} given\\.$#" count: 1 - path: compat/src-deprecated/functions.php + path: compat/register-hooks.php - - message: "#^Function notification_get_template\\(\\) has parameter \\$vars with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'handleStatusBulkAct…'\\} given\\.$#" count: 1 - path: compat/src-deprecated/functions.php + path: compat/register-hooks.php - - message: "#^Function notification_template\\(\\) has parameter \\$vars with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'identifyTrigger'\\} given\\.$#" count: 1 - path: compat/src-deprecated/functions.php + path: compat/register-hooks.php - - message: "#^Function notification_whitelabel\\(\\) has parameter \\$args with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'postUpdatedMessages'\\} given\\.$#" count: 1 - path: compat/src-deprecated/functions.php + path: compat/register-hooks.php - - message: "#^Call to static method create\\(\\) on an unknown class StubsGenerator\\\\Finder\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'registerIntervals'\\} given\\.$#" count: 1 - path: compat/stub-finder.php + path: compat/register-hooks.php - - message: "#^Method Notification\\:\\:components\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'removeQuickEdit'\\} given\\.$#" count: 1 - path: notification.php + path: compat/register-hooks.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Adapter\\:\\:__call\\(\\) has parameter \\$arguments with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'removeStatusDisplay'\\} given\\.$#" count: 1 - path: src/Abstracts/Adapter.php + path: compat/register-hooks.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Adapter\\:\\:setup_notification\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$callback of function add_filter expects callable\\(\\)\\: mixed, array\\{mixed, 'tableColumns'\\} given\\.$#" count: 1 - path: src/Abstracts/Adapter.php + path: compat/register-hooks.php - - message: "#^Parameter \\#1 \\$function of function call_user_func_array expects callable\\(\\)\\: mixed, array\\(BracketSpace\\\\Notification\\\\Core\\\\Notification, string\\) given\\.$#" + message: "#^Parameter \\#1 \\$data of method BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:setup\\(\\) expects array\\{hash\\?\\: string, title\\?\\: string, trigger\\?\\: BracketSpace\\\\Notification\\\\Interfaces\\\\Triggerable, carriers\\?\\: array\\, enabled\\?\\: bool, extras\\?\\: array\\, version\\?\\: int\\}, array given\\.$#" count: 1 - path: src/Abstracts/Adapter.php + path: compat/src-deprecated/Abstracts/Adapter.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Carrier\\:\\:get_data\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$json of function json_decode expects string, string\\|null given\\.$#" count: 1 - path: src/Abstracts/Carrier.php + path: compat/src-deprecated/Adapter/JSON.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Carrier\\:\\:set_data\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Offset 'enabled' does not exist on array\\{hash\\?\\: string, title\\?\\: string, trigger\\?\\: BracketSpace\\\\Notification\\\\Interfaces\\\\Triggerable, carriers\\?\\: array\\, enabled\\?\\: bool, extras\\?\\: array\\, version\\?\\: int\\}\\|null\\.$#" count: 1 - path: src/Abstracts/Carrier.php + path: compat/src-deprecated/Adapter/WordPress.php - - message: "#^Parameter \\#1 \\$str of function md5 expects string, string\\|false given\\.$#" - count: 1 - path: src/Abstracts/Carrier.php + message: "#^Offset 'hash' does not exist on array\\{hash\\?\\: string, title\\?\\: string, trigger\\?\\: BracketSpace\\\\Notification\\\\Interfaces\\\\Triggerable, carriers\\?\\: array\\, enabled\\?\\: bool, extras\\?\\: array\\, version\\?\\: int\\}\\|null\\.$#" + count: 2 + path: compat/src-deprecated/Adapter/WordPress.php - - message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\|string, string\\|null given\\.$#" + message: "#^Offset 'title' does not exist on array\\{hash\\?\\: string, title\\?\\: string, trigger\\?\\: BracketSpace\\\\Notification\\\\Interfaces\\\\Triggerable, carriers\\?\\: array\\, enabled\\?\\: bool, extras\\?\\: array\\, version\\?\\: int\\}\\|null\\.$#" count: 1 - path: src/Abstracts/Carrier.php + path: compat/src-deprecated/Adapter/WordPress.php - - message: "#^Property BracketSpace\\\\Notification\\\\Abstracts\\\\Carrier\\:\\:\\$data type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$data of function notification_convert_data expects array, array\\\\|bool\\|BracketSpace\\\\Notification\\\\Interfaces\\\\Triggerable\\|int\\|string\\>\\|null given\\.$#" count: 1 - path: src/Abstracts/Carrier.php + path: compat/src-deprecated/Adapter/WordPress.php - - message: "#^Property BracketSpace\\\\Notification\\\\Abstracts\\\\Carrier\\:\\:\\$form_fields type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$postarr of function wp_insert_post expects array\\{ID\\?\\: int, post_author\\?\\: int, post_date\\?\\: string, post_date_gmt\\?\\: string, post_content\\?\\: string, post_content_filtered\\?\\: string, post_title\\?\\: string, post_excerpt\\?\\: string, \\.\\.\\.\\}, array\\{ID\\: int, post_content\\: mixed, post_type\\: string, post_title\\: string, post_name\\: string, post_status\\: 'draft'\\|'publish'\\} given\\.$#" count: 1 - path: src/Abstracts/Carrier.php + path: compat/src-deprecated/Adapter/WordPress.php - - message: "#^Property BracketSpace\\\\Notification\\\\Abstracts\\\\Carrier\\:\\:\\$restricted_fields type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Abstracts/Carrier.php + message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Adapter\\\\WordPress\\:\\:\\$post \\(WP_Post\\) in empty\\(\\) is not falsy\\.$#" + count: 2 + path: compat/src-deprecated/Adapter/WordPress.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Field\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$args of function get_posts expects array\\{numberposts\\?\\: int, category\\?\\: int\\|string, include\\?\\: array\\, exclude\\?\\: array\\, suppress_filters\\?\\: bool, attachment_id\\?\\: int, author\\?\\: int\\|string, author_name\\?\\: string, \\.\\.\\.\\}\\|null, array\\{posts_per_page\\: \\-1, post_type\\: 'notification', post_status\\?\\: array\\{'publish', 'draft'\\}, suppress_filters\\?\\: 0\\} given\\.$#" count: 1 - path: src/Abstracts/Field.php + path: compat/src-deprecated/Database/Queries/NotificationQueries.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Field\\:\\:__get\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'hide' on mixed\\.$#" count: 1 - path: src/Abstracts/Field.php + path: compat/src-deprecated/Defaults/Carrier/Webhook.php - - message: "#^Parameter \\#1 \\$string of function substr expects string, string\\|false given\\.$#" + message: "#^Cannot access offset 'key' on mixed\\.$#" count: 1 - path: src/Abstracts/Field.php + path: compat/src-deprecated/Defaults/Carrier/Webhook.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\MergeTag\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'value' on mixed\\.$#" count: 1 - path: src/Abstracts/MergeTag.php + path: compat/src-deprecated/Defaults/Carrier/Webhook.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\MergeTag\\:\\:set_resolver\\(\\) has no return typehint specified\\.$#" + message: "#^Cannot access offset 'hide' on mixed\\.$#" count: 1 - path: src/Abstracts/MergeTag.php + path: compat/src-deprecated/Defaults/Carrier/WebhookJson.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\MergeTag\\:\\:set_trigger\\(\\) has no return typehint specified\\.$#" + message: "#^Cannot access offset 'key' on mixed\\.$#" count: 1 - path: src/Abstracts/MergeTag.php + path: compat/src-deprecated/Defaults/Carrier/WebhookJson.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Recipient\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'value' on mixed\\.$#" count: 1 - path: src/Abstracts/Recipient.php + path: compat/src-deprecated/Defaults/Carrier/WebhookJson.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Recipient\\:\\:parse_value\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Interfaces\\\\Cacheable\\:\\:add\\(\\) has no return type specified\\.$#" count: 1 - path: src/Abstracts/Recipient.php + path: compat/src-deprecated/Utils/Interfaces/Cacheable.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Resolver\\:\\:resolve_merge_tag\\(\\) has parameter \\$match with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Interfaces\\\\Cacheable\\:\\:delete\\(\\) has no return type specified\\.$#" count: 1 - path: src/Abstracts/Resolver.php + path: compat/src-deprecated/Utils/Interfaces/Cacheable.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Trigger\\:\\:add_action\\(\\) has no return typehint specified\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Interfaces\\\\Cacheable\\:\\:set\\(\\) has no return type specified\\.$#" count: 1 - path: src/Abstracts/Trigger.php + path: compat/src-deprecated/Utils/Interfaces/Cacheable.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Trigger\\:\\:add_quick_merge_tag\\(\\) has no return typehint specified\\.$#" + message: "#^Cannot call method getSetting\\(\\) on mixed\\.$#" count: 1 - path: src/Abstracts/Trigger.php + path: compat/src-deprecated/functions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Trigger\\:\\:get_action_args\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot call method getSettings\\(\\) on mixed\\.$#" count: 1 - path: src/Abstracts/Trigger.php + path: compat/src-deprecated/functions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Trigger\\:\\:get_cache\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot call method parse_value\\(\\) on mixed\\.$#" count: 1 - path: src/Abstracts/Trigger.php + path: compat/src-deprecated/functions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Abstracts\\\\Trigger\\:\\:set_cache\\(\\) has parameter \\$cache with no value type specified in iterable type array\\.$#" + message: "#^Cannot call method updateSetting\\(\\) on mixed\\.$#" count: 1 - path: src/Abstracts/Trigger.php + path: compat/src-deprecated/functions.php - - message: "#^Property BracketSpace\\\\Notification\\\\Abstracts\\\\Trigger\\:\\:\\$merge_tags type has no value type specified in iterable type array\\.$#" + message: "#^Function notification_get_posts\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: src/Abstracts/Trigger.php + path: compat/src-deprecated/functions.php - - message: "#^Call to an undefined method object\\:\\:add_section\\(\\)\\.$#" + message: "#^Function notification_get_recipient\\(\\) should return BracketSpace\\\\Notification\\\\Interfaces\\\\Receivable\\|null but returns mixed\\.$#" count: 1 - path: src/Admin/Debugging.php + path: compat/src-deprecated/functions.php - - message: "#^Parameter \\#1 \\$location of function wp_safe_redirect expects string, string\\|false given\\.$#" + message: "#^Function notification_get_template\\(\\) has parameter \\$vars with no value type specified in iterable type array\\.$#" count: 1 - path: src/Admin/Debugging.php + path: compat/src-deprecated/functions.php - - message: "#^Cannot access property \\$id on WP_Screen\\|null\\.$#" + message: "#^Function notification_template\\(\\) has parameter \\$vars with no value type specified in iterable type array\\.$#" count: 1 - path: src/Admin/Extensions.php + path: compat/src-deprecated/functions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Extensions\\:\\:get_raw_extension\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Function notification_whitelabel\\(\\) has parameter \\$args with no value type specified in iterable type array\\.$#" count: 1 - path: src/Admin/Extensions.php + path: compat/src-deprecated/functions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Extensions\\:\\:get_raw_extensions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$path of static method BracketSpace\\\\Notification\\\\Core\\\\Sync\\:\\:enable\\(\\) expects string\\|null, mixed given\\.$#" count: 1 - path: src/Admin/Extensions.php + path: compat/src-deprecated/functions.php - - message: "#^Property BracketSpace\\\\Notification\\\\Admin\\\\Extensions\\:\\:\\$extensions type has no value type specified in iterable type array\\.$#" + message: "#^Call to static method create\\(\\) on an unknown class StubsGenerator\\\\Finder\\.$#" count: 1 - path: src/Admin/Extensions.php + path: compat/stub-finder.php - - message: "#^Property BracketSpace\\\\Notification\\\\Admin\\\\Extensions\\:\\:\\$page_hook \\(string\\) does not accept string\\|false\\.$#" + message: "#^Method Notification\\:\\:components\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: src/Admin/Extensions.php + path: notification.php - - message: "#^Property BracketSpace\\\\Notification\\\\Admin\\\\Extensions\\:\\:\\$premium_extensions type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/Extensions.php + message: "#^Static property Notification\\:\\:\\$runtime \\(BracketSpace\\\\Notification\\\\Runtime\\) in isset\\(\\) is not nullable\\.$#" + count: 4 + path: notification.php - - message: "#^Call to an undefined method object\\:\\:add_section\\(\\)\\.$#" + message: "#^Cannot call method removeLogs\\(\\) on mixed\\.$#" count: 1 - path: src/Admin/ImportExport.php + path: src/Admin/Debugging.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\ImportExport\\:\\:process_notifications_import_request\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$location of function wp_safe_redirect expects string, string\\|false given\\.$#" count: 1 - path: src/Admin/ImportExport.php - - - - message: "#^Offset 0 does not exist on array\\\\.$#" - count: 3 - path: src/Admin/ImportExport.php + path: src/Admin/Debugging.php - - message: "#^Parameter \\#1 \\$fp of function fclose expects resource, resource\\|false given\\.$#" + message: "#^Cannot access offset 'author' on mixed\\.$#" count: 1 - path: src/Admin/ImportExport.php + path: src/Admin/Extensions.php - - message: "#^Parameter \\#1 \\$fp of function fread expects resource, resource\\|false given\\.$#" - count: 1 - path: src/Admin/ImportExport.php + message: "#^Cannot access offset 'edd' on mixed\\.$#" + count: 2 + path: src/Admin/Extensions.php - - message: "#^Parameter \\#1 \\$function of function call_user_func expects callable\\(\\)\\: mixed, array\\(\\$this\\(BracketSpace\\\\Notification\\\\Admin\\\\ImportExport\\), non\\-empty\\-string\\) given\\.$#" + message: "#^Cannot access offset 'item_name' on mixed\\.$#" count: 2 - path: src/Admin/ImportExport.php + path: src/Admin/Extensions.php - - message: "#^Parameter \\#1 \\$json of function json_decode expects string, string\\|false given\\.$#" - count: 1 - path: src/Admin/ImportExport.php + message: "#^Cannot access offset 'slug' on mixed\\.$#" + count: 3 + path: src/Admin/Extensions.php - - message: "#^Parameter \\#1 \\$post of method BracketSpace\\\\Notification\\\\Defaults\\\\Adapter\\\\WordPress\\:\\:set_post\\(\\) expects WP_Post, WP_Post\\|null given\\.$#" + message: "#^Cannot access offset 'store_url' on mixed\\.$#" count: 1 - path: src/Admin/ImportExport.php + path: src/Admin/Extensions.php - - message: "#^Parameter \\#2 \\$length of function fread expects int, int\\|false given\\.$#" + message: "#^Cannot access property \\$expires on mixed\\.$#" count: 1 - path: src/Admin/ImportExport.php + path: src/Admin/Extensions.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" - count: 1 - path: src/Admin/NotificationDuplicator.php + message: "#^Cannot access property \\$id on WP_Screen\\|null\\.$#" + count: 2 + path: src/Admin/Extensions.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" + message: "#^Cannot access property \\$itemName on mixed\\.$#" count: 1 - path: src/Admin/NotificationDuplicator.php + path: src/Admin/Extensions.php - - message: "#^Cannot access property \\$post_title on WP_Post\\|null\\.$#" + message: "#^Cannot access property \\$item_name on mixed\\.$#" count: 1 - path: src/Admin/NotificationDuplicator.php + path: src/Admin/Extensions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\NotificationDuplicator\\:\\:add_duplicate_row_action\\(\\) has parameter \\$row_actions with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Extensions\\:\\:getInvalidLicenseExtensions\\(\\) should return array\\ but empty return statement found\\.$#" count: 1 - path: src/Admin/NotificationDuplicator.php + path: src/Admin/Extensions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\NotificationDuplicator\\:\\:add_duplicate_row_action\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Extensions\\:\\:getInvalidLicenseExtensions\\(\\) should return array\\ but returns array\\, mixed\\>\\.$#" count: 1 - path: src/Admin/NotificationDuplicator.php + path: src/Admin/Extensions.php - - message: "#^Parameter \\#1 \\$id of function get_edit_post_link expects int\\|WP_Post, int\\|WP_Error given\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Extensions\\:\\:getRawExtension\\(\\) should return array\\|false but returns mixed\\.$#" count: 1 - path: src/Admin/NotificationDuplicator.php + path: src/Admin/Extensions.php - - message: "#^Parameter \\#1 \\$string of function html_entity_decode expects string, string\\|null given\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Extensions\\:\\:getRawExtensions\\(\\) should return array but returns mixed\\.$#" count: 1 - path: src/Admin/NotificationDuplicator.php + path: src/Admin/Extensions.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" + message: "#^Parameter \\#1 \\$apiUrl of class BracketSpace\\\\Notification\\\\Utils\\\\EDDUpdater constructor expects string, mixed given\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/Extensions.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" + message: "#^Parameter \\#1 \\$extension of class BracketSpace\\\\Notification\\\\Core\\\\License constructor expects array, mixed given\\.$#" count: 2 - path: src/Admin/PostTable.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:adjust_bulk_actions\\(\\) has parameter \\$actions with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostTable.php + path: src/Admin/Extensions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:adjust_bulk_actions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$format of function date_i18n expects string, mixed given\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/Extensions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:adjust_trash_link\\(\\) has parameter \\$row_actions with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$plugin of function is_plugin_active expects string, mixed given\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/Extensions.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:adjust_trash_link\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'hash' on mixed\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/ImportExport.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:handle_status_bulk_actions\\(\\) has parameter \\$post_ids with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\ImportExport\\:\\:prepareNotificationsExportData\\(\\) should return array\\ but returns array\\, mixed\\>\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/ImportExport.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:remove_quick_edit\\(\\) has parameter \\$row_actions with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$json of function json_decode expects string, string\\|false given\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/ImportExport.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:remove_quick_edit\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$length of function fread expects int\\<1, max\\>, int\\<0, max\\>\\|false given\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/ImportExport.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:remove_status_display\\(\\) has parameter \\$post_states with no value type specified in iterable type array\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/NotificationDuplicator.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:remove_status_display\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/NotificationDuplicator.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:table_columns\\(\\) has parameter \\$columns with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$string of function html_entity_decode expects string, string\\|null given\\.$#" count: 1 - path: src/Admin/PostTable.php + path: src/Admin/NotificationDuplicator.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostTable\\:\\:table_columns\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" count: 1 path: src/Admin/PostTable.php - - message: "#^Parameter \\#1 \\$url of function esc_url expects string, string\\|void given\\.$#" - count: 1 + message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" + count: 2 path: src/Admin/PostTable.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:bulk_action_messages\\(\\) has parameter \\$bulk_counts with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#3 \\$number of function _n expects int, mixed given\\.$#" count: 1 path: src/Admin/PostType.php - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:bulk_action_messages\\(\\) has parameter \\$bulk_messages with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\|string, mixed given\\.$#" count: 1 path: src/Admin/PostType.php - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:bulk_action_messages\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostType.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:change_post_statuses\\(\\) has parameter \\$statuses with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostType.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:change_post_statuses\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostType.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:create_notification_hash\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostType.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:create_notification_hash\\(\\) has parameter \\$postarr with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostType.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:create_notification_hash\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostType.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:get_all_notifications\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostType.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:post_updated_messages\\(\\) has parameter \\$messages with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostType.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\PostType\\:\\:post_updated_messages\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/PostType.php - - - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" - count: 2 - path: src/Admin/Screen.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" count: 1 - path: src/Admin/Screen.php - - - - message: "#^Call to an undefined method object\\:\\:add_help_tab\\(\\)\\.$#" - count: 1 - path: src/Admin/Screen.php - - - - message: "#^Call to an undefined method object\\:\\:get_carriers\\(\\)\\.$#" - count: 1 - path: src/Admin/Screen.php - - - - message: "#^Call to an undefined method object\\:\\:get_merge_tags\\(\\)\\.$#" - count: 1 - path: src/Admin/Screen.php - - - - message: "#^Call to an undefined method object\\:\\:set_help_sidebar\\(\\)\\.$#" - count: 1 - path: src/Admin/Screen.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Screen\\:\\:prepare_merge_tag_groups\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/Screen.php - - - - message: "#^Parameter \\#4 \\$ver of function wp_enqueue_script expects bool\\|string\\|null, int\\|false given\\.$#" - count: 1 - path: src/Admin/Scripts.php - - - - message: "#^Parameter \\#4 \\$ver of function wp_enqueue_style expects bool\\|string\\|null, int\\|false given\\.$#" - count: 1 - path: src/Admin/Scripts.php - - - - message: "#^Call to an undefined method object\\:\\:add_section\\(\\)\\.$#" - count: 4 - path: src/Admin/Settings.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Settings\\:\\:filter_post_types\\(\\) has parameter \\$post_types with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/Settings.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Settings\\:\\:filter_post_types\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/Settings.php - - - - message: "#^Call to an undefined method object\\:\\:add_section\\(\\)\\.$#" - count: 1 - path: src/Admin/Sync.php - - - - message: "#^Parameter \\#1 \\$function of function call_user_func expects callable\\(\\)\\: mixed, array\\(\\$this\\(BracketSpace\\\\Notification\\\\Admin\\\\Sync\\), non\\-empty\\-string\\) given\\.$#" - count: 1 - path: src/Admin/Sync.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Wizard\\:\\:add_notifications\\(\\) has parameter \\$notifications with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/Wizard.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Admin\\\\Wizard\\:\\:get_settings\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Admin/Wizard.php - - - - message: "#^Property BracketSpace\\\\Notification\\\\Admin\\\\Wizard\\:\\:\\$page_hook \\(string\\) does not accept string\\|false\\.$#" - count: 1 - path: src/Admin/Wizard.php - - - - message: "#^Property BracketSpace\\\\Notification\\\\Api\\\\Api\\:\\:\\$routes type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Api.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:form_data\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/RepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:form_field_data\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/RepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:form_field_data\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/RepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:get_values\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/RepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:normalize_values\\(\\) has parameter \\$values with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/RepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:normalize_values\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/RepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:parse_params\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/RepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\SectionRepeaterController\\:\\:form_data\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/SectionRepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\SectionRepeaterController\\:\\:get_sections_fields\\(\\) has parameter \\$sections with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/SectionRepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\SectionRepeaterController\\:\\:get_sections_fields\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/SectionRepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\SectionRepeaterController\\:\\:group_fields\\(\\) has parameter \\$fields with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/SectionRepeaterController.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\SectionRepeaterController\\:\\:group_fields\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Api/Controller/SectionRepeaterController.php - - - - message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\|string, int\\|string given\\.$#" - count: 2 - path: src/Cli/DumpHooks.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Cron\\:\\:register_intervals\\(\\) has parameter \\$intervals with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Core/Cron.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Cron\\:\\:register_intervals\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Core/Cron.php - - - - message: "#^Parameter \\#1 \\$timestamp of function wp_unschedule_event expects int, int\\|false given\\.$#" - count: 1 - path: src/Core/Cron.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Debugging\\:\\:add_log\\(\\) has parameter \\$log_data with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Core/Debugging.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Debugging\\:\\:get_logs\\(\\) has parameter \\$types with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Core/Debugging.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Debugging\\:\\:get_logs\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Core/Debugging.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Debugging\\:\\:remove_logs\\(\\) has parameter \\$types with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Core/Debugging.php - - - - message: "#^Parameter \\#3 \\$message of function notification_log expects string, string\\|false given\\.$#" - count: 1 - path: src/Core/Debugging.php - - - - message: "#^Access to an undefined property object\\:\\:\\$license\\.$#" - count: 1 - path: src/Core/License.php - - - - message: "#^Access to an undefined property object\\:\\:\\$license_key\\.$#" - count: 1 - path: src/Core/License.php + path: src/Admin/Screen.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\License\\:\\:__construct\\(\\) has parameter \\$extension with no value type specified in iterable type array\\.$#" + message: "#^Call to an undefined method object\\:\\:add_help_tab\\(\\)\\.$#" count: 1 - path: src/Core/License.php + path: src/Admin/Screen.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\License\\:\\:get_licenses\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Call to an undefined method object\\:\\:set_help_sidebar\\(\\)\\.$#" count: 1 - path: src/Core/License.php + path: src/Admin/Screen.php - - message: "#^Property BracketSpace\\\\Notification\\\\Core\\\\License\\:\\:\\$extension type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Core/License.php + message: "#^Cannot access property \\$pageHook on mixed\\.$#" + count: 2 + path: src/Admin/Scripts.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:__call\\(\\) has parameter \\$arguments with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#4 \\$ver of function wp_enqueue_script expects bool\\|string\\|null, int\\|false given\\.$#" count: 1 - path: src/Core/Notification.php + path: src/Admin/Scripts.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:__construct\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#4 \\$ver of function wp_enqueue_style expects bool\\|string\\|null, int\\|false given\\.$#" count: 1 - path: src/Core/Notification.php + path: src/Admin/Scripts.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:get_enabled_carriers\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" count: 1 - path: src/Core/Notification.php + path: src/Admin/Wizard.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:set_carrier_data\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'args' on mixed\\.$#" count: 1 - path: src/Core/Notification.php + path: src/Api/Api.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:set_carriers\\(\\) has parameter \\$carriers with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'path' on mixed\\.$#" count: 1 - path: src/Core/Notification.php + path: src/Api/Api.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:setup\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$route of function register_rest_route expects string, mixed given\\.$#" count: 1 - path: src/Core/Notification.php + path: src/Api/Api.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:to_array\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#3 \\$args of function register_rest_route expects array, mixed given\\.$#" count: 1 - path: src/Core/Notification.php + path: src/Api/Api.php - - message: "#^Property BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:\\$carriers type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access property \\$checkboxLabel on mixed\\.$#" count: 1 - path: src/Core/Notification.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Property BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:\\$extras type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access property \\$cssClass on mixed\\.$#" count: 1 - path: src/Core/Notification.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Interfaces\\\\Adaptable\\:\\:save\\(\\) invoked with 2 parameters, 0 required\\.$#" + message: "#^Cannot access property \\$description on mixed\\.$#" count: 1 - path: src/Core/Processor.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Resolver\\:\\:clear\\(\\) should return string but returns string\\|null\\.$#" + message: "#^Cannot access property \\$disabled on mixed\\.$#" count: 1 - path: src/Core/Resolver.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Resolver\\:\\:resolve\\(\\) should return string but returns string\\|null\\.$#" + message: "#^Cannot access property \\$fieldTypeHtml on mixed\\.$#" count: 1 - path: src/Core/Resolver.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Parameter \\#3 \\$subject of function preg_replace_callback expects array\\|string, string\\|null given\\.$#" - count: 1 - path: src/Core/Resolver.php + message: "#^Cannot access property \\$fields on mixed\\.$#" + count: 2 + path: src/Api/Controller/RepeaterController.php - - message: "#^Property BracketSpace\\\\Notification\\\\Utils\\\\Settings\\:\\:\\$page_hook \\(string\\) does not accept string\\|false\\.$#" + message: "#^Cannot access property \\$id on mixed\\.$#" count: 1 - path: src/Core/Settings.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Cannot access property \\$post_modified_gmt on WP_Post\\|null\\.$#" + message: "#^Cannot access property \\$label on mixed\\.$#" count: 1 - path: src/Core/Upgrade.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Cannot access property \\$post_name on WP_Post\\|null\\.$#" + message: "#^Cannot access property \\$message on mixed\\.$#" count: 1 - path: src/Core/Upgrade.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Cannot access property \\$post_status on WP_Post\\|null\\.$#" + message: "#^Cannot access property \\$multipleSection on mixed\\.$#" count: 1 - path: src/Core/Upgrade.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Cannot access property \\$post_title on WP_Post\\|null\\.$#" + message: "#^Cannot access property \\$name on mixed\\.$#" count: 1 - path: src/Core/Upgrade.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Upgrade\\:\\:trigger_slug_replacements\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access property \\$nested on mixed\\.$#" count: 1 - path: src/Core/Upgrade.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Parameter \\#1 \\$function of function call_user_func expects callable\\(\\)\\: mixed, array\\(\\$this\\(BracketSpace\\\\Notification\\\\Core\\\\Upgrade\\), non\\-empty\\-string\\) given\\.$#" + message: "#^Cannot access property \\$options on mixed\\.$#" count: 1 - path: src/Core/Upgrade.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Parameter \\#1 \\$version of method BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:set_version\\(\\) expects int, int\\|false given\\.$#" + message: "#^Cannot access property \\$placeholder on mixed\\.$#" count: 1 - path: src/Core/Upgrade.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Parameter \\#1 \\$json of function json_decode expects string, string\\|null given\\.$#" + message: "#^Cannot access property \\$pretty on mixed\\.$#" count: 1 - path: src/Defaults/Adapter/JSON.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Parameter \\#1 \\$post of method BracketSpace\\\\Notification\\\\Defaults\\\\Adapter\\\\WordPress\\:\\:set_post\\(\\) expects WP_Post, WP_Post\\|null given\\.$#" - count: 2 - path: src/Defaults/Adapter/WordPress.php + message: "#^Cannot access property \\$rows on mixed\\.$#" + count: 1 + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\Email\\:\\:allow_unfiltered_html_body\\(\\) has parameter \\$carrier_data with no value type specified in iterable type array\\.$#" + message: "#^Cannot access property \\$section on mixed\\.$#" count: 1 - path: src/Defaults/Carrier/Email.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\Email\\:\\:allow_unfiltered_html_body\\(\\) has parameter \\$raw_data with no value type specified in iterable type array\\.$#" + message: "#^Cannot access property \\$sections on mixed\\.$#" count: 1 - path: src/Defaults/Carrier/Email.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\Email\\:\\:allow_unfiltered_html_body\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:getCarrierFields\\(\\) should return array but returns mixed\\.$#" count: 1 - path: src/Defaults/Carrier/Email.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\Webhook\\:\\:http_request\\(\\) has parameter \\$args with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:sendResponse\\(\\) has parameter \\$request with generic class WP_REST_Request but does not specify its types\\: T$#" count: 1 - path: src/Defaults/Carrier/Webhook.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\Webhook\\:\\:http_request\\(\\) has parameter \\$headers with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:\\$carrier \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Carrier/Webhook.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\Webhook\\:\\:parse_args\\(\\) has parameter \\$args with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:\\$field \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Carrier/Webhook.php + path: src/Api/Controller/RepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\Webhook\\:\\:parse_args\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" count: 1 - path: src/Defaults/Carrier/Webhook.php + path: src/Api/Controller/SectionRepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\WebhookJson\\:\\:http_request\\(\\) has parameter \\$args with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Carrier/WebhookJson.php + message: "#^Cannot access offset 'fields' on mixed\\.$#" + count: 2 + path: src/Api/Controller/SectionRepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\WebhookJson\\:\\:http_request\\(\\) has parameter \\$headers with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'multiple_section' on mixed\\.$#" count: 1 - path: src/Defaults/Carrier/WebhookJson.php + path: src/Api/Controller/SectionRepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\WebhookJson\\:\\:parse_args\\(\\) has parameter \\$args with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Carrier/WebhookJson.php + message: "#^Cannot access offset 'name' on mixed\\.$#" + count: 2 + path: src/Api/Controller/SectionRepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Carrier\\\\WebhookJson\\:\\:parse_args\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'sections' on mixed\\.$#" count: 1 - path: src/Defaults/Carrier/WebhookJson.php + path: src/Api/Controller/SectionRepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\CheckboxField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'special_section' on mixed\\.$#" count: 1 - path: src/Defaults/Field/CheckboxField.php + path: src/Api/Controller/SectionRepeaterController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\CodeEditorField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Field/CodeEditorField.php + message: "#^Parameter \\#1 \\$data of method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\RepeaterController\\:\\:formFieldData\\(\\) expects array\\|null, mixed given\\.$#" + count: 2 + path: src/Api/Controller/SectionRepeaterController.php - - message: "#^Parameter \\#1 \\$text of function esc_attr expects string, string\\|false given\\.$#" + message: "#^Cannot call method input\\(\\) on mixed\\.$#" count: 1 - path: src/Defaults/Field/CodeEditorField.php + path: src/Api/Controller/SelectInputController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\EditorField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Api\\\\Controller\\\\SelectInputController\\:\\:sendResponse\\(\\) has parameter \\$request with generic class WP_REST_Request but does not specify its types\\: T$#" count: 1 - path: src/Defaults/Field/EditorField.php + path: src/Api/Controller/SelectInputController.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\EditorField\\:\\:field\\(\\) should return string but returns string\\|false\\.$#" + message: "#^Cannot call method getEndpoint\\(\\) on mixed\\.$#" count: 1 - path: src/Defaults/Field/EditorField.php + path: src/Compat/RestApiCompat.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\InputField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$timestamp of function wp_unschedule_event expects int, int\\|false given\\.$#" count: 1 - path: src/Defaults/Field/InputField.php + path: src/Core/Cron.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\MessageField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot call method addLog\\(\\) on mixed\\.$#" count: 1 - path: src/Defaults/Field/MessageField.php + path: src/Core/Debugging.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\NonceField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot cast mixed to string\\.$#" count: 1 - path: src/Defaults/Field/NonceField.php + path: src/Core/Debugging.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\RecipientsField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$license\\.$#" count: 1 - path: src/Defaults/Field/RecipientsField.php + path: src/Core/License.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\RepeaterField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$licenseKey\\.$#" count: 1 - path: src/Defaults/Field/RepeaterField.php + path: src/Core/License.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\RepeaterField\\:\\:\\$data_attr type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Field/RepeaterField.php + message: "#^Cannot access offset 'item_name' on mixed\\.$#" + count: 3 + path: src/Core/License.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\RepeaterField\\:\\:\\$headers type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Field/RepeaterField.php + message: "#^Cannot access offset 'store_url' on mixed\\.$#" + count: 3 + path: src/Core/License.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\SectionRepeater\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot access property \\$error on mixed\\.$#" count: 1 - path: src/Defaults/Field/SectionRepeater.php + path: src/Core/License.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\SectionRepeater\\:\\:\\$data_attr type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Field/SectionRepeater.php + message: "#^Cannot access property \\$license on mixed\\.$#" + count: 2 + path: src/Core/License.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\SectionRepeater\\:\\:\\$headers type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Field/SectionRepeater.php + message: "#^Cannot access property \\$licenseKey on mixed\\.$#" + count: 6 + path: src/Core/License.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\SectionRepeater\\:\\:\\$section_labels type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access property \\$success on mixed\\.$#" count: 1 - path: src/Defaults/Field/SectionRepeater.php + path: src/Core/License.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\SectionRepeater\\:\\:\\$sections type has no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\License\\:\\:check\\(\\) should return object but returns mixed\\.$#" count: 1 - path: src/Defaults/Field/SectionRepeater.php + path: src/Core/License.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\SectionsField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\License\\:\\:getLicenses\\(\\) should return array but returns mixed\\.$#" count: 1 - path: src/Defaults/Field/SectionsField.php + path: src/Core/License.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\SectionsField\\:\\:\\$sections type has no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\License\\:\\:isValid\\(\\) should return bool but returns mixed\\.$#" count: 1 - path: src/Defaults/Field/SectionsField.php + path: src/Core/License.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\SelectField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$licenseData of method BracketSpace\\\\Notification\\\\Core\\\\License\\:\\:save\\(\\) expects object, mixed given\\.$#" count: 1 - path: src/Defaults/Field/SelectField.php + path: src/Core/License.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\SelectField\\:\\:\\$options type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Field/SelectField.php + message: "#^Parameter \\#1 \\$url of function wp_remote_post expects string, mixed given\\.$#" + count: 3 + path: src/Core/License.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Field\\\\TextareaField\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Field/TextareaField.php + message: "#^Parameter \\#2 \\$key of class BracketSpace\\\\Notification\\\\Dependencies\\\\Micropackage\\\\Cache\\\\Cache constructor expects string, mixed given\\.$#" + count: 5 + path: src/Core/License.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentActionApprove\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/MergeTag/Comment/CommentActionApprove.php + message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" + count: 3 + path: src/Core/License.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentActionDelete\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Core\\\\Notification\\:\\:\\$sourcePostId is never read, only written\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentActionDelete.php + path: src/Core/Notification.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentActionSpam\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Resolver\\:\\:clear\\(\\) should return string but returns string\\|null\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentActionSpam.php + path: src/Core/Resolver.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentActionTrash\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Core\\\\Resolver\\:\\:resolve\\(\\) should return string but returns string\\|null\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentActionTrash.php + path: src/Core/Resolver.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentAuthorIP\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$contents of method WP_Filesystem_Base\\:\\:put_contents\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentAuthorIP.php + path: src/Core/Sync.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentAuthorUrl\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/MergeTag/Comment/CommentAuthorUrl.php + message: "#^Cannot access offset mixed on mixed\\.$#" + count: 2 + path: src/Database/NotificationDatabaseService.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentAuthorUserAgent\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Database\\\\Queries\\\\UserQueries\\:\\:all\\(\\) should return array\\ but returns mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentAuthorUserAgent.php + path: src/Database/Queries/UserQueries.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentContent\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Database\\\\Queries\\\\UserQueries\\:\\:withRole\\(\\) should return array\\ but returns mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentContent.php + path: src/Database/Queries/UserQueries.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentContentHtml\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Invalid type object to throw\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentContentHtml.php + path: src/ErrorHandler.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentID\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Integration\\\\WordPressEmails\\:\\:getSettingForUserRole\\(\\) is unused\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentID.php + path: src/Integration/WordPressEmails.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentIsReply\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'recipient' on mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentIsReply.php + path: src/Repository/Carrier/BaseCarrier.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentStatus\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'type' on mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Comment/CommentStatus.php + path: src/Repository/Carrier/BaseCarrier.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Comment\\\\CommentType\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/MergeTag/Comment/CommentType.php + message: "#^Cannot call method setValue\\(\\) on BracketSpace\\\\Notification\\\\Interfaces\\\\Fillable\\|null\\.$#" + count: 4 + path: src/Repository/Carrier/BaseCarrier.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\DateTime\\\\Date\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$value of method BracketSpace\\\\Notification\\\\Interfaces\\\\Receivable\\:\\:parseValue\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/DateTime/Date.php + path: src/Repository/Carrier/BaseCarrier.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\DateTime\\\\DateTime\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$slug of static method BracketSpace\\\\Notification\\\\Store\\\\Recipient\\:\\:get\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/DateTime/DateTime.php + path: src/Repository/Carrier/BaseCarrier.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\DateTime\\\\Time\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Carrier\\\\BaseCarrier\\:\\:\\$recipientsResolvedData \\(array\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/DateTime/Time.php + path: src/Repository/Carrier/BaseCarrier.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Media\\\\AttachmentDirectUrl\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/MergeTag/Media/AttachmentDirectUrl.php + message: "#^Parameter \\#1 \\$carrier of static method BracketSpace\\\\Notification\\\\Register\\:\\:carrier\\(\\) expects BracketSpace\\\\Notification\\\\Interfaces\\\\Sendable, mixed given\\.$#" + count: 3 + path: src/Repository/CarrierRepository.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Media\\\\AttachmentID\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$data of class BracketSpace\\\\Notification\\\\Core\\\\Notification constructor expects array\\{hash\\?\\: string, title\\?\\: string, trigger\\?\\: BracketSpace\\\\Notification\\\\Interfaces\\\\Triggerable, carriers\\?\\: array\\, enabled\\?\\: bool, extras\\?\\: array\\, version\\?\\: int\\}, array\\{hash\\?\\: string, title\\?\\: string, trigger\\?\\: BracketSpace\\\\Notification\\\\Interfaces\\\\Triggerable\\|string\\|null, carriers\\?\\: array\\\\|BracketSpace\\\\Notification\\\\Interfaces\\\\Sendable\\>, enabled\\?\\: bool, extras\\?\\: array\\, version\\?\\: int\\} given\\.$#" count: 1 - path: src/Defaults/MergeTag/Media/AttachmentID.php + path: src/Repository/Converter/ArrayConverter.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Media\\\\AttachmentMimeType\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\BaseField\\:\\:__get\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: src/Defaults/MergeTag/Media/AttachmentMimeType.php + path: src/Repository/Field/BaseField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Media\\\\AttachmentPage\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\BaseField\\:\\:getLabel\\(\\) should return string but returns mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Media/AttachmentPage.php + path: src/Repository/Field/BaseField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Media\\\\AttachmentTitle\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\BaseField\\:\\:getRawName\\(\\) should return string but returns mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Media/AttachmentTitle.php + path: src/Repository/Field/BaseField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\FeaturedImageId\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$string of function substr expects string, string\\|false given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/FeaturedImageId.php + path: src/Repository/Field/BaseField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\FeaturedImageUrl\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$text of function esc_attr expects string, string\\|false given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/FeaturedImageUrl.php + path: src/Repository/Field/CodeEditorField.php - - message: "#^Parameter \\#1 \\$attachment_id of function wp_get_attachment_image_url expects int, int\\|false given\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\CodeEditorField\\:\\:\\$settings \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/FeaturedImageUrl.php + path: src/Repository/Field/CodeEditorField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostContent\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$color of function sanitize_hex_color expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostContent.php + path: src/Repository/Field/ColorPickerField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostContentHtml\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$haystack of function strpos expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostContentHtml.php + path: src/Repository/Field/ColorPickerField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostExcerpt\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$text of function esc_attr expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostExcerpt.php + path: src/Repository/Field/ColorPickerField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostID\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\|string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostID.php + path: src/Repository/Field/ColorPickerField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostPermalink\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\EditorField\\:\\:field\\(\\) should return string but returns string\\|false\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostPermalink.php + path: src/Repository/Field/EditorField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostSlug\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$content of function wp_editor expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostSlug.php + path: src/Repository/Field/EditorField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostStatus\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\|string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostStatus.php + path: src/Repository/Field/EditorField.php - - message: "#^Access to an undefined property object\\:\\:\\$label\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\EditorField\\:\\:\\$settings \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostTerms.php + path: src/Repository/Field/EditorField.php - - message: "#^Access to an undefined property object\\:\\:\\$name\\.$#" - count: 2 - path: src/Defaults/MergeTag/Post/PostTerms.php + message: "#^Parameter \\#1 \\$post_id of function wp_get_attachment_thumb_url expects int, mixed given\\.$#" + count: 1 + path: src/Repository/Field/ImageField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostTerms\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$text of function esc_attr expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostTerms.php + path: src/Repository/Field/ImageField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostTitle\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot cast mixed to string\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostTitle.php + path: src/Repository/Field/InputField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\PostType\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$text of function esc_attr expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/PostType.php + path: src/Repository/Field/InputField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\RevisionLink\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\InputField\\:\\:\\$type \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/RevisionLink.php + path: src/Repository/Field/InputField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\Post\\\\ThumbnailUrl\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Call to an undefined method BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\MessageField\\:\\:message\\(\\)\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/ThumbnailUrl.php + path: src/Repository/Field/MessageField.php - - message: "#^Parameter \\#1 \\$attachment_id of function wp_get_attachment_image_url expects int, int\\|false given\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\MessageField\\:\\:\\$message \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/Post/ThumbnailUrl.php + path: src/Repository/Field/MessageField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\Avatar\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\NonceField\\:\\:\\$nonceKey \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/User/Avatar.php + path: src/Repository/Field/NonceField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\AvatarUrl\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" count: 1 - path: src/Defaults/MergeTag/User/AvatarUrl.php + path: src/Repository/Field/RepeaterField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserBio\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset string on mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserBio.php + path: src/Repository/Field/RepeaterField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserDisplayName\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$text of function esc_attr expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserDisplayName.php + path: src/Repository/Field/RepeaterField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserEmail\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\RepeaterField\\:\\:\\$fields \\(array\\\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserEmail.php + path: src/Repository/Field/RepeaterField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserFirstName\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$text of function esc_attr expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserFirstName.php + path: src/Repository/Field/SectionRepeater.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserID\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$text of function esc_html expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserID.php + path: src/Repository/Field/SectionRepeater.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserLastName\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\SectionRepeater\\:\\:\\$sections \\(array\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserLastName.php + path: src/Repository/Field/SectionRepeater.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserLogin\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\SectionsField\\:\\:\\$sections \\(array\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserLogin.php + path: src/Repository/Field/SectionsField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserNicename\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$str of function sanitize_text_field expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserNicename.php + path: src/Repository/Field/SelectField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserPasswordResetLink\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$text of function esc_html expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserPasswordResetLink.php + path: src/Repository/Field/SelectField.php - - message: "#^Cannot access property \\$name on WP_Role\\|null\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\SelectField\\:\\:\\$options \\(array\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserRole.php + path: src/Repository/Field/SelectField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\MergeTag\\\\User\\\\UserRole\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$str of function sanitize_textarea_field expects string, mixed given\\.$#" count: 1 - path: src/Defaults/MergeTag/User/UserRole.php + path: src/Repository/Field/TextareaField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Recipient\\\\Administrator\\:\\:parse_value\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Field\\\\TextareaField\\:\\:\\$placeholder \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Recipient/Administrator.php + path: src/Repository/Field/TextareaField.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Recipient\\\\Email\\:\\:parse_value\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$slug of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setSlug\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Recipient/Email.php + path: src/Repository/MergeTag/BaseMergeTag.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Recipient\\\\Role\\:\\:parse_value\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentActionApprove\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Recipient/Role.php + path: src/Repository/MergeTag/Comment/CommentActionApprove.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Recipient\\\\User\\:\\:parse_value\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentActionDelete\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Recipient/User.php + path: src/Repository/MergeTag/Comment/CommentActionDelete.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Recipient\\\\UserID\\:\\:parse_value\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentActionSpam\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Recipient/UserID.php + path: src/Repository/MergeTag/Comment/CommentActionSpam.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Recipient\\\\Webhook\\:\\:parse_value\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentActionTrash\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Recipient/Webhook.php + path: src/Repository/MergeTag/Comment/CommentActionTrash.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Resolver\\\\Basic\\:\\:resolve_merge_tag\\(\\) has parameter \\$match with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentAuthorIP\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Resolver/Basic.php + path: src/Repository/MergeTag/Comment/CommentAuthorIP.php - - message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentAuthorUrl\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentAdded.php + path: src/Repository/MergeTag/Comment/CommentAuthorUrl.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentAuthorUserAgent\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentAdded.php + path: src/Repository/MergeTag/Comment/CommentAuthorUserAgent.php - - message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentContent\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentApproved.php + path: src/Repository/MergeTag/Comment/CommentContent.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentContentHtml\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentApproved.php + path: src/Repository/MergeTag/Comment/CommentContentHtml.php - - message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentID\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentPublished.php + path: src/Repository/MergeTag/Comment/CommentID.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentIsReply\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentPublished.php + path: src/Repository/MergeTag/Comment/CommentIsReply.php - - message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentStatus\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentReplied.php + path: src/Repository/MergeTag/Comment/CommentStatus.php - - message: "#^Cannot access property \\$comment_author on WP_Comment\\|null\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\Comment\\\\CommentType\\:\\:\\$commentType \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentReplied.php + path: src/Repository/MergeTag/Comment/CommentType.php - - message: "#^Cannot access property \\$comment_author_email on WP_Comment\\|null\\.$#" + message: "#^Parameter \\#1 \\$email of function sanitize_email expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentReplied.php + path: src/Repository/MergeTag/EmailTag.php - - message: "#^Cannot access property \\$user_id on WP_Comment\\|null\\.$#" - count: 2 - path: src/Defaults/Trigger/Comment/CommentReplied.php + message: "#^Cannot cast mixed to string\\.$#" + count: 1 + path: src/Repository/MergeTag/HtmlTag.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentReplied\\:\\:\\$parent_comment \\(WP_Comment\\) does not accept WP_Comment\\|null\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentReplied.php + path: src/Repository/MergeTag/IntegerTag.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentReplied.php + path: src/Repository/MergeTag/Media/AttachmentDirectUrl.php - - message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" - count: 2 - path: src/Defaults/Trigger/Comment/CommentSpammed.php + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" + count: 1 + path: src/Repository/MergeTag/Media/AttachmentID.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentSpammed.php + path: src/Repository/MergeTag/Media/AttachmentMimeType.php - - message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" - count: 2 - path: src/Defaults/Trigger/Comment/CommentTrashed.php + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" + count: 1 + path: src/Repository/MergeTag/Media/AttachmentPage.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentTrashed.php + path: src/Repository/MergeTag/Media/AttachmentTitle.php - - message: "#^Cannot access property \\$post_author on WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentTrigger.php + path: src/Repository/MergeTag/Post/FeaturedImageId.php - - message: "#^Cannot access property \\$post_date_gmt on WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$attachment_id of function wp_get_attachment_image_url expects int, int\\|false given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentTrigger.php + path: src/Repository/MergeTag/Post/FeaturedImageUrl.php - - message: "#^Cannot access property \\$post_modified_gmt on WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentTrigger.php + path: src/Repository/MergeTag/Post/FeaturedImageUrl.php - - message: "#^Cannot access property \\$post_type on WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentTrigger.php + path: src/Repository/MergeTag/Post/PostContent.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentTrigger.php + path: src/Repository/MergeTag/Post/PostContentHtml.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$post \\(WP_Post\\) does not accept WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentTrigger.php + path: src/Repository/MergeTag/Post/PostExcerpt.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$post_author \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentTrigger.php + path: src/Repository/MergeTag/Post/PostID.php - - message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentUnapproved.php + path: src/Repository/MergeTag/Post/PostPermalink.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Comment/CommentUnapproved.php + path: src/Repository/MergeTag/Post/PostSlug.php - - message: "#^Cannot access property \\$post_author on WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaAdded.php + path: src/Repository/MergeTag/Post/PostStatus.php - - message: "#^Cannot access property \\$post_date_gmt on WP_Post\\|null\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$label\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaAdded.php + path: src/Repository/MergeTag/Post/PostTerms.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Media\\\\MediaTrigger\\:\\:\\$attachment \\(WP_Post\\) does not accept WP_Post\\|null\\.$#" - count: 1 - path: src/Defaults/Trigger/Media/MediaAdded.php + message: "#^Access to an undefined property object\\:\\:\\$name\\.$#" + count: 2 + path: src/Repository/MergeTag/Post/PostTerms.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Media\\\\MediaTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaAdded.php + path: src/Repository/MergeTag/Post/PostTerms.php - - message: "#^Cannot access property \\$post_date_gmt on WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaTrashed.php + path: src/Repository/MergeTag/Post/PostTitle.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Media\\\\MediaTrashed\\:\\:\\$trashing_user \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaTrashed.php + path: src/Repository/MergeTag/Post/PostType.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Media\\\\MediaTrigger\\:\\:\\$attachment \\(WP_Post\\) does not accept WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaTrashed.php + path: src/Repository/MergeTag/Post/RevisionLink.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Media\\\\MediaTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, int\\|WP_Post given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaTrashed.php + path: src/Repository/MergeTag/Post/RevisionLink.php - - message: "#^Cannot access property \\$post_date_gmt on WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$attachment_id of function wp_get_attachment_image_url expects int, int\\|false given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaUpdated.php + path: src/Repository/MergeTag/Post/ThumbnailUrl.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Media\\\\MediaTrigger\\:\\:\\$attachment \\(WP_Post\\) does not accept WP_Post\\|null\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaUpdated.php + path: src/Repository/MergeTag/Post/ThumbnailUrl.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Media\\\\MediaTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$str of function sanitize_text_field expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaUpdated.php + path: src/Repository/MergeTag/StringTag.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Media\\\\MediaUpdated\\:\\:\\$updating_user \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Media/MediaUpdated.php + path: src/Repository/MergeTag/Taxonomy/TaxonomyName.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Plugin\\\\Activated\\:\\:\\$plugin_activation_date_time \\(string\\) does not accept int\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Plugin/Activated.php + path: src/Repository/MergeTag/Taxonomy/TaxonomySlug.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Plugin\\\\Deactivated\\:\\:\\$plugin_deactivation_date_time \\(string\\) does not accept int\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Plugin/Deactivated.php + path: src/Repository/MergeTag/Taxonomy/TermDescription.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Plugin\\\\Installed\\:\\:context\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Plugin/Installed.php + path: src/Repository/MergeTag/Taxonomy/TermID.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Plugin\\\\Installed\\:\\:\\$plugin_installation_date_time \\(string\\) does not accept int\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Plugin/Installed.php + path: src/Repository/MergeTag/Taxonomy/TermName.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Plugin\\\\PluginTrigger\\:\\:\\$plugin type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Plugin/PluginTrigger.php + path: src/Repository/MergeTag/Taxonomy/TermPermalink.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Plugin\\\\Removed\\:\\:\\$plugin_deletion_date_time \\(string\\) does not accept int\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Plugin/Removed.php + path: src/Repository/MergeTag/Taxonomy/TermSlug.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Plugin\\\\Updated\\:\\:context\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$url of function esc_url expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Plugin/Updated.php + path: src/Repository/MergeTag/UrlTag.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Plugin\\\\Updated\\:\\:\\$plugin_update_date_time \\(string\\) does not accept int\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Plugin/Updated.php + path: src/Repository/MergeTag/User/Avatar.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostAdded.php + path: src/Repository/MergeTag/User/AvatarUrl.php - - message: "#^Access to an undefined property object\\:\\:\\$post_author\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostAdded.php + path: src/Repository/MergeTag/User/UserBio.php - - message: "#^Access to an undefined property object\\:\\:\\$post_date_gmt\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostAdded.php + path: src/Repository/MergeTag/User/UserDisplayName.php - - message: "#^Access to an undefined property object\\:\\:\\$post_modified_gmt\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostAdded.php + path: src/Repository/MergeTag/User/UserEmail.php - - message: "#^Access to an undefined property object\\:\\:\\$post_status\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostAdded.php + path: src/Repository/MergeTag/User/UserFirstName.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostAdded.php + path: src/Repository/MergeTag/User/UserID.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostApproved.php + path: src/Repository/MergeTag/User/UserLastName.php - - message: "#^Access to an undefined property object\\:\\:\\$post_author\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostApproved.php + path: src/Repository/MergeTag/User/UserLogin.php - - message: "#^Access to an undefined property object\\:\\:\\$post_date_gmt\\.$#" - count: 2 - path: src/Defaults/Trigger/Post/PostApproved.php + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" + count: 1 + path: src/Repository/MergeTag/User/UserNicename.php - - message: "#^Access to an undefined property object\\:\\:\\$post_modified_gmt\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostApproved.php + path: src/Repository/MergeTag/User/UserNickname.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\User\\\\UserPasswordResetLink\\:\\:\\$keyPropertyName \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostApproved.php + path: src/Repository/MergeTag/User/UserPasswordResetLink.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" + message: "#^Cannot access property \\$name on WP_Role\\|null\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostDrafted.php + path: src/Repository/MergeTag/User/UserRole.php - - message: "#^Access to an undefined property object\\:\\:\\$post_author\\.$#" + message: "#^Parameter \\#1 \\$triggerPropertyName of method BracketSpace\\\\Notification\\\\Repository\\\\MergeTag\\\\BaseMergeTag\\:\\:setTriggerProp\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostDrafted.php + path: src/Repository/MergeTag/User/UserRole.php - - message: "#^Access to an undefined property object\\:\\:\\$post_date_gmt\\.$#" + message: "#^Parameter \\#1 \\$slug of method BracketSpace\\\\Notification\\\\Repository\\\\Recipient\\\\BaseRecipient\\:\\:setSlug\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostDrafted.php + path: src/Repository/Recipient/BaseRecipient.php - - message: "#^Access to an undefined property object\\:\\:\\$post_modified_gmt\\.$#" + message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\|string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostDrafted.php + path: src/Repository/Resolver/Basic.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" - count: 1 - path: src/Defaults/Trigger/Post/PostDrafted.php + message: "#^Cannot call method getSlug\\(\\) on mixed\\.$#" + count: 2 + path: src/Repository/Trigger/BaseTrigger.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" - count: 1 - path: src/Defaults/Trigger/Post/PostPending.php + message: "#^Cannot call method isHidden\\(\\) on mixed\\.$#" + count: 2 + path: src/Repository/Trigger/BaseTrigger.php - - message: "#^Access to an undefined property object\\:\\:\\$post_author\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\BaseTrigger\\:\\:getMergeTags\\(\\) should return array\\ but returns array\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostPending.php + path: src/Repository/Trigger/BaseTrigger.php - - message: "#^Access to an undefined property object\\:\\:\\$post_date_gmt\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostPending.php + path: src/Repository/Trigger/Comment/CommentAdded.php - - message: "#^Access to an undefined property object\\:\\:\\$post_modified_gmt\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostPending.php + path: src/Repository/Trigger/Comment/CommentAdded.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostPending.php + path: src/Repository/Trigger/Comment/CommentApproved.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostPublished.php + path: src/Repository/Trigger/Comment/CommentApproved.php - - message: "#^Access to an undefined property object\\:\\:\\$post_author\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostPublished.php + path: src/Repository/Trigger/Comment/CommentPublished.php - - message: "#^Access to an undefined property object\\:\\:\\$post_date_gmt\\.$#" - count: 2 - path: src/Defaults/Trigger/Post/PostPublished.php + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" + count: 1 + path: src/Repository/Trigger/Comment/CommentPublished.php - - message: "#^Access to an undefined property object\\:\\:\\$post_modified_gmt\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostPublished.php + path: src/Repository/Trigger/Comment/CommentReplied.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostPublished.php + path: src/Repository/Trigger/Comment/CommentReplied.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" - count: 1 - path: src/Defaults/Trigger/Post/PostScheduled.php + message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" + count: 2 + path: src/Repository/Trigger/Comment/CommentSpammed.php - - message: "#^Access to an undefined property object\\:\\:\\$post_author\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostScheduled.php + path: src/Repository/Trigger/Comment/CommentSpammed.php - - message: "#^Access to an undefined property object\\:\\:\\$post_date_gmt\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" count: 2 - path: src/Defaults/Trigger/Post/PostScheduled.php + path: src/Repository/Trigger/Comment/CommentTrashed.php - - message: "#^Access to an undefined property object\\:\\:\\$post_modified_gmt\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostScheduled.php + path: src/Repository/Trigger/Comment/CommentTrashed.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" + message: "#^Parameter \\#1 \\$comment_id of function get_comment_type expects int\\|WP_Comment, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostScheduled.php + path: src/Repository/Trigger/Comment/CommentTrigger.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" + message: "#^Parameter \\#1 \\$slug of method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\BaseTrigger\\:\\:__construct\\(\\) expects string\\|null, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostTrashed.php + path: src/Repository/Trigger/Comment/CommentTrigger.php - - message: "#^Access to an undefined property object\\:\\:\\$post_author\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$post \\(WP_Post\\) does not accept WP_Post\\|null\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostTrashed.php + path: src/Repository/Trigger/Comment/CommentTrigger.php - - message: "#^Access to an undefined property object\\:\\:\\$post_date_gmt\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostTrashed.php + path: src/Repository/Trigger/Comment/CommentUnapproved.php - - message: "#^Access to an undefined property object\\:\\:\\$post_modified_gmt\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Comment\\\\CommentTrigger\\:\\:\\$comment \\(WP_Comment\\) does not accept object\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostTrashed.php + path: src/Repository/Trigger/Comment/CommentUnapproved.php - - message: "#^Access to an undefined property object\\:\\:\\$post_type\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Media\\\\MediaTrigger\\:\\:\\$attachment \\(WP_Post\\) does not accept WP_Post\\|null\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostTrashed.php + path: src/Repository/Trigger/Media/MediaAdded.php - - message: "#^Cannot access property \\$name on string\\|WP_Taxonomy\\.$#" + message: "#^Cannot access property \\$post_date_gmt on WP_Post\\|null\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostTrigger.php + path: src/Repository/Trigger/Media/MediaTrashed.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Post\\\\PostTrigger\\:\\:__construct\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Media\\\\MediaTrigger\\:\\:\\$attachment \\(WP_Post\\) does not accept WP_Post\\|null\\.$#" count: 1 - path: src/Defaults/Trigger/Post/PostTrigger.php + path: src/Repository/Trigger/Media/MediaTrashed.php - - message: "#^Cannot access property \\$user_id on WP_User_Request\\|false\\.$#" + message: "#^Cannot access property \\$post_date_gmt on WP_Post\\|null\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataEraseRequest.php + path: src/Repository/Trigger/Media/MediaUpdated.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\DataEraseRequest\\:\\:context\\(\\) has no return typehint specified\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Media\\\\MediaTrigger\\:\\:\\$attachment \\(WP_Post\\) does not accept WP_Post\\|null\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataEraseRequest.php + path: src/Repository/Trigger/Media/MediaUpdated.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$data_operation_time \\(string\\) does not accept int\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataEraseRequest.php + path: src/Repository/Trigger/Post/PostAdded.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$request \\(WP_User_Request\\) does not accept WP_User_Request\\|false\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataEraseRequest.php + path: src/Repository/Trigger/Post/PostApproved.php - - message: "#^Cannot access property \\$user_id on WP_User_Request\\|false\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataErased.php + path: src/Repository/Trigger/Post/PostDrafted.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\DataErased\\:\\:context\\(\\) has no return typehint specified\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataErased.php + path: src/Repository/Trigger/Post/PostPending.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$data_operation_time \\(string\\) does not accept int\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataErased.php + path: src/Repository/Trigger/Post/PostPublished.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$request \\(WP_User_Request\\) does not accept WP_User_Request\\|false\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataErased.php + path: src/Repository/Trigger/Post/PostPublishedPrivately.php - - message: "#^Cannot access property \\$user_id on WP_User_Request\\|false\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataExportRequest.php + path: src/Repository/Trigger/Post/PostScheduled.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\DataExportRequest\\:\\:context\\(\\) has no return typehint specified\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataExportRequest.php + path: src/Repository/Trigger/Post/PostTrashed.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$data_operation_time \\(string\\) does not accept int\\.$#" + message: "#^Parameter \\#1 \\$slug of method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\BaseTrigger\\:\\:__construct\\(\\) expects string\\|null, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataExportRequest.php + path: src/Repository/Trigger/Post/PostTrigger.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$request \\(WP_User_Request\\) does not accept WP_User_Request\\|false\\.$#" + message: "#^Cannot cast mixed to int\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataExportRequest.php + path: src/Repository/Trigger/Post/PostUpdated.php - message: "#^Cannot access property \\$user_id on WP_User_Request\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataExported.php - - - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\DataExported\\:\\:context\\(\\) has no return typehint specified\\.$#" - count: 1 - path: src/Defaults/Trigger/Privacy/DataExported.php + path: src/Repository/Trigger/Privacy/DataEraseRequest.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\DataExported\\:\\:\\$json_report_pathname \\(string\\) does not accept string\\|null\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Privacy\\\\DataEraseRequest\\:\\:context\\(\\) has no return type specified\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataExported.php + path: src/Repository/Trigger/Privacy/DataEraseRequest.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$data_operation_time \\(string\\) does not accept int\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$request \\(WP_User_Request\\) does not accept WP_User_Request\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataExported.php + path: src/Repository/Trigger/Privacy/DataEraseRequest.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$request \\(WP_User_Request\\) does not accept WP_User_Request\\|false\\.$#" + message: "#^Cannot access property \\$user_id on WP_User_Request\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/Privacy/DataExported.php + path: src/Repository/Trigger/Privacy/DataErased.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Theme\\\\Installed\\:\\:context\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Privacy\\\\DataErased\\:\\:context\\(\\) has no return type specified\\.$#" count: 1 - path: src/Defaults/Trigger/Theme/Installed.php + path: src/Repository/Trigger/Privacy/DataErased.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Theme\\\\Installed\\:\\:\\$theme_installation_date_time \\(string\\) does not accept int\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$request \\(WP_User_Request\\) does not accept WP_User_Request\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/Theme/Installed.php + path: src/Repository/Trigger/Privacy/DataErased.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Theme\\\\Switched\\:\\:\\$theme_switch_date_time \\(string\\) does not accept int\\.$#" + message: "#^Cannot access property \\$user_id on WP_User_Request\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/Theme/Switched.php + path: src/Repository/Trigger/Privacy/DataExportRequest.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Theme\\\\Updated\\:\\:context\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Privacy\\\\DataExportRequest\\:\\:context\\(\\) has no return type specified\\.$#" count: 1 - path: src/Defaults/Trigger/Theme/Updated.php + path: src/Repository/Trigger/Privacy/DataExportRequest.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\Theme\\\\Updated\\:\\:\\$theme_update_date_time \\(string\\) does not accept int\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$request \\(WP_User_Request\\) does not accept WP_User_Request\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/Theme/Updated.php + path: src/Repository/Trigger/Privacy/DataExportRequest.php - - message: "#^Cannot access property \\$user_registered on WP_User\\|false\\.$#" + message: "#^Cannot access property \\$user_id on WP_User_Request\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserDeleted.php + path: src/Repository/Trigger/Privacy/DataExported.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserDeleted\\:\\:\\$user_meta type has no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Privacy\\\\DataExported\\:\\:context\\(\\) has no return type specified\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserDeleted.php + path: src/Repository/Trigger/Privacy/DataExported.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\Privacy\\\\PrivacyTrigger\\:\\:\\$request \\(WP_User_Request\\) does not accept WP_User_Request\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserDeleted.php + path: src/Repository/Trigger/Privacy/DataExported.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserEmailChangeRequest\\:\\:\\$user_meta type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$slug of method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\BaseTrigger\\:\\:__construct\\(\\) expects string\\|null, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserEmailChangeRequest.php + path: src/Repository/Trigger/Taxonomy/TermTrigger.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserEmailChangeRequest.php + path: src/Repository/Trigger/User/UserLogin.php - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserLogin.php + path: src/Repository/Trigger/User/UserPasswordChanged.php - - message: "#^Cannot access property \\$user_registered on WP_User\\|false\\.$#" + message: "#^Cannot access property \\$data on WP_User\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserLogin.php + path: src/Repository/Trigger/User/UserPasswordResetRequest.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserLogin\\:\\:\\$user_meta type has no value type specified in iterable type array\\.$#" + message: "#^Argument of an invalid type array\\|false supplied for foreach, only iterables are supported\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserLogin.php + path: src/Repository/Trigger/WordPress/UpdatesAvailable.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Cannot access property \\$current on mixed\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserLogin.php + path: src/Repository/Trigger/WordPress/UpdatesAvailable.php - - message: "#^Cannot access property \\$user_registered on WP_User\\|false\\.$#" + message: "#^Cannot access property \\$version on mixed\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserLoginFailed.php + path: src/Repository/Trigger/WordPress/UpdatesAvailable.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$updateType of method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\WordPress\\\\UpdatesAvailable\\:\\:getUpdatesCount\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserLoginFailed.php + path: src/Repository/Trigger/WordPress/UpdatesAvailable.php - - message: "#^Cannot access property \\$user_registered on WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$updateType of method BracketSpace\\\\Notification\\\\Repository\\\\Trigger\\\\WordPress\\\\UpdatesAvailable\\:\\:hasUpdates\\(\\) expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserLogout.php + path: src/Repository/Trigger/WordPress/UpdatesAvailable.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserLogout\\:\\:\\$user_meta type has no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Runtime\\:\\:components\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserLogout.php + path: src/Runtime.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$key of function array_key_exists expects int\\|string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserLogout.php + path: src/Store/Carrier.php - - message: "#^Access to an undefined property object\\:\\:\\$ID\\.$#" + message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserPasswordChanged.php + path: src/Store/Carrier.php - - message: "#^Cannot access property \\$user_registered on WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$key of function array_key_exists expects int\\|string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserPasswordChanged.php + path: src/Store/GlobalMergeTag.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserPasswordChanged\\:\\:\\$user_meta type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserPasswordChanged.php + path: src/Store/GlobalMergeTag.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$key of function array_key_exists expects int\\|string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserPasswordChanged.php + path: src/Store/Notification.php - - message: "#^Cannot access property \\$data on WP_User\\|false\\.$#" + message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserPasswordResetRequest.php + path: src/Store/Notification.php - - message: "#^Cannot access property \\$user_registered on WP_User\\|false\\.$#" + message: "#^Cannot access offset string on mixed\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserPasswordResetRequest.php + path: src/Store/Recipient.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Store\\\\Recipient\\:\\:all\\(\\) should return array\\\\> but returns array\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserPasswordResetRequest.php + path: src/Store/Recipient.php - - message: "#^Cannot access property \\$user_registered on WP_User\\|false\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Store\\\\Recipient\\:\\:allForCarrier\\(\\) should return array\\ but returns mixed\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserProfileUpdated.php + path: src/Store/Recipient.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserProfileUpdated\\:\\:\\$user_meta type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Trigger/User/UserProfileUpdated.php + message: "#^Unsafe access to private property BracketSpace\\\\Notification\\\\Store\\\\Recipient\\:\\:\\$items through static\\:\\:\\.$#" + count: 8 + path: src/Store/Recipient.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#1 \\$key of function array_key_exists expects int\\|string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserProfileUpdated.php + path: src/Store/Resolver.php - - message: "#^Cannot access property \\$user_registered on WP_User\\|false\\.$#" + message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserRegistered.php + path: src/Store/Resolver.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserRegistered\\:\\:\\$user_meta type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$key of function array_key_exists expects int\\|string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserRegistered.php + path: src/Store/Trigger.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" + message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserRegistered.php + path: src/Store/Trigger.php - - message: "#^Cannot access property \\$user_registered on WP_User\\|false\\.$#" + message: "#^Cannot access offset 'host' on array\\{scheme\\?\\: string, host\\?\\: string, port\\?\\: int, user\\?\\: string, pass\\?\\: string, path\\?\\: string, query\\?\\: string, fragment\\?\\: string\\}\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserRoleChanged.php + path: src/Utils/Settings.php - - message: "#^Method BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserRoleChanged\\:\\:context\\(\\) has parameter \\$old_roles with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Defaults/Trigger/User/UserRoleChanged.php + message: "#^Cannot access offset 'path' on array\\{scheme\\?\\: string, host\\?\\: string, port\\?\\: int, user\\?\\: string, pass\\?\\: string, path\\?\\: string, query\\?\\: string, fragment\\?\\: string\\}\\|false\\.$#" + count: 3 + path: src/Utils/Settings.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserRoleChanged\\:\\:\\$user_meta type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'scheme' on array\\{scheme\\?\\: string, host\\?\\: string, port\\?\\: int, user\\?\\: string, pass\\?\\: string, path\\?\\: string, query\\?\\: string, fragment\\?\\: string\\}\\|false\\.$#" count: 1 - path: src/Defaults/Trigger/User/UserRoleChanged.php + path: src/Utils/Settings.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\User\\\\UserTrigger\\:\\:\\$user_object \\(WP_User\\) does not accept WP_User\\|false\\.$#" - count: 1 - path: src/Defaults/Trigger/User/UserRoleChanged.php + message: "#^Cannot access offset mixed on mixed\\.$#" + count: 2 + path: src/Utils/Settings.php - - message: "#^Argument of an invalid type array\\|false supplied for foreach, only iterables are supported\\.$#" - count: 1 - path: src/Defaults/Trigger/WordPress/UpdatesAvailable.php + message: "#^Cannot access offset string on mixed\\.$#" + count: 3 + path: src/Utils/Settings.php - - message: "#^Cannot access offset mixed on \\(array&nonEmpty\\)\\|false\\.$#" - count: 1 - path: src/Defaults/Trigger/WordPress/UpdatesAvailable.php + message: "#^Cannot call method getGroups\\(\\) on mixed\\.$#" + count: 4 + path: src/Utils/Settings.php - - message: "#^Parameter \\#1 \\$function of function call_user_func expects callable\\(\\)\\: mixed, array\\(mixed, non\\-empty\\-string\\) given\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\:\\:addSection\\(\\) should return BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Section but returns mixed\\.$#" count: 1 - path: src/Defaults/Trigger/WordPress/UpdatesAvailable.php + path: src/Utils/Settings.php - - message: "#^Parameter \\#1 \\$function of function call_user_func expects callable\\(\\)\\: mixed, non\\-empty\\-string given\\.$#" + message: "#^Parameter \\#1 \\$text of function esc_html expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/WordPress/UpdatesAvailable.php + path: src/Utils/Settings/CoreFields/Button.php - - message: "#^Property BracketSpace\\\\Notification\\\\Defaults\\\\Trigger\\\\WordPress\\\\UpdatesAvailable\\:\\:\\$update_types type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$url of function esc_url_raw expects string, mixed given\\.$#" count: 1 - path: src/Defaults/Trigger/WordPress/UpdatesAvailable.php + path: src/Utils/Settings/CoreFields/Button.php - - message: "#^Call to an undefined method object\\:\\:add_action\\(\\)\\.$#" + message: "#^Parameter \\#1 \\$data of function wp_kses_data expects string, mixed given\\.$#" count: 1 - path: src/Integration/TwoFactor.php + path: src/Utils/Settings/CoreFields/Checkbox.php - - message: "#^Call to an undefined method object\\:\\:get_slug\\(\\)\\.$#" + message: "#^Parameter \\#3 \\$settings of function wp_editor expects array\\{wpautop\\?\\: bool, media_buttons\\?\\: bool, default_editor\\?\\: string, drag_drop_upload\\?\\: bool, textarea_name\\?\\: string, textarea_rows\\?\\: int, tabindex\\?\\: int\\|string, tabfocus_elements\\?\\: string, \\.\\.\\.\\}, array\\{textarea_name\\: string, editor_css\\: null, wpautop\\: mixed, media_buttons\\: mixed, textarea_rows\\: mixed, teeny\\: mixed\\} given\\.$#" count: 1 - path: src/Integration/TwoFactor.php + path: src/Utils/Settings/CoreFields/Editor.php - - message: "#^Access to an undefined property object\\:\\:\\$comment_approved\\.$#" - count: 2 - path: src/Integration/WordPress.php + message: "#^Parameter \\#1 \\$url of function esc_url expects string, string\\|false given\\.$#" + count: 1 + path: src/Utils/Settings/CoreFields/Image.php - - message: "#^Method BracketSpace\\\\Notification\\\\Integration\\\\WordPressEmails\\:\\:disable_email_change_notify_to_user\\(\\) has parameter \\$user with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Integration/WordPressEmails.php + message: "#^Parameter \\#1 \\$text of function esc_attr expects string, mixed given\\.$#" + count: 3 + path: src/Utils/Settings/CoreFields/Number.php - - message: "#^Method BracketSpace\\\\Notification\\\\Integration\\\\WordPressEmails\\:\\:disable_email_change_notify_to_user\\(\\) has parameter \\$userdata with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Integration/WordPressEmails.php + message: "#^Parameter \\#1 \\$text of function esc_attr expects string, mixed given\\.$#" + count: 3 + path: src/Utils/Settings/CoreFields/Range.php - - message: "#^Method BracketSpace\\\\Notification\\\\Integration\\\\WordPressEmails\\:\\:disable_password_change_notify_to_user\\(\\) has parameter \\$user with no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#1 \\$str of function sanitize_text_field expects string, mixed given\\.$#" count: 1 - path: src/Integration/WordPressEmails.php + path: src/Utils/Settings/CoreFields/Select.php - - message: "#^Method BracketSpace\\\\Notification\\\\Integration\\\\WordPressEmails\\:\\:disable_password_change_notify_to_user\\(\\) has parameter \\$userdata with no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Field\\:\\:\\$addons \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Integration/WordPressEmails.php + path: src/Utils/Settings/Field.php - - message: "#^Method BracketSpace\\\\Notification\\\\Interfaces\\\\Receivable\\:\\:parse_value\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Field\\:\\:\\$description \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Interfaces/Receivable.php + path: src/Utils/Settings/Field.php - - message: "#^Method BracketSpace\\\\Notification\\\\Interfaces\\\\Resolvable\\:\\:resolve_merge_tag\\(\\) has parameter \\$match with no value type specified in iterable type array\\.$#" + message: "#^Cannot call method getLogs\\(\\) on mixed\\.$#" count: 1 - path: src/Interfaces/Resolvable.php + path: src/Utils/Settings/Fields/ErrorLog.php - - message: "#^Method BracketSpace\\\\Notification\\\\Interfaces\\\\Taggable\\:\\:set_trigger\\(\\) has no return typehint specified\\.$#" + message: "#^Cannot call method getLogsCount\\(\\) on mixed\\.$#" count: 1 - path: src/Interfaces/Taggable.php + path: src/Utils/Settings/Fields/ErrorLog.php - - message: "#^Method BracketSpace\\\\Notification\\\\Queries\\\\NotificationQueries\\:\\:all\\(\\) should return array\\ but returns array\\\\.$#" + message: "#^Cannot access offset 'carrier' on mixed\\.$#" count: 1 - path: src/Queries/NotificationQueries.php + path: src/Utils/Settings/Fields/NotificationLog.php - - message: "#^Method BracketSpace\\\\Notification\\\\Runtime\\:\\:components\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'notification' on mixed\\.$#" count: 1 - path: src/Runtime.php + path: src/Utils/Settings/Fields/NotificationLog.php - - message: "#^Parameter \\#2 \\$callable of static method WP_CLI\\:\\:add_command\\(\\) expects callable\\(\\)\\: mixed, 'BracketSpace\\\\\\\\Notification\\\\\\\\Cli\\\\\\\\DumpHooks' given\\.$#" + message: "#^Cannot access offset 'trigger' on mixed\\.$#" count: 1 - path: src/Runtime.php + path: src/Utils/Settings/Fields/NotificationLog.php - - message: "#^Property BracketSpace\\\\Notification\\\\Runtime\\:\\:\\$components type has no value type specified in iterable type array\\.$#" + message: "#^Cannot call method getLogs\\(\\) on mixed\\.$#" count: 1 - path: src/Runtime.php + path: src/Utils/Settings/Fields/NotificationLog.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\:\\:get_sections\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot call method getLogsCount\\(\\) on mixed\\.$#" count: 1 - path: src/Utils/Settings.php + path: src/Utils/Settings/Fields/NotificationLog.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\:\\:get_settings\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group\\:\\:collapse\\(\\) should return BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group but returns bool\\|BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group\\.$#" count: 1 - path: src/Utils/Settings.php + path: src/Utils/Settings/Group.php - - message: "#^Property BracketSpace\\\\Notification\\\\Utils\\\\Settings\\:\\:\\$sections type has no value type specified in iterable type array\\.$#" + message: "#^Parameter \\#2 \\$name of class BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Field constructor expects string, mixed given\\.$#" count: 1 - path: src/Utils/Settings.php + path: src/Utils/Settings/Group.php - - message: "#^Parameter \\#1 \\$url of function esc_url expects string, string\\|false given\\.$#" + message: "#^Property BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group\\:\\:\\$description \\(string\\) does not accept mixed\\.$#" count: 1 - path: src/Utils/Settings/CoreFields/Image.php + path: src/Utils/Settings/Group.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Field\\:\\:addons\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Section\\:\\:addGroup\\(\\) should return BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group but returns mixed\\.$#" count: 1 - path: src/Utils/Settings/Field.php + path: src/Utils/Settings/Section.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group\\:\\:add_field\\(\\) has parameter \\$args with no value type specified in iterable type array\\.$#" + message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\WpObjectHelper\\:\\:getCommentTypes\\(\\) should return array\\ but returns mixed\\.$#" count: 1 - path: src/Utils/Settings/Group.php + path: src/Utils/WpObjectHelper.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group\\:\\:collapse\\(\\) should return BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group but returns bool\\|BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group\\.$#" + message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" count: 1 - path: src/Utils/Settings/Group.php + path: uninstall.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group\\:\\:get_fields\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'license' on mixed\\.$#" count: 1 - path: src/Utils/Settings/Group.php + path: uninstall.php - - message: "#^Property BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Group\\:\\:\\$fields type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'licenses' on mixed\\.$#" count: 1 - path: src/Utils/Settings/Group.php + path: uninstall.php - - message: "#^Method BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Section\\:\\:get_groups\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'notifications' on mixed\\.$#" count: 1 - path: src/Utils/Settings/Section.php + path: uninstall.php - - message: "#^Property BracketSpace\\\\Notification\\\\Utils\\\\Settings\\\\Section\\:\\:\\$groups type has no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'settings' on mixed\\.$#" count: 1 - path: src/Utils/Settings/Section.php + path: uninstall.php - - message: "#^Function notification\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Cannot access offset 'uninstallation' on mixed\\.$#" count: 1 - path: src/api.php + path: uninstall.php - - message: "#^Function notification_convert_data\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Cannot call method deactivate\\(\\) on mixed\\.$#" count: 1 - path: src/api.php + path: uninstall.php - - message: "#^Function notification_convert_data\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Cannot call method isValid\\(\\) on mixed\\.$#" count: 1 - path: src/api.php + path: uninstall.php diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 000000000..01c1bbe0a --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,54 @@ +includes: + - vendor/szepeviktor/phpstan-wordpress/extension.neon + - phpstan-baseline.neon +parameters: + level: max + inferPrivatePropertyTypeFromConstructor: true + treatPhpDocTypesAsCertain: false + scanFiles: + - vendor/php-stubs/wp-cli-stubs/wp-cli-stubs.php + paths: + - notification.php + - load.php + - uninstall.php + - src/ + - compat/ + typeAliases: + NotificationData: ''' + array{ + hash?: string, + title?: string, + trigger?: BracketSpace\Notification\Interfaces\Triggerable, + carriers?: array, + enabled?: bool, + extras?: array|bool|float|int|string>, + version?: int, + } + ''' + NotificationAsArray: ''' + array{ + hash: string, + title: string, + trigger: string, + carriers: array>, + enabled: bool, + extras: array|bool|float|int|string>, + version: int, + } + ''' + NotificationUnconvertedData: ''' + array{ + hash?: string, + title?: string, + trigger?: BracketSpace\Notification\Interfaces\Triggerable|string, + carriers?: array>, + enabled?: bool, + extras?: array|bool|float|int|string>, + version?: int, + } + ''' + excludePaths: + - compat/src-deprecated/helpers.php + - compat/stubs.php + - dependencies/ + - src/Utils/EDDUpdater.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist deleted file mode 100644 index 5086e6b40..000000000 --- a/phpstan.neon.dist +++ /dev/null @@ -1,22 +0,0 @@ -includes: - - vendor/szepeviktor/phpstan-wordpress/extension.neon - - phpstan-baseline.neon -parameters: - level: max - inferPrivatePropertyTypeFromConstructor: true - bootstrapFiles: - - tests/phpstan/bootstrap.php - scanFiles: - - vendor/php-stubs/wp-cli-stubs/wp-cli-stubs.php - paths: - - notification.php - - load.php - - uninstall.php - - src/ - - compat/ - excludePaths: - - src/Dependencies/ - - src/Utils/EDDUpdater.php - ignoreErrors: - # Uses func_get_args() - - '#^Function apply_filters(_ref_array)? invoked with [34567] parameters, 2 required\.$#' diff --git a/phpunit.xml b/phpunit.xml index 7f8f2f67e..887ee0f83 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,4 +1,4 @@ - + - + ./tests/ - - + + ./src - - - - - + + diff --git a/readme.txt b/readme.txt index a3e807466..0388d05d2 100644 --- a/readme.txt +++ b/readme.txt @@ -3,8 +3,8 @@ Contributors: notification, bracketspace, Kubitomakita, tomaszadamowicz, insejn, Tags: notification, notify, alert, email, mail, webhook, API, developer, framework Requires at least: 4.9 Tested up to: 6.2 -Stable tag: 8.0.15 -Requires PHP: 7.0 +Stable tag: 9.0.0 +Requires PHP: 7.4 License: GPLv3 License URI: http://www.gnu.org/licenses/gpl-3.0.html @@ -284,7 +284,7 @@ When using SMTP it's nearly impossible to send more than a dozen emails at once = Can I test my notifications before sending? = -Yes, just activate the debug log in the DEBUGGING section of the plugin settings. All notifications will be catched into log visible only to you. +Yes, just activate the debug log in the DEBUGGING section of the plugin settings. All notifications will be caught into log visible only to you. = Can you create a plugin for me? = @@ -302,174 +302,103 @@ Yes! We're offering a [custom plugin development](https://bracketspace.com/custo == Changelog == -= 8.0.15 = - -* [Fixed] Comment merge tags rendering empty values. -* [Changed] Development dependencies got some security patches. -* [Changed] `notification/merge_tag/value/resolve` now accepts unsanitized value. - -= 8.0.14 = - -* [Fixed] Outdated dochoooks compatibility file, causing a fatal error while adding new post in some environments. - -= 8.0.13 = - -* [Fixed] Regression with REST API check. -* [Changed] `repeater_api` internal runtime component to `api`. -* [Added] `get_endpoint` method to the API class. - -= 8.0.12 = - -* [Changed] Logic of assigning property name is moved to Abstract Merge Tag Class. -* [Added] Property names to Term Merge Tags. -* [Added] 6h cache expire to the user queries. -* [Added] Email / Merge tag recipient now can also be separated with semicolon. -* [Added] Endpoint to check whether the REST api is enabled. - -= 8.0.11 = - -* [Changed] Add php_xml to required php extensions. -* [Changed] Background processing cache is being stored in transient instead of an option. -* [Fixed] PHP 8.0 and 8.1 compatibility. -* [Fixed] Improper caching expiration times. -* [Fixed] Trigger keeping state between subsequent action runs. -* [Fixed] Password reset trigger is not processed on user registration anymore. -* [Added] Trigger `resume()` method to reset the stopped state. - -= 8.0.10 = - -* [Fixed] User logout trigger. In WordPress 5.5 the context is set properly. -* [Fixed] Issue with persistent Trigger state if two or more actions assigned to the same trigger were called. -* [Changed] Carrier's recipients field is now returned with resolved data if available. -* [Added] Post Published privately trigger. - -= 8.0.9 = - -* [Fixed] Merge Tags resolver problem caused by overriding the processed trigger instance. -* [Changed] `notification/should_send` filter is now executed when the queue is processed, not before the notification is added to the queue. -* [Added] New queue methods: `remove()` and `clear()`. - -= 8.0.8 = - -* [Fixed] Two or more same triggers processed in the same request overwriting each other data. - -= 8.0.7 = - -* [Fixed] Shortcode stripping regex that was matching JSON arrays. -* [Changed] Extensions are now reporting updates even if they are not activated. -* [Changed] Updated EDD Updater class. -* [Added] Webhook warning logging when response is not valid. - -= 8.0.6 = - -* [Fixed] Extension activation notice link. -* [Fixed] Extension activation process. -* [Fixed] Incorrect empty merge tag cleaning which was misreading JSON format. - -= 8.0.5 = - -* [Changed] Updated PHP dependencies. - -= 8.0.4 = - -* [Changed] Updated PHP dependencies. -* [Changed] Extension license notice is now printed once and covers all the plugins. -* [Changed] Some of the core fields like Import/Export now have own setting classes. -* [Fixed] Remaining template variable escaping. -* [Removed] HTML Settings field, introduced in v8.0.3. Now it's required to create purpose-specific field classes. - -= 8.0.3 = - -* [Added] HTML Settings field. -* [Added] Notification hash column in the Notification table. -* [Changed] Some of the Settings to HTML field instead of the Message field. -* [Fixed] Broken Import/Export sections. -* [Fixed] Notifications cache is now cleared when creating notification via wizard. - -= 8.0.2 = - -* [Added] HTML escaping and nonce verifications. -* [Changed] Notification file syncing is now using Filesystem methods. -* [Changed] Internal cache classes with `micropackage/cache`. -* [Changed] Menu icon. -* [Changed] Vue is now loaded from within the plugin instead of CDN. -* [Removed] Internal cache classes `Bracketspace\Notification\Utils\Cache` and `Bracketspace\Notification\Utils\Interfaces` namespaces. -* [Removed] Settings internal caching that couldn't wait for all the fields to be registered. Now we're relying on the get_option() core function caching. - -= 8.0.1 = - -* [Changed] Field and Merge Tag description field is now escaped and cannot contain any HTML tags. -* [Fixed] Recipients parser which didn't resolved Email Merge Tags. - -= 8.0.0 = += 9.0.0 = **Compatibility Breaking Changes** -1. Runtime `get_filesystems()` method has been changed to `get_filesystem()` and now only root file system is defined. -2. Trigger `action()` method has been renamed to `context()`. -3. Trigger doesn't have the postponing feature anymore, as processing is happening on the `shutdown` action. -4. Trigger is now only a description object, all the processing is handled by the Runner class. -5. `notification/carrier/sent` action doesn't have the Notification context anymore, so there's no 3rd parameter. -6. Store classes now live under `BracketSpace\Notification\Store` namespace rather than `BracketSpace\Notification\Defaults\Store`. -7. Plugin doesn't cache anything anymore, the loading process is more streamlined and things like Post Types are lazy loaded when needed -8. Registration functions has been replaced with `Register` class and its static methods. -9. Multiple functions has been replaced with their static method equivalents. -10. `notification/elements` action has been deprecated, use `notification/init` instead. -11. `NOTIFICATION_VERSION` constant has been removed, use `Notification::version()` instead. -12. `BracketSpace\Notification\Vendor` namespace is replaced with `BracketSpace\Notification\Dependencies`. +- Webook and Webhook JSON Carriers are now deprecated and won't work. [Read more about that change](https://docs.bracketspace.com/notification/extensions/webhooks) +- Notifications are now saved into the custom table instead of relying on wp_posts. +- Class methods and properties has been changed from snake_case to camelCase. +- In Post Triggers, dynamic property `$trigger->{$post_type}` has been replaced with static prop `$trigger->post`. +- The same as above applies to Post Trigger datetime tags, namely: postCreationDatetime, postPublicationDatetime, and postModificationDatetime. +- Post Merge Tags will now use `property_name` attribute rather than `post_type` to set trigger property used by resolvers. +- Hook `notification/data/save` and `notification/data/save/after` now pass Core\Notification instance in the first param instead of the WordPress adapter instance. +- Runtime components are now referenced by FQCN (Fully Qualified Class Name), instead of the name. + +Namespace changes: +- `BracketSpace\Notification\Defaults\` changed to `BracketSpace\Notification\Repository\` +- `BracketSpace\Notification\Abstracts\Carrier` changed to `BracketSpace\Notification\Repository\Carrier\BaseCarrier` +- `BracketSpace\Notification\Abstracts\Field` changed to `BracketSpace\Notification\Repository\Field\BaseField` +- `BracketSpace\Notification\Abstracts\MergeTag` changed to `BracketSpace\Notification\Repository\MergeTag\BaseMergeTag` +- `BracketSpace\Notification\Abstracts\Recipient` changed to `BracketSpace\Notification\Repository\Recipient\BaseRecipient` +- `BracketSpace\Notification\Abstracts\Resolver` changed to `BracketSpace\Notification\Repository\Resolver\BaseResolver` +- `BracketSpace\Notification\Abstracts\Trigger` changed to `BracketSpace\Notification\Repository\Trigger\BaseTrigger` + +Hook depracations: +- `notification/data/save/after`, use `notification/data/saved` + +Function and method deprecations: +- `BracketSpace\Notification\Admin\PostType::getAllNotifications()`, use `BracketSpace\Notification\Database\NotificationDatabaseService::getAll()` +- `notification_convert_data()`, use `BracketSpace\Notification\Core\Notification::from('array', $array)` +- `notification_register_settings()`, use the `notification/settings/register` action directly +- `notification_get_settings()`, use `\Notification::component('settings')->getSettings()` +- `notification_update_setting()`, use `\Notification::component('settings')->updateSetting()` +- `notification_get_setting()`, use `\Notification::component('settings')->getSetting()` +- `notification_adapt()`, use `BracketSpace\Notification\Core\Notification::to()` +- `notification_adapt_from()`, use `BracketSpace\Notification\Core\Notification::from()` +- `notification_swap_adapter()`, use `::from()` and `::to()` methods on the `BracketSpace\Notification\Core\Notification` class +- `notification_add()`, use `BracketSpace\Notification\Register::notification()` +- `notification_log()`, use `BracketSpace\Notification\Core\Debugger::log()` +- `notification()`, use `BracketSpace\Notification\Register::notificationFromArray()` Removed deprecated hooks: -- `notification/notification/pre-send`, use `notification/carrier/pre-send` -- `notificaiton/notification/field/resolving`, use `notification/carrier/field/resolving` -- `notification/value/strip_empty_mergetags`, use `notification/resolve/strip_empty_mergetags` -- `notification/value/strip_shortcodes`, use `notification/carrier/field/value/strip_shortcodes` -- `notificaiton/notification/field/resolved`, use `notification/carrier/field/value/resolved` -- `notificaiton/merge_tag/value/resolved`, use `notification/merge_tag/value/resolved` -- `notification/webhook/remote_args/{$method}`, use `notification/carrier/webhook/remote_args/{$method}` -- `notification/webhook/called/{$method}`, use `notification/carrier/webhook/called/{$method}` -- `notification/boot/initial`, use `notification/init` -- `notification/boot`, use `notification/init` +- `notitication/admin/notifications/pre`, use `notification/admin/carriers/pre` +- `notitication/admin/notifications`, use `notification/admin/carriers` +- `notification/email/use_html_mime`, use `notification/carrier/email/use_html_mime` +- `notification/email/recipients`, use `notification/carrier/email/recipients` +- `notification/email/subject`, use `notification/carrier/email/subject` +- `notification/email/message/pre`, use `notification/carrier/email/message/pre` +- `notification/email/message/use_autop`, use `notification/carrier/email/message/use_autop` +- `notification/email/message`, use `notification/carrier/email/message` +- `notification/email/headers`, use `notification/carrier/email/headers` +- `notification/email/attachments`, use `notification/carrier/email/attachments` +- `notification/webhook/args`, use `notification/carrier/webhook/args` +- `notification/webhook/args/{$type}`, use `notification/carrier/webhook/args/{$type}` +- `notification/notification/form_fields/values`, use `notification/carrier/fields/values` **Full changelog** -* [Fixed] Code issues from not using static analysis. -* [Fixed] WordPress' balanceTags filter which was breaking the Notification content. -* [Fixed] Notification importing. -* [Fixed] Setting fields escaping. -* [Fixed] Post Updated Trigger which failed for updating pending posts, that doesn't have the slug yet. -* [Changed] Always return the single root filesystem in Runtime. -* [Changed] Stores with plugin objects, now they are much simpler and don't use WP filters. -* [Changed] Plugin loading stack, [see docs](https://docs.bracketspace.com/notification/developer/general/plugin-loading-chain) for more details. -* [Changed] Plugin settings now are initialized on `notification/init 5` action. -* [Changed] Recipients now can be loaded anytime, not only before Carriers get registered. -* [Changed] PHP Dependency handling, now all the PHP dependencies lives in src/Dependencies dir. -* [Removed] `Common` Abstract that has been replaced by HasName and HasSlug Traits. -* [Removed] Cache class and all caching mechanism for post types, taxonomies and comment types. -* [Removed] Trait Users. This is replaced with `BracketSpace\Notification\Queries\UserQueries` class. -* [Removed] Deprecated hooks for actions and filters. -* [Removed] Carrier helper functions: `notification_register_carrier`, `notification_get_carriers`, `notification_get_carrier`. -* [Removed] Recipient helper functions: `notification_register_recipient`, `notification_get_recipients`, `notification_get_carrier_recipients`, `notification_get_recipient`, `notification_parse_recipient`. -* [Removed] Resolver helper functions: `notification_register_resolver`, `notification_resolve`, `notification_clear_tags`. -* [Removed] Trigger helper functions: `notification_register_trigger`, `notification_get_triggers`, `notification_get_trigger`, `notification_get_triggers_grouped`. -* [Removed] GLobal Merge Tags helper functions: `notification_add_global_merge_tag`, `notification_get_global_merge_tags`. -* [Removed] Misc functions: `notification_display_wizard`, `notification_ajax_handler`, `notification_filesystem`. -* [Removed] Template functions: `notification_template`, `notification_get_template`. -* [Removed] Notification post functions: `notification_get_posts`, `notification_get_post_by_hash`, `notification_post_is_new`. -* [Removed] Syncing functions: `notification_sync`, `notification_get_sync_path`, `notification_is_syncing`. -* [Removed] Whitelabeling functions: `notification_whitelabel`, `notification_is_whitelabeled`. -* [Removed] Editor and Code Editor fields sanitizers to allow for HTML usage, ie. email templates. -* [Removed] `notification/elements` action hoook. -* [Removed] NOTIFICATION_VERSION constant. -* [Added] Runner class that processes the Triggers. -* [Added] ErrorHandler class that helps handle errors. It can throw an exception when NOTIFICATION_DEBUG is enabled or save a warning to error_log when it's disabled. -* [Added] Plugin settings value lazy loading. -* [Added] Email error catcher. -* [Added] Free and Premium extensions upselling. -* [Added] `Notification::fs()` helper that returns plugin filesystem. -* [Added] Core\Templates wrapper for Templates provider. +* [Added] Option to disable notification about admin email address changed. +* [Added] New trigger after user confirms his new email address. +* [Added] New trigger after admin confirms new site email address. +* [Added] New trigger after WordPress update. +* [Added] notification/admin/allow_column/$column filter. +* [Added] Notification converter concept, with array and JSON default converters. +* [Added] Custom wp_notifications table (with corresponding helper tables). +* [Added] User nickname merge tag. +* [Added] Possibility to define return field for built-in recipients (ID or user_email) +* [Changed] Notification is now saved to the custom table instead of wp_posts. +* [Changed] Global functions has been deprecated and got equivalents in respective classes. +* [Changed] Removed v6 & v7 deprecated functions. +* [Changed] Minimum required PHP version to 7.4 or newer. +* [Changed] WordPress Coding Standards to PSR-12 standards. +* [Changed] Trigger dropdown is now taller for better UX. +* [Changed] Notification table is now filtered from uneccessary columns. +* [Changed] Multiple function, method and hook deprecations, see above for detailed list and replacements. +* [Changed] Runtime components names, see above for detailed list and replacements. +* [Changed] Namespace `BracketSpace\Notification\Defaults\` to `BracketSpace\Notification\Repository\`. +* [Changed] Runtime components are now referenced by FQCN (Fully Qualified Class Name), instead of the name. +* [Changed] Abstract classes are now renamed BaseSomething convention and placed in Repository dir. +* [Changed] Date-related merge tags (`Date`, `DateTime` and `Time`) now requires `timestamp` argument to be callable. +* [Changed] Unify attribute name used by resolvers to `property_name` in all Merge Tags. +* [Fixed] Shortcodes being uncorrectly stripped leaving closing "]" behind. +* [Fixed] PHP 8.2 deprecations. +* [Fixed] Stripping shortcodes in carrier fields. +* [Fixed] Email carrier header "From" prioritized over header in settings. +* [Fixed] User password reset link requires encoded username. +* [Fixed] Notification class serialization. +* [Removed] DOING_NOTIFICATION_SAVE constant. +* [Removed] NotificationQueries class in favor of NotificationDatabaseService. +* [Removed] Webook and Webhook JSON Carriers. == Upgrade Notice == += 9.0.0 = +Minimum required PHP version is 7.4. +Compatibility breaking changes. Please make sure to review the changelog before upgrading and adjust your customizations. +The premium plugins won't work with Notification 9.0.0 unless updated. +Webook and Webhook JSON Carriers are now deprecated and won't work unless you get an add-on. + = 8.0.0 = Compatibility breaking changes and security fixes. Please make sure to review the changelog before upgrading and adjust your customizations. The premium plugins won't work with Notification v8 unless updated. diff --git a/resources/css/src/_variables.scss b/resources/css/src/_variables.scss index a132b5dd7..4e73a815c 100644 --- a/resources/css/src/_variables.scss +++ b/resources/css/src/_variables.scss @@ -1,4 +1,3 @@ - $mobile-width: 782px; @mixin mobile { diff --git a/resources/css/src/fields/_image.scss b/resources/css/src/fields/_image.scss index 021be2e62..fdd532fde 100644 --- a/resources/css/src/fields/_image.scss +++ b/resources/css/src/fields/_image.scss @@ -5,28 +5,28 @@ } .image { - position: relative; display: none; + position: relative; .clear { - position: absolute; - top: -9px; - right: -9px; + background: #fff; border: 1px solid #fff; + border-radius: 50%; + cursor: pointer; font-size: 26px; height: 26px; + position: absolute; + right: -9px; + top: -9px; width: 28px; - background: #fff; - border-radius: 50%; - cursor: pointer; } .preview { border: 1px solid #e5e5e5; border-radius: 5px; - max-width: 200px; - height: auto; cursor: pointer; + height: auto; + max-width: 200px; } } diff --git a/resources/css/src/fields/_repeater.scss b/resources/css/src/fields/_repeater.scss index 2305607d1..fca00b53e 100644 --- a/resources/css/src/fields/_repeater.scss +++ b/resources/css/src/fields/_repeater.scss @@ -5,13 +5,13 @@ } .add-new-sections-field { - position: relative; - margin-top: 10px; margin-right: 40px; + margin-top: 10px; + position: relative; @media ( max-width: 782px) { - position: static; float: none; + position: static; } &-info { @@ -19,19 +19,19 @@ } .section-modal { - position: absolute; - z-index: 1; - border-radius: 5px; background-color: #000; + border-radius: 5px; color: #fff; - text-align: center; left: 0; min-width: 100%; + position: absolute; + text-align: center; + z-index: 1; span { display: block; - padding: 5px; margin: 5px; + padding: 5px; &:hover { background-color: #0071a1; @@ -51,11 +51,11 @@ .notification-field { &.fields-repeater { - width: 100%; - margin-bottom: 10px; border: 0; border-collapse: collapse; + margin-bottom: 10px; table-layout: fixed; + width: 100%; tr { @@ -65,26 +65,26 @@ td:not(.nested-section-repeater), th { - width: auto; - padding: 12px; background-color: #fff; border: 1px solid #e5e5e5; + padding: 12px; + width: auto; &.handle, &.sub-handle, &.trash { background: #f5f5f5; + color: #a5a5a5; + padding: 0; + text-align: center; white-space: nowrap; width: 40px; - text-align: center; - padding: 0; - color: #a5a5a5; @media ( max-width: 782px ) { - width: calc(100% - 22px); height: 30px; line-height: 30px; padding: 0 10px; + width: calc(100% - 22px); } } @@ -93,8 +93,8 @@ position: relative; &::after { - display: none; content: "\f545"; + display: none; font: 400 20px/1 dashicons, sans-serif; line-height: 30px; } @@ -120,11 +120,11 @@ /* stylelint-disable no-descending-specificity */ .handle-index { /* stylelint-enable */ + left: 50%; position: absolute; + text-align: center; top: 50%; - left: 50%; transform: translate(-50%, -50%); - text-align: center; } } @@ -170,14 +170,14 @@ } &::after { - display: none; content: "\f182"; + display: none; font: 400 20px/1 dashicons, sans-serif; line-height: 30px; @media ( max-width: 782px ) { - position: absolute; display: block; + position: absolute; right: 10px; top: 0; } @@ -242,8 +242,8 @@ background-color: #f5f5f5; @media ( max-width: 782px ) { - border-top: 0; border-bottom: 0; + border-top: 0; &:first-child { border-top: 1px solid #e5e5e5; @@ -328,8 +328,8 @@ .nested-repeater-fields { table { - border-spacing: 0; border-collapse: collapse; + border-spacing: 0; @media ( max-width: 1680px ) { width: 100%; @@ -353,14 +353,14 @@ &.sub-handle { @media ( max-width: 1680px ) { - width: 100%; height: 30px; + width: 100%; } @media (max-width: 782px) { - width: calc(100% - 20px); margin-left: auto; margin-right: auto; + width: calc(100% - 20px); } } @@ -400,13 +400,13 @@ } .nested-section-repeater { + border-bottom: 1px solid #e5e5e5; padding: 0 0 10px 0; width: 100%; - border-bottom: 1px solid #e5e5e5; .row { - width: 100%; border-collapse: collapse; + width: 100%; .section-content { width: auto; @@ -444,9 +444,9 @@ } .section-name-field { - width: 80px; - text-transform: capitalize; font-weight: 600; + text-transform: capitalize; + width: 80px; } .trash { diff --git a/resources/css/src/partials/_admin-carriers.scss b/resources/css/src/partials/_admin-carriers.scss index ca25ad03b..918013b17 100644 --- a/resources/css/src/partials/_admin-carriers.scss +++ b/resources/css/src/partials/_admin-carriers.scss @@ -24,31 +24,31 @@ body.post-type-notification { &::before, &::after { + clear: both; content: ""; display: block; - clear: both; } .switch { - float: left; + background: #c5c5c5; + border-radius: 1em; display: inline-block; + float: left; font-size: 20px; height: 1em; - width: 2em; - background: #c5c5c5; - border-radius: 1em; - margin-top: 8px; margin-right: 10px; + margin-top: 8px; + width: 2em; div { - height: 1em; - width: 1em; - border-radius: 1em; background: #fff; + border-radius: 1em; box-shadow: 0 0.1em 0.3em rgba(0, 0, 0, 0.3); + height: 1em; -webkit-transition: all 300ms; -moz-transition: all 300ms; transition: all 300ms; + width: 1em; } } diff --git a/resources/css/src/partials/_admin-trigger.scss b/resources/css/src/partials/_admin-trigger.scss index e21f1c7b8..cfeb34367 100644 --- a/resources/css/src/partials/_admin-trigger.scss +++ b/resources/css/src/partials/_admin-trigger.scss @@ -5,13 +5,17 @@ body.post-type-notification { .selectize-control .selectize-dropdown .caption { - font-size: 12px; - display: block; color: #a0a0a0; + display: block; + font-size: 12px; } .selectize-control .selectize-dropdown div[data-selectable] { padding: 6px 8px; } + .selectize-control .selectize-dropdown-content { + max-height: 550px; + } + } diff --git a/resources/css/src/partials/_admin-wizard.scss b/resources/css/src/partials/_admin-wizard.scss index 85bfe61e3..94b2e42ad 100644 --- a/resources/css/src/partials/_admin-wizard.scss +++ b/resources/css/src/partials/_admin-wizard.scss @@ -1,7 +1,7 @@ #notifications-wizard { - position: relative; - margin-top: 50px; margin-left: 40px; + margin-top: 50px; + position: relative; @media (max-width: 1100px) { margin-left: 0; @@ -13,10 +13,10 @@ } h3 { + color: #5f5f5f; font-size: 18px; - line-height: 28px; font-weight: 400; - color: #5f5f5f; + line-height: 28px; margin: 0 0 83px 0; @media (max-width: 900px) { @@ -39,10 +39,10 @@ } &-subtitle { + color: #5f5f5f; font-size: 15px; - line-height: 19px; font-weight: 400; - color: #5f5f5f; + line-height: 19px; } } @@ -54,13 +54,13 @@ } .notifications-tile { + border: 1px solid #ccc; + box-shadow: 0 0 6px rgba(0, 0, 0, 0.16); + cursor: pointer; margin: 10px; - width: calc(33% - 44px); min-width: 200px; - cursor: pointer; position: relative; - border: 1px solid #ccc; - box-shadow: 0 0 6px rgba(0, 0, 0, 0.16); + width: calc(33% - 44px); @media (max-width: 782px) { width: calc(50% - 22px); @@ -75,28 +75,28 @@ } &-hover { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - opacity: 0; - visibility: hidden; + align-items: center; background: rgba(0, 0, 0, 0.8); color: #fff; display: flex; flex-direction: column; + height: 100%; justify-content: center; - align-items: center; + left: 0; + opacity: 0; + position: absolute; + top: 0; transition: all 0.2s linear; + visibility: hidden; + width: 100%; @media (max-width: 900px) { display: none; } span { - width: 65px; height: 65px; + width: 65px; &::before { font-size: 65px; @@ -105,25 +105,25 @@ } .inside { + background-color: #fff; margin: 0; - position: relative; min-height: 100%; + position: relative; width: 100%; - background-color: #fff; .content { - padding: 20px; margin-bottom: 40px; + padding: 20px; h2 { - margin: 0; color: #5f5f5f; + margin: 0; } p { + color: #5f5f5f; font-size: 13px; line-height: 17px; - color: #5f5f5f; padding: 10px 0; } } @@ -132,33 +132,33 @@ span { color: #888; - margin-right: 10px; font-size: 18px; + margin-right: 10px; } } .carrier-type { - border-top: 1px solid #ccc; background-color: #fafafa; + border-top: 1px solid #ccc; + bottom: 0; + box-sizing: border-box; color: #5f5f5f; - padding: 10px 20px; font-weight: 600; + padding: 10px 20px; position: absolute; - bottom: 0; width: 100%; - box-sizing: border-box; } } &.selected { - box-shadow: 0 0 6px rgba(0, 133, 186, 0.5); border: 1px solid rgba(0, 133, 186, 1); + box-shadow: 0 0 6px rgba(0, 133, 186, 0.5); .inside { .carrier-type { - border-top: 1px solid rgba(0, 133, 186, 1); background-color: rgba(0, 133, 186, 1); + border-top: 1px solid rgba(0, 133, 186, 1); color: #fff; } @@ -174,22 +174,22 @@ } .tile-image { + background: #fff; border: 1px solid #e5e5e5; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); - background: #fff; padding: 33px 40px; svg { - max-width: 100%; height: auto; + max-width: 100%; } } } .sidebar { position: absolute; - top: 0; right: 0; + top: 0; width: 280px; @media (max-width: 900px) { @@ -206,16 +206,16 @@ } h3 { + color: #5f5f5f; font-weight: 700; margin-bottom: 10px; - color: #5f5f5f; } a, button { display: block; - width: 100%; margin: 5px 0; + width: 100%; &.button { text-align: center; @@ -226,22 +226,22 @@ .skip-wizard { &.as-link { - margin-top: 0.8rem; background: transparent; - color: #5f5f5f; - text-align: center; - font-size: 13px; border-color: transparent; box-shadow: 0 1px 0 transparent; + color: #5f5f5f; + font-size: 13px; + margin-top: 0.8rem; + text-align: center; } } .button:not(.hidden) { - margin-top: 40px; font-size: 13px; font-weight: 600; - padding: 7px 10px; height: 43px; + margin-top: 40px; + padding: 7px 10px; @media (max-width: 900px) { padding: 10px 10px; diff --git a/resources/css/src/partials/_carriers-widget.scss b/resources/css/src/partials/_carriers-widget.scss index b0a507dd2..e2d2d6360 100644 --- a/resources/css/src/partials/_carriers-widget.scss +++ b/resources/css/src/partials/_carriers-widget.scss @@ -3,23 +3,23 @@ } [data-nt-carrier-remove] { - position: relative; - float: left; + background: none; + border: 0; + cursor: pointer; display: inline-block; + float: left; height: 36px; margin: 0 2px; - padding: 8px; - background: none; - border: 0; outline: none; - cursor: pointer; + padding: 8px; + position: relative; &::before { + color: #c5c5c5; content: "\f182"; font-family: dashicons; // stylelint-disable-line font-size: 20px; line-height: 1; - color: #c5c5c5; transition: color 0.2s; } @@ -43,29 +43,35 @@ flex-wrap: wrap; justify-content: center; margin: -10px; + + // Deprecated webhooks. + li[data-nt-button="webhook"], + li[data-nt-button="webhook_json"] { + display: none; + } } &__carrier { + box-sizing: border-box; display: flex; - width: 25%; - min-width: 258px; margin: 0; + min-width: 258px; padding: 10px; - box-sizing: border-box; + width: 25%; } &__carrier-link { - position: relative; - display: block; - width: 100%; - padding: 20px; - font-size: 0; - line-height: 0; - text-decoration: none; background-color: #fff; border: 1px solid #e5e5e5; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04) !important; + display: block; + font-size: 0; + line-height: 0; outline: none; + padding: 20px; + position: relative; + text-decoration: none; + width: 100%; .label-pro { left: -10px; @@ -83,8 +89,8 @@ height: 100px; svg { - width: auto; height: 100%; + width: auto; path { fill: #23282d; @@ -93,27 +99,27 @@ } &__carrier-title { - margin-top: 20px; - font-weight: 400; + color: #23282d; font-size: 20px; + font-weight: 400; line-height: (34 / 20); - color: #23282d; + margin-top: 20px; text-align: center; } &__carrier-overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - display: flex; - justify-content: center; align-items: center; background-color: #7dcc4c; + display: flex; + height: 100%; + justify-content: center; + left: 0; opacity: 0; - visibility: hidden; + position: absolute; + top: 0; transition: opacity 0.2s, visibility 0.2s; + visibility: hidden; + width: 100%; &.available { background-color: #434343; @@ -131,41 +137,41 @@ } &__carrier-overlay-icon { - position: relative; display: inline-block; - width: 30px; height: 30px; + position: relative; + width: 30px; &::before, &::after { + background-color: #fff; content: ""; position: absolute; - background-color: #fff; } &::before { - top: 50%; - left: 0; - width: 100%; height: 3px; + left: 0; + top: 50%; transform: translateY(-50%); + width: 100%; } &::after { - top: 0; - left: 50%; - width: 3px; height: 100%; + left: 50%; + top: 0; transform: translateX(-50%); + width: 3px; } } &__carrier-overlay-title { - margin-top: 10px; - font-weight: 400; + color: #fff; font-size: 20px; + font-weight: 400; line-height: (34 / 20); - color: #fff; + margin-top: 10px; } /** @@ -177,34 +183,34 @@ } &__button-link { - display: block; - width: 100%; - padding: 20px; - font-size: 0; - line-height: 0; - text-align: center; - text-decoration: none; background-color: #fff; border: 1px solid #e5e5e5; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04) !important; box-sizing: border-box; + display: block; + font-size: 0; + line-height: 0; outline: none; + padding: 20px; + text-align: center; + text-decoration: none; transition: background-color 0.2s; + width: 100%; &:hover { background-color: rgba(#fff, 0.75); } &--less { - padding: 10px 20px; background-color: rgba(#fff, 0.5); + padding: 10px 20px; } } &__button-link-inner { - position: relative; display: inline-block; padding-left: 50px; + position: relative; #{$root}__button-link--less & { padding-left: 35px; @@ -212,39 +218,39 @@ } &__button-icon { + height: 30px; + left: 0; position: absolute; top: calc(50% - 15px); - left: 0; width: 30px; - height: 30px; #{$root}__button-link--less & { + height: 20px; top: calc(50% - 10px); width: 20px; - height: 20px; } &::before, &::after { + background-color: #23282d; content: ""; position: absolute; - background-color: #23282d; } &::before { - top: 50%; - left: 0; - width: 100%; height: 3px; + left: 0; + top: 50%; transform: translateY(-50%); + width: 100%; } &::after { - top: 0; - left: 50%; - width: 3px; height: 100%; + left: 50%; + top: 0; transform: translateX(-50%); + width: 3px; } &--close { @@ -253,11 +259,20 @@ } &__button-title { - font-weight: 400; + color: #23282d; font-size: 20px; + font-weight: 400; line-height: (34 / 20); - color: #23282d; - text-align: center; overflow: hidden; + text-align: center; + } +} + +// Deprecated Webhooks +#notification-carrier-webhook-box, +#notification-carrier-webhook_json-box { + .deprecated td { + background-color: #fcf0f1; + border-radius: 5px; } } diff --git a/resources/css/src/partials/_extensions.scss b/resources/css/src/partials/_extensions.scss index 839173945..3c66f5106 100644 --- a/resources/css/src/partials/_extensions.scss +++ b/resources/css/src/partials/_extensions.scss @@ -13,29 +13,29 @@ .action-links { .official { - margin-top: 3px; - display: inline-block; - box-sizing: border-box; - text-align: center; - padding: 3px 10px; - width: 100%; - color: #fff; background: #0073aa; border-radius: 4px; + box-sizing: border-box; + color: #fff; + display: inline-block; + margin-top: 3px; + padding: 3px 10px; + text-align: center; text-transform: uppercase; + width: 100%; } .discount { - margin-top: 3px; - display: inline-block; - box-sizing: border-box; - text-align: center; - padding: 3px 10px; - width: 100%; - color: #fff; background: #00aa4c; border-radius: 4px; + box-sizing: border-box; + color: #fff; + display: inline-block; + margin-top: 3px; + padding: 3px 10px; + text-align: center; text-transform: uppercase; + width: 100%; } } @@ -49,15 +49,15 @@ .plugin-card-bottom { .column-license { - float: left; clear: left; + float: left; width: 65%; width: calc(100% - 180px); } .column-submit { - float: right; clear: right; + float: right; max-width: 180px; } diff --git a/resources/css/src/partials/_global.scss b/resources/css/src/partials/_global.scss index da784cdc6..c3f7e0b70 100644 --- a/resources/css/src/partials/_global.scss +++ b/resources/css/src/partials/_global.scss @@ -20,95 +20,94 @@ .selectize-control.multi .selectize-input { [data-value] { - text-shadow: none; background-color: #eee; background-image: linear-gradient(to bottom, #f4f4f4, #dfdfdf); + text-shadow: none; &.active { background-color: #ddd; background-image: linear-gradient(to bottom, #eee, #cfcfcf); - color: #535353; border: 1px solid #c0c0c0; + color: #535353; } } > div { - color: #535353; border: 1px solid #c0c0c0; + color: #535353; } } - /** * On/Off switch */ .onoffswitch { position: relative; - width: 66px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; + width: 66px; .onoffswitch-label { + border-radius: 50px; + cursor: pointer; display: block; overflow: hidden; - cursor: pointer; - border-radius: 50px; } .onoffswitch-inner { display: block; - width: 200%; margin-left: -100%; transition: margin 0.2s ease-in 0s; + width: 200%; &::before, &::after { + box-sizing: border-box; + color: #fff; display: block; float: left; - width: 50%; - height: 30px; - padding: 0; - line-height: 30px; - font-size: 12px; - color: #fff; font-family: Trebuchet, Arial, sans-serif; + font-size: 12px; font-weight: 600; - box-sizing: border-box; + height: 30px; + line-height: 30px; + padding: 0; + width: 50%; } &::before { - content: "ON"; - padding-left: 12px; background-color: #eee; color: #707070; + content: "ON"; + padding-left: 12px; } &::after { - content: "OFF"; - padding-right: 8px; background-color: #eee; color: #707070; + content: "OFF"; + padding-right: 8px; text-align: right; } } .onoffswitch-switch { + background: #a1a1a1; + border: 2px solid #999; + border-radius: 50px; + bottom: 0; display: block; - width: 19px; margin: 4px; - background: #a1a1a1; position: absolute; - top: 0; - bottom: 0; right: 34px; - border: 2px solid #999; - border-radius: 50px; + top: 0; transition: all 0.2s ease-in 0s; + width: 19px; } &.loading { @@ -124,8 +123,8 @@ } 100% { - transform: scale(1); opacity: 0; + transform: scale(1); } } @@ -141,9 +140,9 @@ } .onoffswitch-switch { - right: 0; background-color: #7dcc4c; border-color: #7dcc4c; + right: 0; } } @@ -156,9 +155,9 @@ .button.button-icon { .dashicons { + font-size: 18px; position: relative; top: 3px; - font-size: 18px; } } diff --git a/resources/css/src/partials/_logs.scss b/resources/css/src/partials/_logs.scss index f9a3e5bd6..f8cbb4d23 100644 --- a/resources/css/src/partials/_logs.scss +++ b/resources/css/src/partials/_logs.scss @@ -2,6 +2,97 @@ * Log styles */ +%notification-logs { + + .log-item { + border: 1px solid #ececec; + border-radius: 3px; + box-shadow: 1px 1px 1px #f9f9f9; + margin-bottom: 1em; + + .log-handle { + cursor: pointer; + overflow: auto; + + .carrier-name { + background: #ececec; + display: inline-block; + font-weight: 600; + min-width: 120px; + padding: 10px; + } + + .notification-title { + display: inline-block; + padding: 10px; + } + + .source-label { + background: #ececec; + border-radius: 6px; + bottom: 2px; + font-size: 10px; + padding: 2px 6px; + position: relative; + } + + .date { + display: inline-block; + float: right; + padding: 10px; + + abbr { + text-decoration: none; + } + + } + + .indicator { + display: inline-block; + float: right; + padding: 8px 10px; + } + + @media ( max-width: 768px ) { + + .carrier-name { + background: none; + width: 100%; + } + + .indicator { + display: none; + } + + } + + } + + .log-body { + max-height: 0; + overflow: hidden; + overflow-y: scroll; + transition: max-height 0.3s; + + .body-content { + border-top: 1px solid #ececec; + padding: 10px; + } + + } + + &.expanded { + + .log-body { + max-height: 400px; + } + + } + + } + +} + .notification-settings { /* stylelint-disable */ @@ -18,9 +109,9 @@ } td { + overflow-wrap: break-word; padding: 15px 0; word-wrap: break-word; - overflow-wrap: break-word; table { margin-bottom: 1rem; @@ -44,8 +135,8 @@ } caption { - text-align: left; font-weight: 600; + text-align: left; } } @@ -56,35 +147,35 @@ .error-logs { - @extend .notification-logs; + @extend %notification-logs; .log-handle { .message { - padding: 10px; - display: inline-block; background: #ececec; - min-width: 90px; - font-weight: 600; + display: inline-block; float: left; + font-weight: 600; + min-width: 90px; + padding: 10px; } .component { - padding: 10px; display: inline-block; float: left; + padding: 10px; } .excerpt { - padding: 10px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 60%; + color: #ccc; display: inline-block; float: left; - color: #ccc; + max-width: 60%; + overflow: hidden; + padding: 10px; + text-overflow: ellipsis; transition: opacity 0.3s; + white-space: nowrap; } } @@ -105,92 +196,7 @@ .notification-logs { - .log-item { - border: 1px solid #ececec; - border-radius: 3px; - box-shadow: 1px 1px 1px #f9f9f9; - margin-bottom: 1em; - - .log-handle { - cursor: pointer; - overflow: auto; - - .carrier-name { - padding: 10px; - display: inline-block; - background: #ececec; - min-width: 120px; - font-weight: 600; - } - - .notification-title { - padding: 10px; - display: inline-block; - } - - .source-label { - font-size: 10px; - background: #ececec; - padding: 2px 6px; - border-radius: 6px; - position: relative; - bottom: 2px; - } - - .date { - padding: 10px; - display: inline-block; - float: right; - - abbr { - text-decoration: none; - } - - } - - .indicator { - padding: 8px 10px; - display: inline-block; - float: right; - } - - @media ( max-width: 768px ) { - - .carrier-name { - background: none; - width: 100%; - } - - .indicator { - display: none; - } - - } - - } - - .log-body { - max-height: 0; - overflow: hidden; - overflow-y: scroll; - transition: max-height 0.3s; - - .body-content { - border-top: 1px solid #ececec; - padding: 10px; - } - - } - - &.expanded { - - .log-body { - max-height: 400px; - } - - } - - } + @extend %notification-logs; } @@ -198,21 +204,21 @@ text-align: right; a.page-numbers { + -webkit-appearance: none; + border: 1px solid #ececec; + border-radius: 3px; + box-sizing: border-box; + color: #555; + cursor: pointer; display: inline-block; - text-decoration: none; font-size: 13px; - line-height: 26px; height: 28px; + line-height: 26px; margin: 0; padding: 0 10px 1px; - cursor: pointer; - -webkit-appearance: none; - border-radius: 3px; - white-space: nowrap; - box-sizing: border-box; - color: #555; - border: 1px solid #ececec; + text-decoration: none; vertical-align: top; + white-space: nowrap; &:hover { background: #ececec; diff --git a/resources/css/src/partials/_metabox.scss b/resources/css/src/partials/_metabox.scss index d66a1f3fc..8210984f2 100644 --- a/resources/css/src/partials/_metabox.scss +++ b/resources/css/src/partials/_metabox.scss @@ -5,8 +5,8 @@ #notification_merge_tags .inside { /* stylelint-disable-line */ .notification-search-merge-tags { - margin-top: 10px; margin-bottom: 20px; + margin-top: 10px; } h2 { @@ -14,28 +14,28 @@ padding: 0; a { - position: relative; - display: block; - padding: 12px 0; border-bottom: 1px solid rgba(229, 229, 229, 0.6); - font-weight: 600; - text-transform: uppercase; color: #636363; - text-decoration: none; + display: block; + font-weight: 600; max-width: 100%; - text-overflow: ellipsis; overflow: hidden; + padding: 12px 0; + position: relative; + text-decoration: none; + text-overflow: ellipsis; + text-transform: uppercase; &::after { + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #636363; content: ""; + height: 0; position: absolute; - top: 20px; right: 10px; + top: 20px; width: 0; - height: 0; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #636363; } } } @@ -44,9 +44,9 @@ li { + margin-bottom: 20px; position: relative; width: 100%; - margin-bottom: 20px; .intro { width: calc(100% - 30px); @@ -56,66 +56,65 @@ font-weight: 600; margin-bottom: 5px; max-width: 100%; - text-overflow: ellipsis; overflow: hidden; + text-overflow: ellipsis; } code { - display: inline-block; + box-sizing: border-box; cursor: pointer; - word-wrap: nowrap; + display: inline-block; max-width: 100%; - text-overflow: ellipsis; overflow: hidden; - box-sizing: border-box; + text-overflow: ellipsis; + word-wrap: nowrap; } } - .question-mark { + background-color: #888; + border-radius: 50%; + color: #fff; + cursor: pointer; + float: right; font-size: 14px; + height: 20px; + line-height: 20px; position: absolute; - float: right; right: 0; + text-align: center; top: 10px; - border-radius: 50%; - background-color: #888; - color: #fff; width: 20px; - height: 20px; - text-align: center; - line-height: 20px; - cursor: pointer; .description { - position: absolute; - visibility: hidden; box-shadow: 0 0 8px #eaeaea; + min-width: 200px; + position: absolute; right: -3px; + text-align: left; top: 160%; + visibility: hidden; z-index: 15; - min-width: 200px; - text-align: left; .description-container { - border: 1px solid #e5e5e5; background: #fff; + border: 1px solid #e5e5e5; color: #333; - padding: 10px; font-size: 12px; line-height: 16px; + padding: 10px; position: relative; &::after, &::before { - bottom: 100%; - right: 0; border: solid transparent; + bottom: 100%; content: " "; height: 0; - width: 0; - position: absolute; pointer-events: none; + position: absolute; + right: 0; + width: 0; z-index: 18; } @@ -165,8 +164,8 @@ body.post-type-notification { padding: 0; .misc-pub-section { - padding: 10px; overflow: auto; + padding: 10px; .row-label { float: left; diff --git a/resources/css/src/partials/_pretty-select.scss b/resources/css/src/partials/_pretty-select.scss index 15f8fc22d..ed179a30e 100644 --- a/resources/css/src/partials/_pretty-select.scss +++ b/resources/css/src/partials/_pretty-select.scss @@ -9,10 +9,10 @@ } .item { + max-width: 80%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - max-width: 80%; } } diff --git a/resources/css/src/partials/_settings.scss b/resources/css/src/partials/_settings.scss index debbc7f00..3abff1d38 100644 --- a/resources/css/src/partials/_settings.scss +++ b/resources/css/src/partials/_settings.scss @@ -9,13 +9,13 @@ } .box { - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); - border: 1px solid #e5e5e5; background: #fff; + border: 1px solid #e5e5e5; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); + box-sizing: border-box; color: #555; - padding: 15px; margin: 0 0 2rem 0; - box-sizing: border-box; + padding: 15px; h3 { margin-top: 0; @@ -23,8 +23,8 @@ } .setting-col { - margin-left: 320px; font-size: 15px; + margin-left: 320px; @include mobile { margin-left: 0; @@ -42,25 +42,29 @@ position: relative; a { - text-decoration: none; cursor: pointer; + text-decoration: none; + + &:focus { + box-shadow: none; + } } &::after { + border-radius: 50%; content: "\f142"; display: inline-block; font: 400 20px/1 dashicons, sans-serif; - speak: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; position: absolute; - top: 5px; right: 0; - width: 20px; - border-radius: 50%; + speak: none; text-indent: -1px; - transition: all 0.3s ease-in-out; + top: 5px; transform: rotate(180deg); + transition: all 0.3s ease-in-out; + width: 20px; } &.open { @@ -72,9 +76,9 @@ } h3 { + border-bottom: 1px solid #e4e4e4; font-weight: 400; margin: 4px 0; - border-bottom: 1px solid #e4e4e4; padding-bottom: 16px; } @@ -104,8 +108,8 @@ } thead td { - font-weight: 600; background: #f9f9f9; + font-weight: 600; } } @@ -117,10 +121,10 @@ } .menu-col { - width: 280px; - margin-right: 40px; float: left; + margin-right: 40px; padding-left: 0; + width: 280px; @include mobile { float: none; @@ -132,17 +136,18 @@ padding: 15px 0; li { - padding-left: 15px; display: block; margin: 12px 0; + padding-left: 15px; + /* stylelint-disable-next-line no-descending-specificity */ a { - font-size: 18px; - text-decoration: none; - text-transform: uppercase; color: #555; display: block; + font-size: 18px; padding: 6px 0; + text-decoration: none; + text-transform: uppercase; } &.current { @@ -176,22 +181,22 @@ .selectize-control.multi .selectize-input { [data-value] { - text-shadow: none; background-color: #eee; background-image: linear-gradient(to bottom, #f4f4f4, #dfdfdf); + text-shadow: none; &.active { background-color: #ddd; background-image: linear-gradient(to bottom, #eee, #cfcfcf); - color: #535353; border: 1px solid #c0c0c0; + color: #535353; } } > div { - color: #535353; border: 1px solid #c0c0c0; + color: #535353; } } diff --git a/resources/css/src/partials/_upsell.scss b/resources/css/src/partials/_upsell.scss index 4c4b280b3..e70f4e1b9 100644 --- a/resources/css/src/partials/_upsell.scss +++ b/resources/css/src/partials/_upsell.scss @@ -13,7 +13,7 @@ } .notification-upsell-banner { - padding: 10px; background: #d8eede; border-radius: 10px; + padding: 10px; } diff --git a/resources/images/notification-pro.svg b/resources/images/notification-pro.svg new file mode 100644 index 000000000..b6effac06 --- /dev/null +++ b/resources/images/notification-pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/js/src/component/carriers-widget.js b/resources/js/src/component/carriers-widget.js index a583b2857..c952c412a 100644 --- a/resources/js/src/component/carriers-widget.js +++ b/resources/js/src/component/carriers-widget.js @@ -12,18 +12,18 @@ class CarriersWidget { setVars() { this.atts = { - carrier: "data-nt-carrier", // single carrier wrapper - carrierActiveInput: "data-nt-carrier-input-active", // input inside carrier with activated value - carrierEnableInput: "data-nt-carrier-input-enable", // input inside carrier with enabled value - carrierSwitch: "data-nt-carrier-input-switch", // input inside carrier with switch value - carrierRemoveButton: "data-nt-carrier-remove", // remove button inside carrier - widget: "data-nt-widget", // widget with buttons for adding carriers, "add" and "abort" - buttons: "data-nt-buttons", // wrapper with buttons - button: "data-nt-button", // button to adding carrier - buttonLink: "data-nt-button-link", // link inside button - add: "data-nt-widget-add", // button to showing buttons - abort: "data-nt-widget-abort", // button to hiding buttons - hidden: "data-nt-hidden" // added to hidden elements + carrier: 'data-nt-carrier', // single carrier wrapper + carrierActiveInput: 'data-nt-carrier-input-active', // input inside carrier with activated value + carrierEnableInput: 'data-nt-carrier-input-enable', // input inside carrier with enabled value + carrierSwitch: 'data-nt-carrier-input-switch', // input inside carrier with switch value + carrierRemoveButton: 'data-nt-carrier-remove', // remove button inside carrier + widget: 'data-nt-widget', // widget with buttons for adding carriers, "add" and "abort" + buttons: 'data-nt-buttons', // wrapper with buttons + button: 'data-nt-button', // button to adding carrier + buttonLink: 'data-nt-button-link', // link inside button + add: 'data-nt-widget-add', // button to showing buttons + abort: 'data-nt-widget-abort', // button to hiding buttons + hidden: 'data-nt-hidden', // added to hidden elements }; this.wrapper = document.querySelector(`[${this.atts.widget}]`); @@ -61,39 +61,39 @@ class CarriersWidget { this.settings = { classes: { - carrierDisabledClass: "closed" + carrierDisabledClass: 'closed', }, scrollTime: 1000, - scrollOffset: 50 + scrollOffset: 50, }; return true; } setEvents() { - this.buttonAdd.addEventListener("click", e => { + this.buttonAdd.addEventListener('click', (e) => { e.preventDefault(); this.showButtons(); }); - this.buttonAbort.addEventListener("click", e => { + this.buttonAbort.addEventListener('click', (e) => { e.preventDefault(); this.hideButtons(); }); const { length } = this.carriers; for (let i = 0; i < length; i++) { - this.buttons[i].addEventListener("click", e => { + this.buttons[i].addEventListener('click', (e) => { e.preventDefault(); this.addCarrier(i); }); - this.carrierHndles[i].addEventListener("click", e => { + this.carrierHndles[i].addEventListener('click', (e) => { e.stopImmediatePropagation(); }); - this.carrierRemoveButtons[i].addEventListener("click", e => { + this.carrierRemoveButtons[i].addEventListener('click', (e) => { e.preventDefault(); this.removeCarrier(i); }); - this.carrierSwitches[i].addEventListener("change", e => { + this.carrierSwitches[i].addEventListener('change', (e) => { this.toggleCarrier(i, e.target.checked); }); } @@ -127,7 +127,7 @@ class CarriersWidget { removeCarrier(index) { this.carriers[index].setAttribute(this.atts.hidden, true); - this.carrierActiveInputs[index].value = ""; + this.carrierActiveInputs[index].value = ''; this.buttons[index].removeAttribute(this.atts.hidden); this.toggleCarrier(index, false); @@ -144,12 +144,12 @@ class CarriersWidget { this.carriers[index].classList.add( this.settings.classes.carrierDisabledClass ); - this.carrierEnableInputs[index].value = ""; + this.carrierEnableInputs[index].value = ''; } this.carrierSwitches[index].checked = status; notification.hooks.doAction( - "notification.carrier.toggled", + 'notification.carrier.toggled', $(this.carriers[index]) ); } @@ -173,9 +173,9 @@ class CarriersWidget { } scrollToCarrier(index) { - $("html, body").animate( + $('html, body').animate( { - scrollTop: this.getDomElementOffset(this.carriers[index]) + scrollTop: this.getDomElementOffset(this.carriers[index]), }, this.settings.scrollTime ); @@ -189,6 +189,6 @@ class CarriersWidget { } } -$(document).ready(function() { +$(document).ready(function () { new CarriersWidget(); }); diff --git a/resources/js/src/component/import-export.js b/resources/js/src/component/import-export.js index 37a5ef9c9..f23fc8b8d 100644 --- a/resources/js/src/component/import-export.js +++ b/resources/js/src/component/import-export.js @@ -1,49 +1,47 @@ -/* global notification, jQuery, FormData */ -(function($) { +/* global notification, jQuery */ + +(function ($) { const __ = wp.i18n.__; - $(document).ready(function() { - const $button = $("#export-notifications .button"); + $(document).ready(function () { + const $button = $('#export-notifications .button'); const $items = $( '#export-notifications ul li input[type="checkbox"]:not(.select-all)' ); - const link = $button.prop("href"); + const link = $button.prop('href'); function getSelectedItems() { const items = []; - $.each($items, function(index, item) { + $.each($items, function (index, item) { const $item = $(item); - if ($item.is(":checked")) { + if ($item.is(':checked')) { items.push($item.val()); } }); return items.join(); } - $('#export-notifications input[type="checkbox"]').change(function() { - if ($(this).hasClass("select-all")) { - if ($(this).is(":checked")) { - $items.prop("checked", true); + $('#export-notifications input[type="checkbox"]').change(function () { + if ($(this).hasClass('select-all')) { + if ($(this).is(':checked')) { + $items.prop('checked', true); } else { - $items.prop("checked", false); + $items.prop('checked', false); } } - $button.prop("href", link + getSelectedItems()); + $button.prop('href', link + getSelectedItems()); }); }); - $(document).ready(function() { - const $button = $("#import-notifications .button"); + $(document).ready(function () { + const $button = $('#import-notifications .button'); const $file = $('#import-notifications input[type="file"]'); let files = []; - const $message = $("#import-notifications .message"); + const $message = $('#import-notifications .message'); function clearMessage() { - $message - .removeClass("success") - .removeClass("error") - .text(""); + $message.removeClass('success').removeClass('error').text(''); } function addMessage(type, message) { @@ -51,26 +49,26 @@ $message.addClass(type).text(message); } - $file.on("change", function(event) { + $file.on('change', function (event) { files = event.target.files; - $.each(files, function(key, value) { - if ("application/json" !== value.type) { + $.each(files, function (key, value) { + if ('application/json' !== value.type) { addMessage( - "error", + 'error', __( - "Please upload only valid JSON files", - "notification" + 'Please upload only valid JSON files', + 'notification' ) ); - $file.val(""); + $file.val(''); } else { clearMessage(); } }); }); - $button.on("click", function(event) { - if ("true" === $button.data("processing")) { + $button.on('click', function (event) { + if ('true' === $button.data('processing')) { return false; } @@ -78,37 +76,37 @@ const data = new FormData(); - $.each(files, function(key, value) { + $.each(files, function (key, value) { data.append(key, value); }); - data.append("action", "notification_import_json"); - data.append("type", "notifications"); - data.append("nonce", $button.data("nonce")); + data.append('action', 'notification_import_json'); + data.append('type', 'notifications'); + data.append('nonce', $button.data('nonce')); - addMessage("neutral", __("Importing data...", "notification")); - $button.data("processing", "true"); + addMessage('neutral', __('Importing data…', 'notification')); + $button.data('processing', 'true'); $.ajax({ url: notification.ajaxurl, - type: "POST", + type: 'POST', data, cache: false, - dataType: "json", + dataType: 'json', processData: false, contentType: false, success(response) { if (response.success) { - addMessage("success", response.data); - $file.val(""); + addMessage('success', response.data); + $file.val(''); } else { - addMessage("error", response.data); + addMessage('error', response.data); } - $button.data("processing", "false"); + $button.data('processing', 'false'); }, error(jqXHR, textStatus, errorThrown) { - addMessage("error", errorThrown); - } + addMessage('error', errorThrown); + }, }); }); }); diff --git a/resources/js/src/component/logs.js b/resources/js/src/component/logs.js index 8d74388d8..080a33203 100644 --- a/resources/js/src/component/logs.js +++ b/resources/js/src/component/logs.js @@ -1,29 +1,27 @@ /* global jQuery */ -(function($) { - $(document).ready(function() { - $(".log-container .log-item .log-handle").on("click", function(event) { +(function ($) { + $(document).ready(function () { + $('.log-container .log-item .log-handle').on('click', function (event) { event.preventDefault(); + $(this).parent().toggleClass('expanded'); $(this) - .parent() - .toggleClass("expanded"); - $(this) - .find(".indicator") - .toggleClass("dashicons-arrow-down dashicons-arrow-up"); + .find('.indicator') + .toggleClass('dashicons-arrow-down dashicons-arrow-up'); }); }); })(jQuery); -(function($) { - $(document).ready(function() { +(function ($) { + $(document).ready(function () { function toggleSuppressingSetting() { const $log = $( - "#notification-setting-debugging-settings-debug_log" + '#notification-setting-debugging-settings-debug_log' ); const $suppressing = $( - ".notification-settings .field-debug_suppressing" + '.notification-settings .field-debug_suppressing' ); - if ($log.is(":checked")) { + if ($log.is(':checked')) { $suppressing.show(); } else { $suppressing.hide(); @@ -32,7 +30,7 @@ toggleSuppressingSetting(); - $("#notification-setting-debugging-settings-debug_log").change( + $('#notification-setting-debugging-settings-debug_log').change( toggleSuppressingSetting ); }); diff --git a/resources/js/src/component/mergetag.js b/resources/js/src/component/mergetag.js index dec9de9d4..bddbd198b 100644 --- a/resources/js/src/component/mergetag.js +++ b/resources/js/src/component/mergetag.js @@ -1,94 +1,93 @@ /* eslint no-alert: 0 */ /* global notification, jQuery, ajaxurl, alert */ -import ClipboardJS from "clipboard"; -import "jquery-collapse/src/jquery.collapse.js"; +import ClipboardJS from 'clipboard'; +import 'jquery-collapse/src/jquery.collapse.js'; -(function($) { +(function ($) { const __ = wp.i18n.__; - $(document).ready(function() { + $(document).ready(function () { // Copy Merge Tag. const mergeTagClipboard = new ClipboardJS( - "code.notification-merge-tag" + 'code.notification-merge-tag' ); - mergeTagClipboard.on("success", function(e) { + mergeTagClipboard.on('success', function (e) { const $code = $(e.trigger), tag = $code.text(); notification.hooks.doAction( - "notification.merge_tag.copied", + 'notification.merge_tag.copied', tag, $code ); - $code.text(__("Copied", "notification")); + $code.text(__('Copied', 'notification')); - setTimeout(function() { + setTimeout(function () { $code.text(tag); }, 800); }); // Initialize accordion. - let collapse = $(".notification_merge_tags_accordion").collapse(); + let collapse = $('.notification_merge_tags_accordion').collapse(); // Swap Merge Tags list for new Trigger. - notification.hooks.addAction("notification.trigger.changed", function( - $trigger - ) { - const triggerSlug = $trigger.val(); - - const data = { - action: "get_merge_tags_for_trigger", - _ajax_nonce: notification.csrfToken, - trigger_slug: triggerSlug - }; - - $.post(ajaxurl, data, function(response) { - if (response.success === false) { - alert(response.data); - } else { - $("#notification_merge_tags .inside").html(response.data); - collapse = $( - ".notification_merge_tags_accordion" - ).collapse(); - } - }); - }); + notification.hooks.addAction( + 'notification.trigger.changed', + function ($trigger) { + const triggerSlug = $trigger.val(); + + const data = { + action: 'get_merge_tags_for_trigger', + _ajax_nonce: notification.csrfToken, + trigger_slug: triggerSlug, + }; + + $.post(ajaxurl, data, function (response) { + if (response.success === false) { + alert(response.data); + } else { + $('#notification_merge_tags .inside').html( + response.data + ); + collapse = $( + '.notification_merge_tags_accordion' + ).collapse(); + } + }); + } + ); // Search Merge Tags. - $("body").on("keyup", "#notification-search-merge-tags", function() { - const val = $(this) - .val() - .toLowerCase(); + $('body').on('keyup', '#notification-search-merge-tags', function () { + const val = $(this).val().toLowerCase(); if ($(this).val().length > 0) { - collapse.trigger("open"); + collapse.trigger('open'); $( - ".notification_merge_tags_accordion h2, .notification_merge_tags_accordion .tags-group" + '.notification_merge_tags_accordion h2, .notification_merge_tags_accordion .tags-group' ).hide(); - $(".inside li").each(function() { + $('.inside li').each(function () { $(this).hide(); const text = $(this) - .find(".intro code") + .find('.intro code') .text() .toLowerCase(); if (-1 !== text.indexOf(val)) { $(this).show(); - const parentClass = $(this) - .parents("ul") - .data("group"); - $("[data-group=" + parentClass + "]").show(); + const parentClass = $(this).parents('ul').data('group'); + $('[data-group=' + parentClass + ']').show(); } }); } else { - $(".notification_merge_tags_accordion h2, .inside li").show(); - collapse.trigger("close"); + $('.notification_merge_tags_accordion h2, .inside li').show(); + collapse.trigger('close'); } }); }); diff --git a/resources/js/src/component/pretty-select.js b/resources/js/src/component/pretty-select.js index e2f462324..af095b855 100644 --- a/resources/js/src/component/pretty-select.js +++ b/resources/js/src/component/pretty-select.js @@ -1,11 +1,11 @@ /* global jQuery */ -import "selectize"; +import 'selectize'; -(function($) { - $(document).ready(function() { +(function ($) { + $(document).ready(function () { $( - ".notification-pretty-select:visible:not( repeater-select )" + '.notification-pretty-select:visible:not( repeater-select )' ).selectize(); }); })(jQuery); diff --git a/resources/js/src/component/remove-confirmation.js b/resources/js/src/component/remove-confirmation.js index f2d642367..0d1cab272 100644 --- a/resources/js/src/component/remove-confirmation.js +++ b/resources/js/src/component/remove-confirmation.js @@ -1,15 +1,15 @@ /* eslint no-alert: 0 */ /* global jQuery, confirm */ -(function($) { +(function ($) { const __ = wp.i18n.__; - $(document).ready(function() { - $(".notification-delete-post").click(function(e) { + $(document).ready(function () { + $('.notification-delete-post').click(function (e) { if ( !confirm( __( - "Are you sure you want to permanently delete this notification?", - "notification" + 'Are you sure you want to permanently delete this notification?', + 'notification' ) ) ) { diff --git a/resources/js/src/component/settings.js b/resources/js/src/component/settings.js index 3ec67153c..909c69bf4 100644 --- a/resources/js/src/component/settings.js +++ b/resources/js/src/component/settings.js @@ -1,24 +1,24 @@ /* global jQuery, jQueryCollapse */ -import "selectize"; -import "jquery-collapse/src/jquery.collapse.js"; +import 'selectize'; +import 'jquery-collapse/src/jquery.collapse.js'; -(function($) { - $(document).ready(function() { - $(".underdev-settings .pretty-select").selectize(); - new jQueryCollapse($(".underdev-settings .setting-group"), { +(function ($) { + $(document).ready(function () { + $('.underdev-settings .pretty-select').selectize(); + new jQueryCollapse($('.underdev-settings .setting-group'), { open() { this.slideDown(100); }, close() { this.slideUp(100); - } + }, }); - $(".setting-group-header").click(function() { + $('.setting-group-header').click(function () { const wrapper = $(this) - .parents(".setting-group") - .find(".form-table"); - wrapper.trigger("toggle"); + .parents('.setting-group') + .find('.form-table'); + wrapper.trigger('toggle'); }); }); })(jQuery); diff --git a/resources/js/src/component/switch.js b/resources/js/src/component/switch.js index 5f25dfa97..6dc0e7e47 100644 --- a/resources/js/src/component/switch.js +++ b/resources/js/src/component/switch.js @@ -1,44 +1,44 @@ /* eslint no-alert: 0 */ /* global notification, jQuery, alert */ -(function($) { - $(document).ready(function() { - $(".column-switch .onoffswitch").on("click", function(event) { +(function ($) { + $(document).ready(function () { + $('.column-switch .onoffswitch').on('click', function (event) { const $switch = $(this), - postId = $switch.data("postid"); + postId = $switch.data('postid'); event.preventDefault(); notification.hooks.doAction( - "notification.status.changed", + 'notification.status.changed', $switch, postId ); }); - notification.hooks.addAction("notification.status.changed", function( - $switch, - postId - ) { - const status = !$switch.find("input").attr("checked"); + notification.hooks.addAction( + 'notification.status.changed', + function ($switch, postId) { + const status = !$switch.find('input').attr('checked'); - $switch.addClass("loading"); + $switch.addClass('loading'); - const data = { - action: "change_notification_status", - _ajax_nonce: notification.csrfToken, - post_id: postId, - status, - nonce: $switch.data("nonce") - }; + const data = { + action: 'change_notification_status', + _ajax_nonce: notification.csrfToken, + post_id: postId, + status, + nonce: $switch.data('nonce'), + }; - $.post(notification.ajaxurl, data, function(response) { - if (response.success === true) { - $switch.removeClass("loading"); - $switch.find("input").attr("checked", status); - } else { - alert(response.data); - } - }); - }); + $.post(notification.ajaxurl, data, function (response) { + if (response.success === true) { + $switch.removeClass('loading'); + $switch.find('input').attr('checked', status); + } else { + alert(response.data); + } + }); + } + ); }); })(jQuery); diff --git a/resources/js/src/component/sync.js b/resources/js/src/component/sync.js index 59de0869f..82873809a 100644 --- a/resources/js/src/component/sync.js +++ b/resources/js/src/component/sync.js @@ -1,35 +1,35 @@ /* eslint no-alert: 0 */ /* global notification, jQuery, alert */ -(function($) { +(function ($) { const __ = wp.i18n.__; - $(document).ready(function() { - $(".group-sync .field-actions .notification-sync-all").on( - "click", - function(event) { + $(document).ready(function () { + $('.group-sync .field-actions .notification-sync-all').on( + 'click', + function (event) { event.preventDefault(); const $masterButton = $(this); - if ($masterButton.attr("disabled")) { + if ($masterButton.attr('disabled')) { return false; } - $masterButton.attr("disabled", true); + $masterButton.attr('disabled', true); - $(".group-sync .field-notifications tr").each(function( + $('.group-sync .field-notifications tr').each(function ( num, notificationRow ) { const $button = $(notificationRow).find( - ".button.notification-sync" + '.button.notification-sync' ); if ( - $button.data("sync-type") === $masterButton.data("type") + $button.data('sync-type') === $masterButton.data('type') ) { notification.hooks.doAction( - "notification.sync.init", + 'notification.sync.init', $button ); } @@ -37,59 +37,60 @@ } ); - $(".group-sync .field-notifications td > .button.notification-sync").on( - "click", - function(event) { + $('.group-sync .field-notifications td > .button.notification-sync').on( + 'click', + function (event) { event.preventDefault(); - notification.hooks.doAction("notification.sync.init", $(this)); + notification.hooks.doAction('notification.sync.init', $(this)); } ); - notification.hooks.addAction("notification.sync.init", function( - $button - ) { - if ($button.attr("disabled")) { - return false; - } + notification.hooks.addAction( + 'notification.sync.init', + function ($button) { + if ($button.attr('disabled')) { + return false; + } - const syncType = $button.data("sync-type"), - hash = $button.data("sync-hash"), - nonce = $button.data("nonce"); + const syncType = $button.data('sync-type'), + hash = $button.data('sync-hash'), + nonce = $button.data('nonce'); - $button.attr("disabled", true); - $button.text(__("Synchronizing...", "notification")); + $button.attr('disabled', true); + $button.text(__('Synchronizing…', 'notification')); - const data = { - action: "notification_sync", - _ajax_nonce: notification.csrfToken, - hash, - type: syncType, - nonce - }; + const data = { + action: 'notification_sync', + _ajax_nonce: notification.csrfToken, + hash, + type: syncType, + nonce, + }; - $.post(notification.ajaxurl, data, function(response) { - if (response.success === true) { - const $notificationRow = $button.parent().parent(); + $.post(notification.ajaxurl, data, function (response) { + if (response.success === true) { + const $notificationRow = $button.parent().parent(); - if ("wordpress" === syncType) { - const $titleTd = $notificationRow.find("td.title"); - const $link = $("", { - text: $titleTd.text(), - href: response.data - }); - $titleTd.html($link); - } + if ('wordpress' === syncType) { + const $titleTd = $notificationRow.find('td.title'); + const $link = $('', { + text: $titleTd.text(), + href: response.data, + }); + $titleTd.html($link); + } - $notificationRow - .find("td.status") - .text(__("Synchronized", "notification")); - $button.remove(); - } else { - alert(response.data); - } + $notificationRow + .find('td.status') + .text(__('Synchronized', 'notification')); + $button.remove(); + } else { + alert(response.data); + } - $button.attr("disabled", false); - }); - }); + $button.attr('disabled', false); + }); + } + ); }); })(jQuery); diff --git a/resources/js/src/component/trigger.js b/resources/js/src/component/trigger.js index 60f492886..2535ae919 100644 --- a/resources/js/src/component/trigger.js +++ b/resources/js/src/component/trigger.js @@ -1,36 +1,36 @@ /* global notification, jQuery */ -import "selectize"; +import 'selectize'; -(function($) { - $(document).ready(function() { - $("#notification_trigger_select").selectize({ +(function ($) { + $(document).ready(function () { + $('#notification_trigger_select').selectize({ render: { item(item) { return ( - "
" + - item.text.replace(/\[\[(.*)\]\]/g, "") + - "
" + '
' + + item.text.replace(/\[\[(.*)\]\]/g, '') + + '
' ); }, option(item) { return ( - "
" + + '
' + item.text.replace( /(.*)\[\[(.*)\]\]/g, '$1$2' ) + - "
" + '
' ); - } - } + }, + }, }); - $("#notification_trigger_select") + $('#notification_trigger_select') .selectize() - .change(function() { + .change(function () { notification.hooks.doAction( - "notification.trigger.changed", + 'notification.trigger.changed', $(this) ); }); diff --git a/resources/js/src/component/wizard.js b/resources/js/src/component/wizard.js index 5cd2b27c8..1a8e66998 100644 --- a/resources/js/src/component/wizard.js +++ b/resources/js/src/component/wizard.js @@ -1,56 +1,58 @@ /* global jQuery */ -(function($) { - $(document).ready(function() { - let count = $("#notifications-wizard").data( - "selected-notifications-count" +(function ($) { + $(document).ready(function () { + let count = $('#notifications-wizard').data( + 'selected-notifications-count' ) - ? $("#notifications-wizard").data("selected-notifications-count") + ? $('#notifications-wizard').data('selected-notifications-count') : 0; - $("#notifications-wizard .notifications-tile").on("click", function(e) { - e.preventDefault(); + $('#notifications-wizard .notifications-tile').on( + 'click', + function (e) { + e.preventDefault(); - if ($(this).hasClass("selected")) { - $(this).removeClass("selected"); - const checkbox = $(this)[0].querySelector("input"); - checkbox.checked = false; - count = count - 1; - } else { - $(this).addClass("selected"); - const checkbox = $(this)[0].querySelector("input"); - checkbox.checked = true; - count = count + 1; - } - - $("#notifications-wizard").data( - "selected-notifications-count", - count - ); + if ($(this).hasClass('selected')) { + $(this).removeClass('selected'); + const checkbox = $(this)[0].querySelector('input'); + checkbox.checked = false; + count = count - 1; + } else { + $(this).addClass('selected'); + const checkbox = $(this)[0].querySelector('input'); + checkbox.checked = true; + count = count + 1; + } - if (count > 0) { - const text = wp.i18n.sprintf( - wp.i18n._n( - "Create %d notification", - "Create %d notifications", - count, - "notification" - ), + $('#notifications-wizard').data( + 'selected-notifications-count', count ); - $(".create-notifications") - .removeClass("hidden") - .text(text); - $(".skip-wizard") - .removeClass("button") - .removeClass("button-secondary") - .addClass("as-link"); - } else { - $(".create-notifications").addClass("hidden"); - $(".skip-wizard") - .addClass("button") - .addClass("button-secondary") - .removeClass("as-link"); + + if (count > 0) { + const text = wp.i18n.sprintf( + // translators: %d: number of notifications + wp.i18n._n( + 'Create %d notification', + 'Create %d notifications', + count, + 'notification' + ), + count + ); + $('.create-notifications').removeClass('hidden').text(text); + $('.skip-wizard') + .removeClass('button') + .removeClass('button-secondary') + .addClass('as-link'); + } else { + $('.create-notifications').addClass('hidden'); + $('.skip-wizard') + .addClass('button') + .addClass('button-secondary') + .removeClass('as-link'); + } } - }); + ); }); })(jQuery); diff --git a/resources/js/src/fields/code-editor.js b/resources/js/src/fields/code-editor.js index 384cb3675..fa1b55864 100644 --- a/resources/js/src/fields/code-editor.js +++ b/resources/js/src/fields/code-editor.js @@ -1,6 +1,6 @@ /* global _, notification, jQuery */ -(function($) { +(function ($) { function initCodeEditor($elem) { const editorSettings = wp.codeEditor.defaultSettings ? _.clone(wp.codeEditor.defaultSettings) @@ -8,17 +8,17 @@ editorSettings.codemirror = _.extend( {}, editorSettings.codemirror, - $elem.data("settings") + $elem.data('settings') ); let editor = wp.codeEditor.initialize($elem, editorSettings); // eslint-disable-line prefer-const - notification.hooks.addAction("notification.carrier.toggled", () => { + notification.hooks.addAction('notification.carrier.toggled', () => { editor.codemirror.refresh(); }); } - $(document).ready(function() { - $(".notification-code-editor-field").each(function() { + $(document).ready(function () { + $('.notification-code-editor-field').each(function () { initCodeEditor($(this)); }); }); diff --git a/resources/js/src/fields/color-picker.js b/resources/js/src/fields/color-picker.js index 1b058b98b..17f84ddcb 100644 --- a/resources/js/src/fields/color-picker.js +++ b/resources/js/src/fields/color-picker.js @@ -1,17 +1,17 @@ /* global notification, jQuery */ -(function($) { - $(document).ready(function() { - $(".notification-color-picker:visible").wpColorPicker(); +(function ($) { + $(document).ready(function () { + $('.notification-color-picker:visible').wpColorPicker(); }); notification.hooks.addAction( - "notification.carrier.repeater.row.added", - function(repeater) { + 'notification.carrier.repeater.row.added', + function (repeater) { const colorPickers = repeater.$el.querySelectorAll( - ".notification-color-picker" + '.notification-color-picker' ); - colorPickers.forEach(colorPicker => { + colorPickers.forEach((colorPicker) => { colorPicker.wpColorPicker(); }); } diff --git a/resources/js/src/fields/image.js b/resources/js/src/fields/image.js index e0cbc1e37..b3500e1ab 100644 --- a/resources/js/src/fields/image.js +++ b/resources/js/src/fields/image.js @@ -1,19 +1,19 @@ /* global jQuery */ -(function($) { +(function ($) { const __ = wp.i18n.__; - $(document).ready(function() { - const $imageField = $(".notification-image-field"); + $(document).ready(function () { + const $imageField = $('.notification-image-field'); let $clickedImageField = false; - $("body").on( - "click", - ".notification-image-field .image .preview, .notification-image-field .select-image", - function(event) { + $('body').on( + 'click', + '.notification-image-field .image .preview, .notification-image-field .select-image', + function (event) { event.preventDefault(); $clickedImageField = $(this).parents( - ".notification-image-field" + '.notification-image-field' ); if (wp.media.frames.frame) { @@ -22,57 +22,57 @@ } wp.media.frames.frame = wp.media({ - title: __("Select image", "notification"), + title: __('Select image', 'notification'), multiple: false, library: { - type: "image" + type: 'image', }, button: { - text: __("Use selected image", "notification") - } + text: __('Use selected image', 'notification'), + }, }); const mediaSetImage = () => { const selection = wp.media.frames.frame .state() - .get("selection"); + .get('selection'); if (!selection) { return; } - selection.each(function(attachment) { - $clickedImageField.addClass("selected"); + selection.each(function (attachment) { + $clickedImageField.addClass('selected'); $clickedImageField - .find(".image-input") + .find('.image-input') .val(attachment.id); $clickedImageField - .find(".image .preview") + .find('.image .preview') .attr( - "src", + 'src', attachment.attributes.sizes.thumbnail.url ); }); }; - wp.media.frames.frame.on("select", mediaSetImage); + wp.media.frames.frame.on('select', mediaSetImage); wp.media.frames.frame.open(); } ); - $imageField.find(".image .clear").on("click", function(event) { + $imageField.find('.image .clear').on('click', function (event) { event.preventDefault(); $(this) - .parents(".notification-image-field") - .removeClass("selected"); + .parents('.notification-image-field') + .removeClass('selected'); $(this) - .parents(".notification-image-field") - .find(".image-input") - .val(""); + .parents('.notification-image-field') + .find('.image-input') + .val(''); $(this) - .parents(".notification-image-field") - .find(".image .preview") - .attr("src", ""); + .parents('.notification-image-field') + .find('.image .preview') + .attr('src', ''); }); }); })(jQuery); diff --git a/resources/js/src/fields/repeater/components/inputs/select.js b/resources/js/src/fields/repeater/components/inputs/select.js index 5a1b5d15d..90a93a6ef 100644 --- a/resources/js/src/fields/repeater/components/inputs/select.js +++ b/resources/js/src/fields/repeater/components/inputs/select.js @@ -1,9 +1,9 @@ /* global jQuery, notification */ -import Vue from "vue/dist/vue.js"; -import { inputsHandler } from "../../mixins/inputsHandler"; -import { fieldHandler } from "../../mixins/fieldHandler"; +import Vue from 'vue/dist/vue.js'; +import { inputsHandler } from '../../mixins/inputsHandler'; +import { fieldHandler } from '../../mixins/fieldHandler'; -Vue.component("notification-select", { +Vue.component('notification-select', { template: ` `, - props: ["field", "type", "keyIndex", "subfield"], + props: ['field', 'type', 'keyIndex', 'subfield'], mixins: [inputsHandler, fieldHandler], data() { return { - selectized: null + selectized: null, }; }, mounted() { this.initSelectize(); notification.hooks.doAction( - "notification.carrier.select.initialized", + 'notification.carrier.select.initialized', this ); }, @@ -39,7 +39,7 @@ Vue.component("notification-select", { this.initSelectize(); notification.hooks.doAction( - "notification.carrier.select.changed", + 'notification.carrier.select.changed', this ); }, @@ -59,9 +59,9 @@ Vue.component("notification-select", { } }, initSelectize() { - if (this.$el.classList.contains("notification-pretty-select")) { + if (this.$el.classList.contains('notification-pretty-select')) { this.selectized = jQuery(this.$el).selectize(); } - } - } + }, + }, }); diff --git a/resources/js/src/fields/repeater/components/repeater/nestedSubField.js b/resources/js/src/fields/repeater/components/repeater/nestedSubField.js index dc75f523a..34dcb5c9a 100644 --- a/resources/js/src/fields/repeater/components/repeater/nestedSubField.js +++ b/resources/js/src/fields/repeater/components/repeater/nestedSubField.js @@ -1,8 +1,8 @@ -import Vue from "vue/dist/vue.js"; -import { fieldHandler } from "../../mixins/fieldHandler"; -import { repeaterHandler } from "../../mixins/repeaterHandler"; +import Vue from 'vue/dist/vue.js'; +import { fieldHandler } from '../../mixins/fieldHandler'; +import { repeaterHandler } from '../../mixins/repeaterHandler'; -Vue.component("nested-sub-field", { +Vue.component('nested-sub-field', { template: `