├── .distignore ├── .editorconfig ├── .github ├── FUNDING.yml └── workflows │ ├── create-release.yml │ ├── deploy.yml │ ├── populate-caches.yml │ ├── pull-request-lint.yml │ └── update-readme.yml ├── .gitignore ├── .pnp.cjs ├── .pnp.loader.mjs ├── .stylelintrc ├── .wordpress-org ├── banner-1544x500.png ├── banner-772x250.png ├── blueprints │ └── blueprint.json ├── icon-128x128.png ├── icon-256x256.png ├── screenshot-1.png ├── screenshot-2.png └── screenshot-3.png ├── .yarn └── cache │ ├── @babel-code-frame-npm-7.24.7-315a600a58-4812e94885.zip │ ├── @babel-helper-validator-identifier-npm-7.24.7-748889c8d2-86875063f5.zip │ ├── @babel-highlight-npm-7.24.7-d792bd8d9f-69b73f38cd.zip │ ├── @csstools-selector-specificity-npm-2.2.0-9e6097918b-84ae0e902e.zip │ ├── @lipemat-stylelint-config-npm-2.2.1-323919a3ca-9636b7ab25.zip │ ├── @nodelib-fs.scandir-npm-2.1.5-89c67370dd-6ab2a9b8a1.zip │ ├── @nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip │ ├── @nodelib-fs.walk-npm-1.2.8-b4a89da548-40033e33e9.zip │ ├── @types-minimist-npm-1.2.5-c85664a9d8-477047b606.zip │ ├── @types-normalize-package-data-npm-2.4.4-676a8ba353-65dff72b54.zip │ ├── @types-parse-json-npm-4.0.2-f87f65692e-5bf62eec37.zip │ ├── @wordpress-stylelint-config-npm-21.41.0-b2725e83ae-92fe746421.zip │ ├── ajv-npm-8.17.1-12ade7edc6-ee3c62162c.zip │ ├── ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip │ ├── ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip │ ├── ansi-styles-npm-4.3.0-245c7d42c7-b4494dfbfc.zip │ ├── array-union-npm-2.1.0-4e4852b221-5bee12395c.zip │ ├── arrify-npm-1.0.1-affafba9fe-745075dd4a.zip │ ├── astral-regex-npm-2.0.0-f30d866aab-876231688c.zip │ ├── balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip │ ├── balanced-match-npm-2.0.0-d9722af241-9a5caad6a2.zip │ ├── brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip │ ├── braces-npm-3.0.3-582c14023c-fad11a0d46.zip │ ├── callsites-npm-3.1.0-268f989910-072d17b6ab.zip │ ├── camelcase-keys-npm-6.2.2-d13777ec12-c1999f5b6d.zip │ ├── camelcase-npm-5.3.1-5db8af62c5-e6effce26b.zip │ ├── chalk-npm-2.4.2-3ea16dd91e-3d1d103433.zip │ ├── color-convert-npm-1.9.3-1fe690075e-ffa3190250.zip │ ├── color-convert-npm-2.0.1-79730e935b-fa00c91b43.zip │ ├── color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip │ ├── color-name-npm-1.1.4-025792b0ea-b044585952.zip │ ├── colord-npm-2.9.3-5c35c27898-907a4506d7.zip │ ├── concat-map-npm-0.0.1-85a921b7ee-9680699c8e.zip │ ├── cosmiconfig-npm-7.1.0-13a5090bcd-03600bb387.zip │ ├── css-functions-list-npm-3.2.2-b3f5bc8484-b8a564118b.zip │ ├── cssesc-npm-3.0.0-15ec56f86f-0e161912c1.zip │ ├── debug-npm-4.3.7-385645adf9-71168908b9.zip │ ├── decamelize-keys-npm-1.1.1-4cfa36ed4b-71d5898174.zip │ ├── decamelize-npm-1.2.0-c5a2fdc622-ad8c51a7e7.zip │ ├── dir-glob-npm-3.0.1-1aea628b1b-fa05e18324.zip │ ├── emoji-regex-npm-8.0.0-213764015c-c72d67a682.zip │ ├── error-ex-npm-1.3.2-5654f80c0f-d547740aa2.zip │ ├── escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip │ ├── fast-deep-equal-npm-3.1.3-790edcfcf5-e21a9d8d84.zip │ ├── fast-glob-npm-3.3.2-0a8cb4f2ca-222512e931.zip │ ├── fast-uri-npm-3.0.1-20477a5d16-e8ee471227.zip │ ├── fastest-levenshtein-npm-1.0.16-192d328856-ee85d33b5c.zip │ ├── fastq-npm-1.17.1-56d4554993-a443180068.zip │ ├── file-entry-cache-npm-6.0.1-31965cf0af-099bb9d4ab.zip │ ├── fill-range-npm-7.1.1-bf491486db-a7095cb39e.zip │ ├── find-up-npm-4.1.0-c3ccf8d855-4c172680e8.zip │ ├── flat-cache-npm-3.2.0-9a887f084e-02381c6ece.zip │ ├── flatted-npm-3.3.1-458870f59b-7b8376061d.zip │ ├── fs.realpath-npm-1.0.0-c8f05d8126-e703107c28.zip │ ├── function-bind-npm-1.1.2-7a55be9b03-185e20d20f.zip │ ├── glob-npm-7.2.3-2d866d17a5-59452a9202.zip │ ├── glob-parent-npm-5.1.2-021ab32634-32cd106ce8.zip │ ├── global-modules-npm-2.0.0-f71d340362-4aee73adf5.zip │ ├── global-prefix-npm-3.0.0-68cf01e67d-a405b9f83c.zip │ ├── globby-npm-11.1.0-bdcdf20c71-288e95e310.zip │ ├── globjoin-npm-0.1.4-a1beb812bf-1e7e0f145f.zip │ ├── hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip │ ├── has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip │ ├── has-flag-npm-4.0.0-32af9f0536-261a135703.zip │ ├── hasown-npm-2.0.2-80fe6c9901-7898a9c178.zip │ ├── hosted-git-info-npm-2.8.9-62c44fa93f-96da7d4123.zip │ ├── hosted-git-info-npm-4.1.0-4efcdf8fd3-4dc67022b7.zip │ ├── html-tags-npm-3.3.1-c8f411791b-d0e808544b.zip │ ├── ignore-npm-5.3.2-346d3ba017-cceb6a4570.zip │ ├── import-fresh-npm-3.3.0-3e34265ca9-2cacfad06e.zip │ ├── import-lazy-npm-4.0.0-3215653869-943309cc8e.zip │ ├── imurmurhash-npm-0.1.4-610c5068a0-2d30b157a9.zip │ ├── indent-string-npm-4.0.0-7b717435b2-cd3f5cbc9c.zip │ ├── inflight-npm-1.0.6-ccedb4b908-d2ebd65441.zip │ ├── inherits-npm-2.0.4-c66b3957a0-cd45e923be.zip │ ├── ini-npm-1.3.8-fb5040b4c0-314ae176e8.zip │ ├── is-arrayish-npm-0.2.1-23927dfb15-73ced84fa3.zip │ ├── is-core-module-npm-2.15.1-34c73a6cbd-77316d5891.zip │ ├── is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip │ ├── is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip │ ├── is-glob-npm-4.0.3-cb87bf1bdb-3ed74f2b0c.zip │ ├── is-number-npm-7.0.0-060086935c-6a6c3383f6.zip │ ├── is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip │ ├── is-plain-object-npm-5.0.0-285b70faa3-e32d27061e.zip │ ├── isexe-npm-2.0.0-b58870bd2e-7c9f715c03.zip │ ├── js-tokens-npm-4.0.0-0ac852e9e2-af37d0d913.zip │ ├── json-buffer-npm-3.0.1-f8f6d20603-8287615452.zip │ ├── json-parse-even-better-errors-npm-2.3.1-144d62256e-5f3a99009e.zip │ ├── json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip │ ├── keyv-npm-4.5.4-4c8e2cf7f7-167eb6ef64.zip │ ├── kind-of-npm-6.0.3-ab15f36220-5873d303fb.zip │ ├── known-css-properties-npm-0.26.0-1d02b65fc1-40222e8038.zip │ ├── lines-and-columns-npm-1.2.4-d6c7cc5799-0c37f9f7fa.zip │ ├── locate-path-npm-5.0.0-46580c43e4-83e51725e6.zip │ ├── lodash.truncate-npm-4.4.2-bc50fe1663-7a49561612.zip │ ├── lru-cache-npm-6.0.0-b4c8668fe1-fc1fe2ee20.zip │ ├── map-obj-npm-1.0.1-fa55100fac-f8e6fc7f61.zip │ ├── map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip │ ├── mathml-tag-names-npm-2.1.3-875bd2d6e7-1201a25a13.zip │ ├── meow-npm-9.0.0-8b2707248e-3d0f199b9c.zip │ ├── merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip │ ├── micromatch-npm-4.0.8-c9570e4aca-6bf2a01672.zip │ ├── min-indent-npm-1.0.1-77031f50e1-bfc6dd03c5.zip │ ├── minimatch-npm-3.1.2-9405269906-e0b25b04cd.zip │ ├── minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip │ ├── ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip │ ├── nanoid-npm-3.3.8-d22226208b-2d1766606c.zip │ ├── normalize-package-data-npm-2.5.0-af0345deed-644f830a8b.zip │ ├── normalize-package-data-npm-3.0.3-1a49056685-3cd3b438c9.zip │ ├── normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip │ ├── once-npm-1.4.0-ccf03ef07a-cd0a885013.zip │ ├── p-limit-npm-2.3.0-94a0310039-84ff17f1a3.zip │ ├── p-locate-npm-4.1.0-eec6872537-513bd14a45.zip │ ├── p-try-npm-2.2.0-e0390dbaf8-f8a8e9a769.zip │ ├── parent-module-npm-1.0.1-1fae11b095-6ba8b25514.zip │ ├── parse-json-npm-5.2.0-00a63b1199-62085b17d6.zip │ ├── path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip │ ├── path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip │ ├── path-parse-npm-1.0.7-09564527b7-49abf3d811.zip │ ├── path-type-npm-4.0.0-10d47fc86a-5b1e2daa24.zip │ ├── picocolors-npm-1.1.0-ea12a640bd-a2ad60d94d.zip │ ├── picomatch-npm-2.3.1-c782cfd986-60c2595003.zip │ ├── postcss-media-query-parser-npm-0.2.3-7c1ee973b6-39f9e9c383.zip │ ├── postcss-npm-8.4.45-c84345b3d1-7eaf7346d0.zip │ ├── postcss-resolve-nested-selector-npm-0.1.6-c30614d887-85453901af.zip │ ├── postcss-safe-parser-npm-6.0.0-dd01bffb52-06c733eaad.zip │ ├── postcss-scss-npm-4.0.9-b492c55307-d191c77134.zip │ ├── postcss-selector-parser-npm-6.1.2-46a8e03b00-190034c94d.zip │ ├── postcss-sorting-npm-8.0.2-d9f7d43c59-2496713e31.zip │ ├── postcss-value-parser-npm-4.2.0-3cef602a6a-e4e4486f33.zip │ ├── queue-microtask-npm-1.2.3-fcc98e4e2d-72900df061.zip │ ├── quick-lru-npm-4.0.1-ef8aa17c9c-5c7c75f1c6.zip │ ├── read-pkg-npm-5.2.0-50426bd8dc-eb696e6052.zip │ ├── read-pkg-up-npm-7.0.1-11895bed9a-e4e93ce70e.zip │ ├── redent-npm-3.0.0-31892f4906-fa1ef20404.zip │ ├── require-from-string-npm-2.0.2-8557e0db12-839a3a8901.zip │ ├── resolve-from-npm-4.0.0-f758ec21bf-91eb76ce83.zip │ ├── resolve-from-npm-5.0.0-15c9db4d33-be18a5e4d7.zip │ ├── resolve-npm-1.22.8-098f379dfe-c473506ee0.zip │ ├── resolve-patch-4254c24959-f345cd37f5.zip │ ├── reusify-npm-1.0.4-95ac4aec11-14222c9e1d.zip │ ├── rimraf-npm-3.0.2-2cb7dac69a-063ffaccaa.zip │ ├── run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip │ ├── semver-npm-5.7.2-938ee91eaa-fca14418a1.zip │ ├── semver-npm-7.6.3-57e82c14d5-36b1fbe1a2.zip │ ├── signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip │ ├── slash-npm-3.0.0-b87de2279a-94a93fff61.zip │ ├── slice-ansi-npm-4.0.0-6eeca1d10e-4a82d7f085.zip │ ├── source-map-js-npm-1.2.1-b9a47d7e1a-ff9d8c8bf0.zip │ ├── spdx-correct-npm-3.2.0-ffae008484-cc2e4dbef8.zip │ ├── spdx-exceptions-npm-2.5.0-718ed4b7d6-bb127d6e25.zip │ ├── spdx-expression-parse-npm-3.0.1-b718cbb35a-a1c6e104a2.zip │ ├── spdx-license-ids-npm-3.0.20-f08e1eabc0-30e566ea74.zip │ ├── string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip │ ├── strip-ansi-npm-6.0.1-caddc7cb40-ae3b5436d3.zip │ ├── strip-indent-npm-3.0.0-519e75a28d-18f045d57d.zip │ ├── style-search-npm-0.1.0-e3177d3642-841049768c.zip │ ├── stylelint-config-recommended-npm-6.0.0-67cddf9dd5-103b3c1222.zip │ ├── stylelint-config-recommended-scss-npm-5.0.2-93f8eda8de-e882bde8a0.zip │ ├── stylelint-npm-14.16.1-518d76e9e5-72883bfe2a.zip │ ├── stylelint-order-npm-6.0.4-fa909cac07-a16a017bde.zip │ ├── stylelint-plugin-defensive-css-npm-0.8.1-c10bb34122-8b231ef322.zip │ ├── stylelint-scss-npm-4.7.0-e9df7622f7-6a49f1f193.zip │ ├── supports-color-npm-5.5.0-183ac537bc-5f505c6fa3.zip │ ├── supports-color-npm-7.2.0-606bfcf7da-c8bb7afd56.zip │ ├── supports-hyperlinks-npm-2.3.0-d19176eba2-3e7df6e9ea.zip │ ├── supports-preserve-symlinks-flag-npm-1.0.0-f17c4d0028-a9dc19ae22.zip │ ├── svg-tags-npm-1.0.0-68a35c11fa-407e5ef87c.zip │ ├── table-npm-6.8.2-e33ecc3c54-2946162eb8.zip │ ├── to-regex-range-npm-5.0.1-f1e8263b00-10dda13571.zip │ ├── trim-newlines-npm-3.0.1-22f1f216de-b530f3fadf.zip │ ├── type-fest-npm-0.18.1-47b079775d-0884437705.zip │ ├── type-fest-npm-0.6.0-76b229965b-9ecbf4ba27.zip │ ├── type-fest-npm-0.8.1-351ad028fe-fd4a91bfb7.zip │ ├── util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip │ ├── v8-compile-cache-npm-2.4.0-5979f8e405-49e726d7b2.zip │ ├── validate-npm-package-license-npm-3.0.4-7af8adc7a8-86242519b2.zip │ ├── which-npm-1.3.1-f0ebb8bdd8-549dcf1752.zip │ ├── wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip │ ├── write-file-atomic-npm-4.0.2-661baae4aa-3be1f5508a.zip │ ├── yallist-npm-4.0.0-b493d9e907-4cb02b42b8.zip │ ├── yaml-npm-1.10.2-0e780aebdf-e088b37b4d.zip │ └── yargs-parser-npm-20.2.9-a1d19e598d-0188f430a0.zip ├── .yarnrc.yml ├── Readme.md ├── composer.json ├── dev ├── blueprint.html ├── git-hooks │ ├── pre-commit │ └── prepare-commit-msg ├── phpstan-baseline.php ├── phpstan-phpVersion-ignores.php ├── stubs │ └── go-live-update-urls-pro.stub └── translate-cli │ ├── command.php │ ├── composer.json │ └── composer.lock ├── go-live-update-urls.php ├── languages ├── Readme.md ├── go-live-update-urls-de_DE.mo ├── go-live-update-urls-de_DE.po ├── go-live-update-urls-es_ES.mo ├── go-live-update-urls-es_ES.po ├── go-live-update-urls-fr_FR.mo ├── go-live-update-urls-fr_FR.po └── go-live-update-urls.pot ├── package.json ├── phpcs.xml.dist ├── phpstan.neon.dist ├── readme.txt ├── resources ├── go-live-update-urls.css └── go-live-update-urls.js ├── src ├── Admin.php ├── Core.php ├── Database.php ├── Serialized.php ├── Skip_Rows.php ├── Traits │ └── Singleton.php ├── Updaters │ ├── Repo.php │ ├── Updaters_Abstract.php │ └── Url_Encoded.php └── Updates.php └── yarn.lock /.distignore: -------------------------------------------------------------------------------- 1 | ############################ 2 | # 3 | # WordPress.org plugin deploy ignore file 4 | # 5 | # Similar to our standard .deployignore with some changes. 6 | # - Does not support using `!` character. 7 | # - Does not support using `*` character. 8 | # - Must include other files like .github. 9 | # 10 | # @version 2.6.9 11 | # 12 | ############################ 13 | 14 | # Project specific 15 | /config 16 | /js/src 17 | /js/jest 18 | /.wordpress-org 19 | 20 | 21 | 22 | # System and hidden files 23 | *.bak 24 | *.shtml 25 | *.sublime-project 26 | *.sublime-workspace 27 | *.swp 28 | *~ 29 | .DS_Store 30 | .DS_Store? 31 | .cvs 32 | .eslintcache 33 | .phpunit.result.cache 34 | .phpcs.cache 35 | .project 36 | .sass-cache 37 | .stylelintcache 38 | .svn 39 | .Trashes 40 | Thumbs.db 41 | ehthumbs.db 42 | error_log 43 | 44 | # GitHub files 45 | .github 46 | .git 47 | .gitattributes 48 | .gitignore 49 | DOCKER_ENV 50 | docker_tag 51 | 52 | # Idea files 53 | .idea 54 | .run 55 | 56 | # log files 57 | *.log 58 | 59 | # local configs 60 | local-config.php 61 | local-config.json 62 | phpcs.xml 63 | phpstan.neon 64 | 65 | # Yarn and Node files 66 | .editorconfig 67 | .eslintrc 68 | eslint.config.mjs 69 | .nvmrc 70 | .pnp.cjs 71 | .pnp.js 72 | .pnp.loader.mjs 73 | .stylelintrc 74 | .yarn 75 | .yarnrc.yml 76 | jest.config.js 77 | jest.config.ts 78 | node_modules 79 | package.json 80 | tsconfig.json 81 | yarn.lock 82 | 83 | # dev related 84 | .deployignore 85 | .deployignore-wpengine 86 | .distignore 87 | .gitmodules 88 | composer.json 89 | composer.lock 90 | /dev 91 | bin 92 | local-config-sample.php 93 | pcss 94 | phpcs.xml.dist 95 | phpstan.neon.dist 96 | Readme.md 97 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | # WordPress Coding Standards 5 | # https://make.wordpress.org/core/handbook/coding-standards/ 6 | 7 | root = true 8 | 9 | [*] 10 | charset = utf-8 11 | end_of_line = lf 12 | indent_size = 4 13 | tab_width = 4 14 | indent_style = tab 15 | insert_final_newline = true 16 | trim_trailing_whitespace = true 17 | 18 | [*.txt] 19 | trim_trailing_whitespace = false 20 | 21 | [*.{md,json,yml}] 22 | trim_trailing_whitespace = false 23 | indent_style = space 24 | indent_size = 2 -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: lipemat 2 | -------------------------------------------------------------------------------- /.github/workflows/create-release.yml: -------------------------------------------------------------------------------- 1 | ################################################### 2 | # Create a GitHub Release when a tag is pushed. 3 | # 4 | # @notice You must enable write permissions for this action to work. 5 | # 1. GitHub Settings 6 | # 2. Actions 7 | # 3. General 8 | # 4. Workflow permissions 9 | # 5. Enable "read and write permissions" 10 | # 11 | # @version 3.0.0 12 | # 13 | ################################################### 14 | 15 | name: Create GitHub Release 16 | run-name: Create release for ${{ github.ref_name }} on GitHub. 17 | 18 | on: 19 | push: 20 | tags-ignore: 21 | - "*beta*" 22 | 23 | jobs: 24 | create-release: 25 | uses: lipemat/public-actions/.github/workflows/create-release.yml@version/1 26 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to WordPress.org 2 | env: 3 | # Can't specify the VERSION, or the plugin will deploy in that version. 4 | # VERSION: 3.4.1 5 | NODE_VERSION: '20.11.0' 6 | PHP_VERSION: '8.4' 7 | TZ: 'America/New_York' 8 | 9 | on: 10 | push: 11 | tags: 12 | - "*" 13 | 14 | jobs: 15 | tag: 16 | name: New tag 17 | runs-on: ubuntu-22.04 18 | steps: 19 | - uses: actions/checkout@v4 20 | - name: Install WP-CLI 21 | run: | 22 | curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar 23 | chmod +x wp-cli.phar 24 | sudo mv wp-cli.phar /usr/local/bin/wp 25 | - name: Generate PHP translations 26 | shell: bash 27 | run: cd ${{github.workspace}}/languages && wp i18n make-php . 28 | - name: WordPress Plugin Deploy 29 | uses: 10up/action-wordpress-plugin-deploy@stable 30 | env: 31 | SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} 32 | SVN_USERNAME: ${{ secrets.SVN_USERNAME }} 33 | -------------------------------------------------------------------------------- /.github/workflows/populate-caches.yml: -------------------------------------------------------------------------------- 1 | ################################################### 2 | # Install and cache the dependencies when `master` is pushed 3 | # for other workflows to use. 4 | # 5 | # Most workflows will reuse the same cached 6 | # dependencies as the last release. Having master populate the 7 | # cache makes them accessible to all pull requests and deployments. 8 | # 9 | # Variables must be set in the calling repository. 10 | # https://github.com/lipemat/go-live-update-urls/settings/variables/actions 11 | # @see The reusable workflow for the required variables. 12 | # 13 | # @version 1.1.0 14 | # 15 | ################################################### 16 | 17 | name: Populate Caches 18 | 19 | on: 20 | push: 21 | branches: 22 | - master 23 | 24 | jobs: 25 | populate: 26 | name: Populate all caches 27 | uses: lipemat/public-actions/.github/workflows/populate-caches-plugin.yml@version/1 28 | -------------------------------------------------------------------------------- /.github/workflows/pull-request-lint.yml: -------------------------------------------------------------------------------- 1 | ############################## 2 | # Test and lint files in a pull request. 3 | # 4 | # Variables must be set in the calling repository. 5 | # https://github.com/lipemat/go-live-update-urls-pro/settings/variables/actions 6 | # vars: 7 | # BASIC: The basic plugin slug. 8 | # BASIC_BRANCH: The branch of the basic plugin. 9 | # DIR: The directory of the plugin. 10 | # NODE_VERSION: The version of Node to install. 11 | # PHPCS_VERSION: The version of `lipemat/wp-phpcs` to install. 12 | # PHPSTAN_VERSION: The version of PHPStan to install. 13 | # PRO: The pro plugin slug. 14 | # PRO_BRANCH: The branch of the pro plugin. 15 | # secrets: 16 | # PUBLIC_ACTIONS_PRO_REPO: The token to access the pro repository. 17 | # 18 | # @version 0.0.6 19 | # 20 | ############################## 21 | 22 | name: Test & Lint Files 23 | 24 | on: 25 | pull_request: 26 | types: 27 | - opened 28 | - edited 29 | - synchronize 30 | 31 | jobs: 32 | php-lint: 33 | strategy: 34 | matrix: 35 | php: [ 7.4, 8.0, 8.1, 8.2, 8.3, 8.4 ] 36 | uses: lipemat/public-actions/.github/workflows/php-lint.yml@version/1 37 | with: 38 | php: ${{ matrix.php }} 39 | 40 | wp-unit: 41 | strategy: 42 | # https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/ 43 | matrix: 44 | versions: [ 45 | { 46 | php: 7.4, 47 | wp: 6.2.6 48 | }, 49 | { 50 | php: 8.1, 51 | wp: 6.2.6 52 | }, 53 | { 54 | php: 7.4, 55 | wp: 6.8.1 56 | }, 57 | { 58 | php: 8.4, 59 | wp: 6.8.1 60 | }, 61 | ] 62 | multisite: [ 'single', 'multisite' ] 63 | uses: lipemat/public-actions/.github/workflows/wp-unit-plugin.yml@version/1 64 | with: 65 | multisite: ${{ matrix.multisite }} 66 | php: ${{ matrix.versions.php }} 67 | skipDatabaseInstall: false 68 | wp: ${{ matrix.versions.wp }} 69 | secrets: inherit 70 | 71 | phpstan: 72 | strategy: 73 | matrix: 74 | combination: 75 | - php: 7.4 76 | phpstan-version: 3.4.2 77 | stubs: 6.2.6 78 | - php: 8.4 79 | stubs: 6.8.0 80 | uses: lipemat/public-actions/.github/workflows/phpstan-plugin.yml@version/1 81 | with: 82 | php: ${{ matrix.combination.php }} 83 | phpstan-version: ${{ matrix.combination.phpstan-version }} 84 | stubs: ${{ matrix.combination.stubs }} 85 | secrets: inherit 86 | 87 | phpcs: 88 | uses: lipemat/public-actions/.github/workflows/phpcs-plugin.yml@version/1 89 | -------------------------------------------------------------------------------- /.github/workflows/update-readme.yml: -------------------------------------------------------------------------------- 1 | name: Plugin asset/readme update 2 | env: 3 | # Can't specify the VERSION, or the plugin will deploy in that version. 4 | # VERSION: 2.0.0 5 | IGNORE_OTHER_FILES: true 6 | TZ: 'America/New_York' 7 | 8 | on: 9 | push: 10 | branches: 11 | - deploy 12 | jobs: 13 | trunk: 14 | name: Push to trunk 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v4 18 | - name: WordPress.org plugin asset/readme update 19 | uses: 10up/action-wordpress-plugin-asset-update@stable 20 | env: 21 | SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} 22 | SVN_USERNAME: ${{ secrets.SVN_USERNAME }} 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################################ 2 | # 3 | # @version 6.2.1 4 | # 5 | ################################ 6 | 7 | # Project specific 8 | #### Put project specific exclusions here so they may be easily transferred when updating gitignore. 9 | 10 | # Language files compliled during deployment. 11 | languages/*.json 12 | languages/*.php 13 | # JS dist files 14 | js/dist 15 | # Composer files 16 | dev/translate-cli/vendor 17 | 18 | 19 | # system/hidden files 20 | *.bak 21 | *.sublime-project 22 | *.sublime-workspace 23 | *.swp 24 | *~ 25 | .DS_Store 26 | .DS_Store? 27 | .Trashes 28 | .cvs 29 | .eslintcache 30 | .phpcs.cache 31 | .phpunit.cache 32 | .phpunit.result.cache 33 | .project 34 | .ready 35 | .running 36 | .sass-cache 37 | .stylelintcache 38 | .svn 39 | .vscode 40 | Thumbs.db 41 | ehthumbs.db 42 | tsconfig.tsbuildinfo 43 | 44 | # log files 45 | *.log 46 | 47 | # local configs 48 | local-config.php 49 | local-config.json 50 | phpcs.xml 51 | phpstan.neon 52 | phpunit.xml 53 | 54 | # WordPress specific 55 | wp-content/backup-db 56 | wp-content/blogs.dir 57 | wp-content/cache 58 | wp-content/cache/supercache 59 | wp-content/logs 60 | wp-content/upgrade 61 | wp-content/upgrade-temp-backup 62 | wp-content/uploads/* 63 | !wp-content/uploads/.htaccess 64 | 65 | # vendor files 66 | wp-content/plugins/core/vendor 67 | wp-content/plugins/core/wp-content 68 | 69 | # Yarn Berry files 70 | install-state.gz 71 | build-state.yml 72 | node_modules 73 | 74 | # theme - compiled files 75 | wp-content/themes/core/js/dist 76 | wp-content/themes/core/_css-modules-json 77 | wp-content/themes/core/css/*.php 78 | wp-content/themes/core/css/dist 79 | .revision 80 | deploy 81 | 82 | # keep files (must be last). 83 | !.gitkeep 84 | !.keep 85 | 86 | # PHPStorm files 87 | # https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore 88 | # User-specific stuff 89 | .idea/**/workspace.xml 90 | .idea/**/tasks.xml 91 | .idea/**/usage.statistics.xml 92 | .idea/**/dictionaries 93 | .idea/**/shelf 94 | .idea/csv-editor.xml 95 | .idea/csv-plugin.xml 96 | .idea/php.xml 97 | .idea/sshConfigs.xml 98 | # Generated files 99 | .idea/**/contentModel.xml 100 | # Sensitive or high-churn files 101 | .idea/**/dataSources/ 102 | .idea/**/dataSources.ids 103 | .idea/**/dataSources.local.xml 104 | .idea/**/sqlDataSources.xml 105 | .idea/**/dynamic.xml 106 | .idea/**/uiDesigner.xml 107 | .idea/**/dbnavigator.xml 108 | # JIRA plugin 109 | atlassian-ide-plugin.xml 110 | # Editor-based Rest Client 111 | .idea/httpRequests 112 | # Copilot 113 | .idea/copilot 114 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@lipemat/stylelint-config" 3 | } 4 | -------------------------------------------------------------------------------- /.wordpress-org/banner-1544x500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.wordpress-org/banner-1544x500.png -------------------------------------------------------------------------------- /.wordpress-org/banner-772x250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.wordpress-org/banner-772x250.png -------------------------------------------------------------------------------- /.wordpress-org/blueprints/blueprint.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://playground.wordpress.net/blueprint-schema.json", 3 | "landingPage": "/wp-admin/admin.php?page=go-live-update-urls-settings", 4 | "preferredVersions": { 5 | "php": "8.0", 6 | "wp": "6.4.3" 7 | }, 8 | "phpExtensionBundles": [ 9 | "kitchen-sink" 10 | ], 11 | "features": { 12 | "networking": true 13 | }, 14 | "steps": [ 15 | { 16 | "step": "login", 17 | "username": "admin", 18 | "password": "password" 19 | }, 20 | { 21 | "step": "installPlugin", 22 | "pluginZipFile": { 23 | "resource": "wordpress.org/plugins", 24 | "slug": "go-live-update-urls" 25 | }, 26 | "options": { 27 | "activate": true 28 | } 29 | }, 30 | { 31 | "step": "setSiteOptions", 32 | "options": { 33 | "blogname": "Go Live Update Urls - Demo" 34 | } 35 | } 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /.wordpress-org/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.wordpress-org/icon-128x128.png -------------------------------------------------------------------------------- /.wordpress-org/icon-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.wordpress-org/icon-256x256.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.wordpress-org/screenshot-1.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.wordpress-org/screenshot-2.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.wordpress-org/screenshot-3.png -------------------------------------------------------------------------------- /.yarn/cache/@babel-code-frame-npm-7.24.7-315a600a58-4812e94885.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@babel-code-frame-npm-7.24.7-315a600a58-4812e94885.zip -------------------------------------------------------------------------------- /.yarn/cache/@babel-helper-validator-identifier-npm-7.24.7-748889c8d2-86875063f5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@babel-helper-validator-identifier-npm-7.24.7-748889c8d2-86875063f5.zip -------------------------------------------------------------------------------- /.yarn/cache/@babel-highlight-npm-7.24.7-d792bd8d9f-69b73f38cd.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@babel-highlight-npm-7.24.7-d792bd8d9f-69b73f38cd.zip -------------------------------------------------------------------------------- /.yarn/cache/@csstools-selector-specificity-npm-2.2.0-9e6097918b-84ae0e902e.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@csstools-selector-specificity-npm-2.2.0-9e6097918b-84ae0e902e.zip -------------------------------------------------------------------------------- /.yarn/cache/@lipemat-stylelint-config-npm-2.2.1-323919a3ca-9636b7ab25.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@lipemat-stylelint-config-npm-2.2.1-323919a3ca-9636b7ab25.zip -------------------------------------------------------------------------------- /.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-6ab2a9b8a1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-6ab2a9b8a1.zip -------------------------------------------------------------------------------- /.yarn/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip -------------------------------------------------------------------------------- /.yarn/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-40033e33e9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-40033e33e9.zip -------------------------------------------------------------------------------- /.yarn/cache/@types-minimist-npm-1.2.5-c85664a9d8-477047b606.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@types-minimist-npm-1.2.5-c85664a9d8-477047b606.zip -------------------------------------------------------------------------------- /.yarn/cache/@types-normalize-package-data-npm-2.4.4-676a8ba353-65dff72b54.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@types-normalize-package-data-npm-2.4.4-676a8ba353-65dff72b54.zip -------------------------------------------------------------------------------- /.yarn/cache/@types-parse-json-npm-4.0.2-f87f65692e-5bf62eec37.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@types-parse-json-npm-4.0.2-f87f65692e-5bf62eec37.zip -------------------------------------------------------------------------------- /.yarn/cache/@wordpress-stylelint-config-npm-21.41.0-b2725e83ae-92fe746421.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/@wordpress-stylelint-config-npm-21.41.0-b2725e83ae-92fe746421.zip -------------------------------------------------------------------------------- /.yarn/cache/ajv-npm-8.17.1-12ade7edc6-ee3c62162c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/ajv-npm-8.17.1-12ade7edc6-ee3c62162c.zip -------------------------------------------------------------------------------- /.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip -------------------------------------------------------------------------------- /.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip -------------------------------------------------------------------------------- /.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-b4494dfbfc.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-b4494dfbfc.zip -------------------------------------------------------------------------------- /.yarn/cache/array-union-npm-2.1.0-4e4852b221-5bee12395c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/array-union-npm-2.1.0-4e4852b221-5bee12395c.zip -------------------------------------------------------------------------------- /.yarn/cache/arrify-npm-1.0.1-affafba9fe-745075dd4a.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/arrify-npm-1.0.1-affafba9fe-745075dd4a.zip -------------------------------------------------------------------------------- /.yarn/cache/astral-regex-npm-2.0.0-f30d866aab-876231688c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/astral-regex-npm-2.0.0-f30d866aab-876231688c.zip -------------------------------------------------------------------------------- /.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip -------------------------------------------------------------------------------- /.yarn/cache/balanced-match-npm-2.0.0-d9722af241-9a5caad6a2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/balanced-match-npm-2.0.0-d9722af241-9a5caad6a2.zip -------------------------------------------------------------------------------- /.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip -------------------------------------------------------------------------------- /.yarn/cache/braces-npm-3.0.3-582c14023c-fad11a0d46.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/braces-npm-3.0.3-582c14023c-fad11a0d46.zip -------------------------------------------------------------------------------- /.yarn/cache/callsites-npm-3.1.0-268f989910-072d17b6ab.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/callsites-npm-3.1.0-268f989910-072d17b6ab.zip -------------------------------------------------------------------------------- /.yarn/cache/camelcase-keys-npm-6.2.2-d13777ec12-c1999f5b6d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/camelcase-keys-npm-6.2.2-d13777ec12-c1999f5b6d.zip -------------------------------------------------------------------------------- /.yarn/cache/camelcase-npm-5.3.1-5db8af62c5-e6effce26b.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/camelcase-npm-5.3.1-5db8af62c5-e6effce26b.zip -------------------------------------------------------------------------------- /.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-3d1d103433.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-3d1d103433.zip -------------------------------------------------------------------------------- /.yarn/cache/color-convert-npm-1.9.3-1fe690075e-ffa3190250.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/color-convert-npm-1.9.3-1fe690075e-ffa3190250.zip -------------------------------------------------------------------------------- /.yarn/cache/color-convert-npm-2.0.1-79730e935b-fa00c91b43.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/color-convert-npm-2.0.1-79730e935b-fa00c91b43.zip -------------------------------------------------------------------------------- /.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip -------------------------------------------------------------------------------- /.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip -------------------------------------------------------------------------------- /.yarn/cache/colord-npm-2.9.3-5c35c27898-907a4506d7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/colord-npm-2.9.3-5c35c27898-907a4506d7.zip -------------------------------------------------------------------------------- /.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-9680699c8e.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-9680699c8e.zip -------------------------------------------------------------------------------- /.yarn/cache/cosmiconfig-npm-7.1.0-13a5090bcd-03600bb387.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/cosmiconfig-npm-7.1.0-13a5090bcd-03600bb387.zip -------------------------------------------------------------------------------- /.yarn/cache/css-functions-list-npm-3.2.2-b3f5bc8484-b8a564118b.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/css-functions-list-npm-3.2.2-b3f5bc8484-b8a564118b.zip -------------------------------------------------------------------------------- /.yarn/cache/cssesc-npm-3.0.0-15ec56f86f-0e161912c1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/cssesc-npm-3.0.0-15ec56f86f-0e161912c1.zip -------------------------------------------------------------------------------- /.yarn/cache/debug-npm-4.3.7-385645adf9-71168908b9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/debug-npm-4.3.7-385645adf9-71168908b9.zip -------------------------------------------------------------------------------- /.yarn/cache/decamelize-keys-npm-1.1.1-4cfa36ed4b-71d5898174.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/decamelize-keys-npm-1.1.1-4cfa36ed4b-71d5898174.zip -------------------------------------------------------------------------------- /.yarn/cache/decamelize-npm-1.2.0-c5a2fdc622-ad8c51a7e7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/decamelize-npm-1.2.0-c5a2fdc622-ad8c51a7e7.zip -------------------------------------------------------------------------------- /.yarn/cache/dir-glob-npm-3.0.1-1aea628b1b-fa05e18324.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/dir-glob-npm-3.0.1-1aea628b1b-fa05e18324.zip -------------------------------------------------------------------------------- /.yarn/cache/emoji-regex-npm-8.0.0-213764015c-c72d67a682.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/emoji-regex-npm-8.0.0-213764015c-c72d67a682.zip -------------------------------------------------------------------------------- /.yarn/cache/error-ex-npm-1.3.2-5654f80c0f-d547740aa2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/error-ex-npm-1.3.2-5654f80c0f-d547740aa2.zip -------------------------------------------------------------------------------- /.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip -------------------------------------------------------------------------------- /.yarn/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-e21a9d8d84.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-e21a9d8d84.zip -------------------------------------------------------------------------------- /.yarn/cache/fast-glob-npm-3.3.2-0a8cb4f2ca-222512e931.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/fast-glob-npm-3.3.2-0a8cb4f2ca-222512e931.zip -------------------------------------------------------------------------------- /.yarn/cache/fast-uri-npm-3.0.1-20477a5d16-e8ee471227.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/fast-uri-npm-3.0.1-20477a5d16-e8ee471227.zip -------------------------------------------------------------------------------- /.yarn/cache/fastest-levenshtein-npm-1.0.16-192d328856-ee85d33b5c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/fastest-levenshtein-npm-1.0.16-192d328856-ee85d33b5c.zip -------------------------------------------------------------------------------- /.yarn/cache/fastq-npm-1.17.1-56d4554993-a443180068.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/fastq-npm-1.17.1-56d4554993-a443180068.zip -------------------------------------------------------------------------------- /.yarn/cache/file-entry-cache-npm-6.0.1-31965cf0af-099bb9d4ab.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/file-entry-cache-npm-6.0.1-31965cf0af-099bb9d4ab.zip -------------------------------------------------------------------------------- /.yarn/cache/fill-range-npm-7.1.1-bf491486db-a7095cb39e.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/fill-range-npm-7.1.1-bf491486db-a7095cb39e.zip -------------------------------------------------------------------------------- /.yarn/cache/find-up-npm-4.1.0-c3ccf8d855-4c172680e8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/find-up-npm-4.1.0-c3ccf8d855-4c172680e8.zip -------------------------------------------------------------------------------- /.yarn/cache/flat-cache-npm-3.2.0-9a887f084e-02381c6ece.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/flat-cache-npm-3.2.0-9a887f084e-02381c6ece.zip -------------------------------------------------------------------------------- /.yarn/cache/flatted-npm-3.3.1-458870f59b-7b8376061d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/flatted-npm-3.3.1-458870f59b-7b8376061d.zip -------------------------------------------------------------------------------- /.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-e703107c28.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-e703107c28.zip -------------------------------------------------------------------------------- /.yarn/cache/function-bind-npm-1.1.2-7a55be9b03-185e20d20f.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/function-bind-npm-1.1.2-7a55be9b03-185e20d20f.zip -------------------------------------------------------------------------------- /.yarn/cache/glob-npm-7.2.3-2d866d17a5-59452a9202.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/glob-npm-7.2.3-2d866d17a5-59452a9202.zip -------------------------------------------------------------------------------- /.yarn/cache/glob-parent-npm-5.1.2-021ab32634-32cd106ce8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/glob-parent-npm-5.1.2-021ab32634-32cd106ce8.zip -------------------------------------------------------------------------------- /.yarn/cache/global-modules-npm-2.0.0-f71d340362-4aee73adf5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/global-modules-npm-2.0.0-f71d340362-4aee73adf5.zip -------------------------------------------------------------------------------- /.yarn/cache/global-prefix-npm-3.0.0-68cf01e67d-a405b9f83c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/global-prefix-npm-3.0.0-68cf01e67d-a405b9f83c.zip -------------------------------------------------------------------------------- /.yarn/cache/globby-npm-11.1.0-bdcdf20c71-288e95e310.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/globby-npm-11.1.0-bdcdf20c71-288e95e310.zip -------------------------------------------------------------------------------- /.yarn/cache/globjoin-npm-0.1.4-a1beb812bf-1e7e0f145f.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/globjoin-npm-0.1.4-a1beb812bf-1e7e0f145f.zip -------------------------------------------------------------------------------- /.yarn/cache/hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip -------------------------------------------------------------------------------- /.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip -------------------------------------------------------------------------------- /.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip -------------------------------------------------------------------------------- /.yarn/cache/hasown-npm-2.0.2-80fe6c9901-7898a9c178.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/hasown-npm-2.0.2-80fe6c9901-7898a9c178.zip -------------------------------------------------------------------------------- /.yarn/cache/hosted-git-info-npm-2.8.9-62c44fa93f-96da7d4123.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/hosted-git-info-npm-2.8.9-62c44fa93f-96da7d4123.zip -------------------------------------------------------------------------------- /.yarn/cache/hosted-git-info-npm-4.1.0-4efcdf8fd3-4dc67022b7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/hosted-git-info-npm-4.1.0-4efcdf8fd3-4dc67022b7.zip -------------------------------------------------------------------------------- /.yarn/cache/html-tags-npm-3.3.1-c8f411791b-d0e808544b.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/html-tags-npm-3.3.1-c8f411791b-d0e808544b.zip -------------------------------------------------------------------------------- /.yarn/cache/ignore-npm-5.3.2-346d3ba017-cceb6a4570.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/ignore-npm-5.3.2-346d3ba017-cceb6a4570.zip -------------------------------------------------------------------------------- /.yarn/cache/import-fresh-npm-3.3.0-3e34265ca9-2cacfad06e.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/import-fresh-npm-3.3.0-3e34265ca9-2cacfad06e.zip -------------------------------------------------------------------------------- /.yarn/cache/import-lazy-npm-4.0.0-3215653869-943309cc8e.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/import-lazy-npm-4.0.0-3215653869-943309cc8e.zip -------------------------------------------------------------------------------- /.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-2d30b157a9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-2d30b157a9.zip -------------------------------------------------------------------------------- /.yarn/cache/indent-string-npm-4.0.0-7b717435b2-cd3f5cbc9c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/indent-string-npm-4.0.0-7b717435b2-cd3f5cbc9c.zip -------------------------------------------------------------------------------- /.yarn/cache/inflight-npm-1.0.6-ccedb4b908-d2ebd65441.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/inflight-npm-1.0.6-ccedb4b908-d2ebd65441.zip -------------------------------------------------------------------------------- /.yarn/cache/inherits-npm-2.0.4-c66b3957a0-cd45e923be.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/inherits-npm-2.0.4-c66b3957a0-cd45e923be.zip -------------------------------------------------------------------------------- /.yarn/cache/ini-npm-1.3.8-fb5040b4c0-314ae176e8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/ini-npm-1.3.8-fb5040b4c0-314ae176e8.zip -------------------------------------------------------------------------------- /.yarn/cache/is-arrayish-npm-0.2.1-23927dfb15-73ced84fa3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/is-arrayish-npm-0.2.1-23927dfb15-73ced84fa3.zip -------------------------------------------------------------------------------- /.yarn/cache/is-core-module-npm-2.15.1-34c73a6cbd-77316d5891.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/is-core-module-npm-2.15.1-34c73a6cbd-77316d5891.zip -------------------------------------------------------------------------------- /.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip -------------------------------------------------------------------------------- /.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip -------------------------------------------------------------------------------- /.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-3ed74f2b0c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-3ed74f2b0c.zip -------------------------------------------------------------------------------- /.yarn/cache/is-number-npm-7.0.0-060086935c-6a6c3383f6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/is-number-npm-7.0.0-060086935c-6a6c3383f6.zip -------------------------------------------------------------------------------- /.yarn/cache/is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip -------------------------------------------------------------------------------- /.yarn/cache/is-plain-object-npm-5.0.0-285b70faa3-e32d27061e.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/is-plain-object-npm-5.0.0-285b70faa3-e32d27061e.zip -------------------------------------------------------------------------------- /.yarn/cache/isexe-npm-2.0.0-b58870bd2e-7c9f715c03.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/isexe-npm-2.0.0-b58870bd2e-7c9f715c03.zip -------------------------------------------------------------------------------- /.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-af37d0d913.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-af37d0d913.zip -------------------------------------------------------------------------------- /.yarn/cache/json-buffer-npm-3.0.1-f8f6d20603-8287615452.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/json-buffer-npm-3.0.1-f8f6d20603-8287615452.zip -------------------------------------------------------------------------------- /.yarn/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-5f3a99009e.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-5f3a99009e.zip -------------------------------------------------------------------------------- /.yarn/cache/json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip -------------------------------------------------------------------------------- /.yarn/cache/keyv-npm-4.5.4-4c8e2cf7f7-167eb6ef64.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/keyv-npm-4.5.4-4c8e2cf7f7-167eb6ef64.zip -------------------------------------------------------------------------------- /.yarn/cache/kind-of-npm-6.0.3-ab15f36220-5873d303fb.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/kind-of-npm-6.0.3-ab15f36220-5873d303fb.zip -------------------------------------------------------------------------------- /.yarn/cache/known-css-properties-npm-0.26.0-1d02b65fc1-40222e8038.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/known-css-properties-npm-0.26.0-1d02b65fc1-40222e8038.zip -------------------------------------------------------------------------------- /.yarn/cache/lines-and-columns-npm-1.2.4-d6c7cc5799-0c37f9f7fa.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/lines-and-columns-npm-1.2.4-d6c7cc5799-0c37f9f7fa.zip -------------------------------------------------------------------------------- /.yarn/cache/locate-path-npm-5.0.0-46580c43e4-83e51725e6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/locate-path-npm-5.0.0-46580c43e4-83e51725e6.zip -------------------------------------------------------------------------------- /.yarn/cache/lodash.truncate-npm-4.4.2-bc50fe1663-7a49561612.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/lodash.truncate-npm-4.4.2-bc50fe1663-7a49561612.zip -------------------------------------------------------------------------------- /.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-fc1fe2ee20.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-fc1fe2ee20.zip -------------------------------------------------------------------------------- /.yarn/cache/map-obj-npm-1.0.1-fa55100fac-f8e6fc7f61.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/map-obj-npm-1.0.1-fa55100fac-f8e6fc7f61.zip -------------------------------------------------------------------------------- /.yarn/cache/map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip -------------------------------------------------------------------------------- /.yarn/cache/mathml-tag-names-npm-2.1.3-875bd2d6e7-1201a25a13.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/mathml-tag-names-npm-2.1.3-875bd2d6e7-1201a25a13.zip -------------------------------------------------------------------------------- /.yarn/cache/meow-npm-9.0.0-8b2707248e-3d0f199b9c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/meow-npm-9.0.0-8b2707248e-3d0f199b9c.zip -------------------------------------------------------------------------------- /.yarn/cache/merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip -------------------------------------------------------------------------------- /.yarn/cache/micromatch-npm-4.0.8-c9570e4aca-6bf2a01672.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/micromatch-npm-4.0.8-c9570e4aca-6bf2a01672.zip -------------------------------------------------------------------------------- /.yarn/cache/min-indent-npm-1.0.1-77031f50e1-bfc6dd03c5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/min-indent-npm-1.0.1-77031f50e1-bfc6dd03c5.zip -------------------------------------------------------------------------------- /.yarn/cache/minimatch-npm-3.1.2-9405269906-e0b25b04cd.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/minimatch-npm-3.1.2-9405269906-e0b25b04cd.zip -------------------------------------------------------------------------------- /.yarn/cache/minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip -------------------------------------------------------------------------------- /.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip -------------------------------------------------------------------------------- /.yarn/cache/nanoid-npm-3.3.8-d22226208b-2d1766606c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/nanoid-npm-3.3.8-d22226208b-2d1766606c.zip -------------------------------------------------------------------------------- /.yarn/cache/normalize-package-data-npm-2.5.0-af0345deed-644f830a8b.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/normalize-package-data-npm-2.5.0-af0345deed-644f830a8b.zip -------------------------------------------------------------------------------- /.yarn/cache/normalize-package-data-npm-3.0.3-1a49056685-3cd3b438c9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/normalize-package-data-npm-3.0.3-1a49056685-3cd3b438c9.zip -------------------------------------------------------------------------------- /.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip -------------------------------------------------------------------------------- /.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip -------------------------------------------------------------------------------- /.yarn/cache/p-limit-npm-2.3.0-94a0310039-84ff17f1a3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/p-limit-npm-2.3.0-94a0310039-84ff17f1a3.zip -------------------------------------------------------------------------------- /.yarn/cache/p-locate-npm-4.1.0-eec6872537-513bd14a45.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/p-locate-npm-4.1.0-eec6872537-513bd14a45.zip -------------------------------------------------------------------------------- /.yarn/cache/p-try-npm-2.2.0-e0390dbaf8-f8a8e9a769.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/p-try-npm-2.2.0-e0390dbaf8-f8a8e9a769.zip -------------------------------------------------------------------------------- /.yarn/cache/parent-module-npm-1.0.1-1fae11b095-6ba8b25514.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/parent-module-npm-1.0.1-1fae11b095-6ba8b25514.zip -------------------------------------------------------------------------------- /.yarn/cache/parse-json-npm-5.2.0-00a63b1199-62085b17d6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/parse-json-npm-5.2.0-00a63b1199-62085b17d6.zip -------------------------------------------------------------------------------- /.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip -------------------------------------------------------------------------------- /.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip -------------------------------------------------------------------------------- /.yarn/cache/path-parse-npm-1.0.7-09564527b7-49abf3d811.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/path-parse-npm-1.0.7-09564527b7-49abf3d811.zip -------------------------------------------------------------------------------- /.yarn/cache/path-type-npm-4.0.0-10d47fc86a-5b1e2daa24.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/path-type-npm-4.0.0-10d47fc86a-5b1e2daa24.zip -------------------------------------------------------------------------------- /.yarn/cache/picocolors-npm-1.1.0-ea12a640bd-a2ad60d94d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/picocolors-npm-1.1.0-ea12a640bd-a2ad60d94d.zip -------------------------------------------------------------------------------- /.yarn/cache/picomatch-npm-2.3.1-c782cfd986-60c2595003.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/picomatch-npm-2.3.1-c782cfd986-60c2595003.zip -------------------------------------------------------------------------------- /.yarn/cache/postcss-media-query-parser-npm-0.2.3-7c1ee973b6-39f9e9c383.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/postcss-media-query-parser-npm-0.2.3-7c1ee973b6-39f9e9c383.zip -------------------------------------------------------------------------------- /.yarn/cache/postcss-npm-8.4.45-c84345b3d1-7eaf7346d0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/postcss-npm-8.4.45-c84345b3d1-7eaf7346d0.zip -------------------------------------------------------------------------------- /.yarn/cache/postcss-resolve-nested-selector-npm-0.1.6-c30614d887-85453901af.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/postcss-resolve-nested-selector-npm-0.1.6-c30614d887-85453901af.zip -------------------------------------------------------------------------------- /.yarn/cache/postcss-safe-parser-npm-6.0.0-dd01bffb52-06c733eaad.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/postcss-safe-parser-npm-6.0.0-dd01bffb52-06c733eaad.zip -------------------------------------------------------------------------------- /.yarn/cache/postcss-scss-npm-4.0.9-b492c55307-d191c77134.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/postcss-scss-npm-4.0.9-b492c55307-d191c77134.zip -------------------------------------------------------------------------------- /.yarn/cache/postcss-selector-parser-npm-6.1.2-46a8e03b00-190034c94d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/postcss-selector-parser-npm-6.1.2-46a8e03b00-190034c94d.zip -------------------------------------------------------------------------------- /.yarn/cache/postcss-sorting-npm-8.0.2-d9f7d43c59-2496713e31.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/postcss-sorting-npm-8.0.2-d9f7d43c59-2496713e31.zip -------------------------------------------------------------------------------- /.yarn/cache/postcss-value-parser-npm-4.2.0-3cef602a6a-e4e4486f33.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/postcss-value-parser-npm-4.2.0-3cef602a6a-e4e4486f33.zip -------------------------------------------------------------------------------- /.yarn/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-72900df061.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-72900df061.zip -------------------------------------------------------------------------------- /.yarn/cache/quick-lru-npm-4.0.1-ef8aa17c9c-5c7c75f1c6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/quick-lru-npm-4.0.1-ef8aa17c9c-5c7c75f1c6.zip -------------------------------------------------------------------------------- /.yarn/cache/read-pkg-npm-5.2.0-50426bd8dc-eb696e6052.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/read-pkg-npm-5.2.0-50426bd8dc-eb696e6052.zip -------------------------------------------------------------------------------- /.yarn/cache/read-pkg-up-npm-7.0.1-11895bed9a-e4e93ce70e.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/read-pkg-up-npm-7.0.1-11895bed9a-e4e93ce70e.zip -------------------------------------------------------------------------------- /.yarn/cache/redent-npm-3.0.0-31892f4906-fa1ef20404.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/redent-npm-3.0.0-31892f4906-fa1ef20404.zip -------------------------------------------------------------------------------- /.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-839a3a8901.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-839a3a8901.zip -------------------------------------------------------------------------------- /.yarn/cache/resolve-from-npm-4.0.0-f758ec21bf-91eb76ce83.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/resolve-from-npm-4.0.0-f758ec21bf-91eb76ce83.zip -------------------------------------------------------------------------------- /.yarn/cache/resolve-from-npm-5.0.0-15c9db4d33-be18a5e4d7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/resolve-from-npm-5.0.0-15c9db4d33-be18a5e4d7.zip -------------------------------------------------------------------------------- /.yarn/cache/resolve-npm-1.22.8-098f379dfe-c473506ee0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/resolve-npm-1.22.8-098f379dfe-c473506ee0.zip -------------------------------------------------------------------------------- /.yarn/cache/resolve-patch-4254c24959-f345cd37f5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/resolve-patch-4254c24959-f345cd37f5.zip -------------------------------------------------------------------------------- /.yarn/cache/reusify-npm-1.0.4-95ac4aec11-14222c9e1d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/reusify-npm-1.0.4-95ac4aec11-14222c9e1d.zip -------------------------------------------------------------------------------- /.yarn/cache/rimraf-npm-3.0.2-2cb7dac69a-063ffaccaa.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/rimraf-npm-3.0.2-2cb7dac69a-063ffaccaa.zip -------------------------------------------------------------------------------- /.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip -------------------------------------------------------------------------------- /.yarn/cache/semver-npm-5.7.2-938ee91eaa-fca14418a1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/semver-npm-5.7.2-938ee91eaa-fca14418a1.zip -------------------------------------------------------------------------------- /.yarn/cache/semver-npm-7.6.3-57e82c14d5-36b1fbe1a2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/semver-npm-7.6.3-57e82c14d5-36b1fbe1a2.zip -------------------------------------------------------------------------------- /.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip -------------------------------------------------------------------------------- /.yarn/cache/slash-npm-3.0.0-b87de2279a-94a93fff61.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/slash-npm-3.0.0-b87de2279a-94a93fff61.zip -------------------------------------------------------------------------------- /.yarn/cache/slice-ansi-npm-4.0.0-6eeca1d10e-4a82d7f085.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/slice-ansi-npm-4.0.0-6eeca1d10e-4a82d7f085.zip -------------------------------------------------------------------------------- /.yarn/cache/source-map-js-npm-1.2.1-b9a47d7e1a-ff9d8c8bf0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/source-map-js-npm-1.2.1-b9a47d7e1a-ff9d8c8bf0.zip -------------------------------------------------------------------------------- /.yarn/cache/spdx-correct-npm-3.2.0-ffae008484-cc2e4dbef8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/spdx-correct-npm-3.2.0-ffae008484-cc2e4dbef8.zip -------------------------------------------------------------------------------- /.yarn/cache/spdx-exceptions-npm-2.5.0-718ed4b7d6-bb127d6e25.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/spdx-exceptions-npm-2.5.0-718ed4b7d6-bb127d6e25.zip -------------------------------------------------------------------------------- /.yarn/cache/spdx-expression-parse-npm-3.0.1-b718cbb35a-a1c6e104a2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/spdx-expression-parse-npm-3.0.1-b718cbb35a-a1c6e104a2.zip -------------------------------------------------------------------------------- /.yarn/cache/spdx-license-ids-npm-3.0.20-f08e1eabc0-30e566ea74.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/spdx-license-ids-npm-3.0.20-f08e1eabc0-30e566ea74.zip -------------------------------------------------------------------------------- /.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip -------------------------------------------------------------------------------- /.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-ae3b5436d3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-ae3b5436d3.zip -------------------------------------------------------------------------------- /.yarn/cache/strip-indent-npm-3.0.0-519e75a28d-18f045d57d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/strip-indent-npm-3.0.0-519e75a28d-18f045d57d.zip -------------------------------------------------------------------------------- /.yarn/cache/style-search-npm-0.1.0-e3177d3642-841049768c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/style-search-npm-0.1.0-e3177d3642-841049768c.zip -------------------------------------------------------------------------------- /.yarn/cache/stylelint-config-recommended-npm-6.0.0-67cddf9dd5-103b3c1222.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/stylelint-config-recommended-npm-6.0.0-67cddf9dd5-103b3c1222.zip -------------------------------------------------------------------------------- /.yarn/cache/stylelint-config-recommended-scss-npm-5.0.2-93f8eda8de-e882bde8a0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/stylelint-config-recommended-scss-npm-5.0.2-93f8eda8de-e882bde8a0.zip -------------------------------------------------------------------------------- /.yarn/cache/stylelint-npm-14.16.1-518d76e9e5-72883bfe2a.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/stylelint-npm-14.16.1-518d76e9e5-72883bfe2a.zip -------------------------------------------------------------------------------- /.yarn/cache/stylelint-order-npm-6.0.4-fa909cac07-a16a017bde.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/stylelint-order-npm-6.0.4-fa909cac07-a16a017bde.zip -------------------------------------------------------------------------------- /.yarn/cache/stylelint-plugin-defensive-css-npm-0.8.1-c10bb34122-8b231ef322.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/stylelint-plugin-defensive-css-npm-0.8.1-c10bb34122-8b231ef322.zip -------------------------------------------------------------------------------- /.yarn/cache/stylelint-scss-npm-4.7.0-e9df7622f7-6a49f1f193.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/stylelint-scss-npm-4.7.0-e9df7622f7-6a49f1f193.zip -------------------------------------------------------------------------------- /.yarn/cache/supports-color-npm-5.5.0-183ac537bc-5f505c6fa3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/supports-color-npm-5.5.0-183ac537bc-5f505c6fa3.zip -------------------------------------------------------------------------------- /.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-c8bb7afd56.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-c8bb7afd56.zip -------------------------------------------------------------------------------- /.yarn/cache/supports-hyperlinks-npm-2.3.0-d19176eba2-3e7df6e9ea.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/supports-hyperlinks-npm-2.3.0-d19176eba2-3e7df6e9ea.zip -------------------------------------------------------------------------------- /.yarn/cache/supports-preserve-symlinks-flag-npm-1.0.0-f17c4d0028-a9dc19ae22.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/supports-preserve-symlinks-flag-npm-1.0.0-f17c4d0028-a9dc19ae22.zip -------------------------------------------------------------------------------- /.yarn/cache/svg-tags-npm-1.0.0-68a35c11fa-407e5ef87c.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/svg-tags-npm-1.0.0-68a35c11fa-407e5ef87c.zip -------------------------------------------------------------------------------- /.yarn/cache/table-npm-6.8.2-e33ecc3c54-2946162eb8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/table-npm-6.8.2-e33ecc3c54-2946162eb8.zip -------------------------------------------------------------------------------- /.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-10dda13571.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-10dda13571.zip -------------------------------------------------------------------------------- /.yarn/cache/trim-newlines-npm-3.0.1-22f1f216de-b530f3fadf.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/trim-newlines-npm-3.0.1-22f1f216de-b530f3fadf.zip -------------------------------------------------------------------------------- /.yarn/cache/type-fest-npm-0.18.1-47b079775d-0884437705.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/type-fest-npm-0.18.1-47b079775d-0884437705.zip -------------------------------------------------------------------------------- /.yarn/cache/type-fest-npm-0.6.0-76b229965b-9ecbf4ba27.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/type-fest-npm-0.6.0-76b229965b-9ecbf4ba27.zip -------------------------------------------------------------------------------- /.yarn/cache/type-fest-npm-0.8.1-351ad028fe-fd4a91bfb7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/type-fest-npm-0.8.1-351ad028fe-fd4a91bfb7.zip -------------------------------------------------------------------------------- /.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip -------------------------------------------------------------------------------- /.yarn/cache/v8-compile-cache-npm-2.4.0-5979f8e405-49e726d7b2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/v8-compile-cache-npm-2.4.0-5979f8e405-49e726d7b2.zip -------------------------------------------------------------------------------- /.yarn/cache/validate-npm-package-license-npm-3.0.4-7af8adc7a8-86242519b2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/validate-npm-package-license-npm-3.0.4-7af8adc7a8-86242519b2.zip -------------------------------------------------------------------------------- /.yarn/cache/which-npm-1.3.1-f0ebb8bdd8-549dcf1752.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/which-npm-1.3.1-f0ebb8bdd8-549dcf1752.zip -------------------------------------------------------------------------------- /.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip -------------------------------------------------------------------------------- /.yarn/cache/write-file-atomic-npm-4.0.2-661baae4aa-3be1f5508a.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/write-file-atomic-npm-4.0.2-661baae4aa-3be1f5508a.zip -------------------------------------------------------------------------------- /.yarn/cache/yallist-npm-4.0.0-b493d9e907-4cb02b42b8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/yallist-npm-4.0.0-b493d9e907-4cb02b42b8.zip -------------------------------------------------------------------------------- /.yarn/cache/yaml-npm-1.10.2-0e780aebdf-e088b37b4d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/yaml-npm-1.10.2-0e780aebdf-e088b37b4d.zip -------------------------------------------------------------------------------- /.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-0188f430a0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-0188f430a0.zip -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | compressionLevel: mixed 2 | 3 | enableGlobalCache: false 4 | 5 | enableScripts: false 6 | 7 | logFilters: 8 | - code: YN0002 9 | level: discard 10 | - code: YN0004 11 | level: discard 12 | 13 | nodeLinker: pnp 14 | 15 | pnpEnableEsmLoader: true 16 | 17 | pnpFallbackMode: all 18 | 19 | pnpMode: strict 20 | 21 | supportedArchitectures: 22 | os: 23 | - current 24 | - linux 25 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Go Live Update Urls - WordPress Plugin 2 | 3 | This Readme is for development. 4 | 5 | Full plugin information is available in [readme.txt](readme.txt). 6 | 7 | ## Deploying to WordPress.org 8 | 9 | Using the [action provided by 10Up](https://github.com/10up/action-wordpress-plugin-deploy). 10 | 11 | New tags are automatically deployed to wordpress.org via SVN. 12 | 13 | ### Updating Readme or Assets between versions 14 | 15 | Using the [action provided by 10Up](https://github.com/10up/action-wordpress-plugin-asset-update). 16 | 17 | Changes to `readme.txt` or `.wordpress-org` on the `master` branch are automatically deployed to the matching tag on wordpress.org when 18 | the `deploy` branch is pushed. 19 | 20 | **If other changes have been made to the `master` branch, nothing will be deployed.** 21 | 22 | Plugin assets like screenshots are kept in the `.wordpress-org` directory. 23 | 24 | ## Configuration 25 | 26 | * Ignore files from SVN via `.distignore`. 27 | * Assets are updated within `.wordpress-org`. 28 | * SVN credentials are stored as [GitHub secrets](https://github.com/lipemat/go-live-update-urls/settings/secrets) 29 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lipemat/go-live-update-urls", 3 | "description": "Go Live Update Urls WordPress plugin", 4 | "type": "wordpress-plugin", 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "lipemat", 9 | "email": "support@onpointplugins.com" 10 | } 11 | ], 12 | "minimum-stability": "dev", 13 | "require": {} 14 | } 15 | -------------------------------------------------------------------------------- /dev/blueprint.html: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 15 | 63 | -------------------------------------------------------------------------------- /dev/git-hooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ##################################################################################### 4 | # 5 | # Test our code against various unit test systems and linters and prevent commit 6 | # if any of them fail. 7 | # 8 | # @notice Customized to support multiple versions of PHP is same runs. 9 | # 10 | # @see /dev/git-hooks.sh for installation as symbolic link 11 | # 12 | # @version 7.1.0 13 | 14 | JEST_CONFIG="jest/jest.config.ts" 15 | LEGACY_PHP_VERSION="7.4" 16 | PHP_VERSION="8.3" 17 | PHPUNIT_DIR="../go-live-update-urls-pro/dev/wp-unit" 18 | 19 | ##################################################################################### 20 | 21 | source /e/scripts/git/hooks/version-1/pre-commit-plugin 22 | -------------------------------------------------------------------------------- /dev/git-hooks/prepare-commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ###################################################### 3 | # 4 | # Prepend the current branch name to every commit message. 5 | # 6 | # @version 2.2.1 7 | # 8 | ###################################################### 9 | 10 | source /e/scripts/git/hooks/version-1/prepare-commit-msg 11 | -------------------------------------------------------------------------------- /dev/phpstan-baseline.php: -------------------------------------------------------------------------------- 1 | '#^Method Go_Live_Update_Urls\\\\Core\\:\\:flush_caches\\(\\) has no return type specified\\.$#', 7 | 'count' => 1, 8 | 'path' => __DIR__ . '/../src/Core.php', 9 | ]; 10 | $ignoreErrors[] = [ 11 | // identifier: missingType.iterableValue 12 | 'message' => '#^Method Go_Live_Update_Urls\\\\Core\\:\\:plugin_action_link\\(\\) has parameter \\$actions with no value type specified in iterable type array\\.$#', 13 | 'count' => 1, 14 | 'path' => __DIR__ . '/../src/Core.php', 15 | ]; 16 | $ignoreErrors[] = [ 17 | // identifier: missingType.iterableValue 18 | 'message' => '#^Method Go_Live_Update_Urls\\\\Core\\:\\:plugin_action_link\\(\\) return type has no value type specified in iterable type array\\.$#', 19 | 'count' => 1, 20 | 'path' => __DIR__ . '/../src/Core.php', 21 | ]; 22 | $ignoreErrors[] = [ 23 | // identifier: lipemat.noUnknownProperty 24 | 'message' => '#^Accessing `blogid` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 25 | 'count' => 1, 26 | 'path' => __DIR__ . '/../src/Database.php', 27 | ]; 28 | $ignoreErrors[] = [ 29 | // identifier: lipemat.noUnknownProperty 30 | 'message' => '#^Accessing `blogmeta` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 31 | 'count' => 2, 32 | 'path' => __DIR__ . '/../src/Database.php', 33 | ]; 34 | $ignoreErrors[] = [ 35 | // identifier: lipemat.noUnknownProperty 36 | 'message' => '#^Accessing `blogs` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 37 | 'count' => 1, 38 | 'path' => __DIR__ . '/../src/Database.php', 39 | ]; 40 | $ignoreErrors[] = [ 41 | // identifier: lipemat.noUnknownProperty 42 | 'message' => '#^Accessing `commentmeta` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 43 | 'count' => 2, 44 | 'path' => __DIR__ . '/../src/Database.php', 45 | ]; 46 | $ignoreErrors[] = [ 47 | // identifier: lipemat.noUnknownProperty 48 | 'message' => '#^Accessing `comments` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 49 | 'count' => 1, 50 | 'path' => __DIR__ . '/../src/Database.php', 51 | ]; 52 | $ignoreErrors[] = [ 53 | // identifier: lipemat.noUnknownProperty 54 | 'message' => '#^Accessing `dbname` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 55 | 'count' => 1, 56 | 'path' => __DIR__ . '/../src/Database.php', 57 | ]; 58 | $ignoreErrors[] = [ 59 | // identifier: lipemat.noUnknownProperty 60 | 'message' => '#^Accessing `links` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 61 | 'count' => 1, 62 | 'path' => __DIR__ . '/../src/Database.php', 63 | ]; 64 | $ignoreErrors[] = [ 65 | // identifier: lipemat.noUnknownProperty 66 | 'message' => '#^Accessing `options` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 67 | 'count' => 2, 68 | 'path' => __DIR__ . '/../src/Database.php', 69 | ]; 70 | $ignoreErrors[] = [ 71 | // identifier: lipemat.noUnknownProperty 72 | 'message' => '#^Accessing `postmeta` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 73 | 'count' => 2, 74 | 'path' => __DIR__ . '/../src/Database.php', 75 | ]; 76 | $ignoreErrors[] = [ 77 | // identifier: lipemat.noUnknownProperty 78 | 'message' => '#^Accessing `posts` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 79 | 'count' => 1, 80 | 'path' => __DIR__ . '/../src/Database.php', 81 | ]; 82 | $ignoreErrors[] = [ 83 | // identifier: lipemat.noUnknownProperty 84 | 'message' => '#^Accessing `prefix` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 85 | 'count' => 2, 86 | 'path' => __DIR__ . '/../src/Database.php', 87 | ]; 88 | $ignoreErrors[] = [ 89 | // identifier: lipemat.noUnknownProperty 90 | 'message' => '#^Accessing `registration_log` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 91 | 'count' => 1, 92 | 'path' => __DIR__ . '/../src/Database.php', 93 | ]; 94 | $ignoreErrors[] = [ 95 | // identifier: lipemat.noUnknownProperty 96 | 'message' => '#^Accessing `signups` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 97 | 'count' => 2, 98 | 'path' => __DIR__ . '/../src/Database.php', 99 | ]; 100 | $ignoreErrors[] = [ 101 | // identifier: lipemat.noUnknownProperty 102 | 'message' => '#^Accessing `site` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 103 | 'count' => 1, 104 | 'path' => __DIR__ . '/../src/Database.php', 105 | ]; 106 | $ignoreErrors[] = [ 107 | // identifier: lipemat.noUnknownProperty 108 | 'message' => '#^Accessing `sitecategories` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 109 | 'count' => 1, 110 | 'path' => __DIR__ . '/../src/Database.php', 111 | ]; 112 | $ignoreErrors[] = [ 113 | // identifier: lipemat.noUnknownProperty 114 | 'message' => '#^Accessing `sitemeta` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 115 | 'count' => 2, 116 | 'path' => __DIR__ . '/../src/Database.php', 117 | ]; 118 | $ignoreErrors[] = [ 119 | // identifier: lipemat.noUnknownProperty 120 | 'message' => '#^Accessing `term_relationships` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 121 | 'count' => 1, 122 | 'path' => __DIR__ . '/../src/Database.php', 123 | ]; 124 | $ignoreErrors[] = [ 125 | // identifier: lipemat.noUnknownProperty 126 | 'message' => '#^Accessing `term_taxonomy` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 127 | 'count' => 1, 128 | 'path' => __DIR__ . '/../src/Database.php', 129 | ]; 130 | $ignoreErrors[] = [ 131 | // identifier: lipemat.noUnknownProperty 132 | 'message' => '#^Accessing `termmeta` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 133 | 'count' => 2, 134 | 'path' => __DIR__ . '/../src/Database.php', 135 | ]; 136 | $ignoreErrors[] = [ 137 | // identifier: lipemat.noUnknownProperty 138 | 'message' => '#^Accessing `terms` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 139 | 'count' => 1, 140 | 'path' => __DIR__ . '/../src/Database.php', 141 | ]; 142 | $ignoreErrors[] = [ 143 | // identifier: lipemat.noUnknownProperty 144 | 'message' => '#^Accessing `usermeta` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 145 | 'count' => 2, 146 | 'path' => __DIR__ . '/../src/Database.php', 147 | ]; 148 | $ignoreErrors[] = [ 149 | // identifier: lipemat.noUnknownProperty 150 | 'message' => '#^Accessing `users` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 151 | 'count' => 1, 152 | 'path' => __DIR__ . '/../src/Database.php', 153 | ]; 154 | $ignoreErrors[] = [ 155 | // identifier: lipemat.noUnknownMethodCaller 156 | 'message' => '#^Calling `esc_like` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 157 | 'count' => 1, 158 | 'path' => __DIR__ . '/../src/Database.php', 159 | ]; 160 | $ignoreErrors[] = [ 161 | // identifier: lipemat.noUnknownMethodCaller 162 | 'message' => '#^Calling `get_col` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 163 | 'count' => 1, 164 | 'path' => __DIR__ . '/../src/Database.php', 165 | ]; 166 | $ignoreErrors[] = [ 167 | // identifier: lipemat.noUnknownMethodCaller 168 | 'message' => '#^Calling `get_var` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 169 | 'count' => 1, 170 | 'path' => __DIR__ . '/../src/Database.php', 171 | ]; 172 | $ignoreErrors[] = [ 173 | // identifier: lipemat.noUnknownMethodCaller 174 | 'message' => '#^Calling `prepare` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 175 | 'count' => 3, 176 | 'path' => __DIR__ . '/../src/Database.php', 177 | ]; 178 | $ignoreErrors[] = [ 179 | // identifier: lipemat.noUnknownMethodCaller 180 | 'message' => '#^Calling `query` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 181 | 'count' => 1, 182 | 'path' => __DIR__ . '/../src/Database.php', 183 | ]; 184 | $ignoreErrors[] = [ 185 | // identifier: lipemat.noUnknownProperty 186 | 'message' => '#^Accessing `Column_name` property on unknown `\\$pk\\[0\\]` can skip important errors\\. Make sure the type is known\\.$#', 187 | 'count' => 1, 188 | 'path' => __DIR__ . '/../src/Serialized.php', 189 | ]; 190 | $ignoreErrors[] = [ 191 | // identifier: lipemat.noUnknownProperty 192 | 'message' => '#^Accessing `column` property on unknown `\\$row` can skip important errors\\. Make sure the type is known\\.$#', 193 | 'count' => 2, 194 | 'path' => __DIR__ . '/../src/Serialized.php', 195 | ]; 196 | $ignoreErrors[] = [ 197 | // identifier: lipemat.noUnknownProperty 198 | 'message' => '#^Accessing `primary_key_column` property on unknown `\\$row` can skip important errors\\. Make sure the type is known\\.$#', 199 | 'count' => 2, 200 | 'path' => __DIR__ . '/../src/Serialized.php', 201 | ]; 202 | $ignoreErrors[] = [ 203 | // identifier: lipemat.noUnknownMethodCaller 204 | 'message' => '#^Calling `get_results` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 205 | 'count' => 3, 206 | 'path' => __DIR__ . '/../src/Serialized.php', 207 | ]; 208 | $ignoreErrors[] = [ 209 | // identifier: lipemat.noUnknownMethodCaller 210 | 'message' => '#^Calling `prepare` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 211 | 'count' => 1, 212 | 'path' => __DIR__ . '/../src/Serialized.php', 213 | ]; 214 | $ignoreErrors[] = [ 215 | // identifier: lipemat.noUnknownMethodCaller 216 | 'message' => '#^Calling `query` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 217 | 'count' => 1, 218 | 'path' => __DIR__ . '/../src/Serialized.php', 219 | ]; 220 | $ignoreErrors[] = [ 221 | // identifier: empty.notAllowed 222 | 'message' => '#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#', 223 | 'count' => 3, 224 | 'path' => __DIR__ . '/../src/Serialized.php', 225 | ]; 226 | $ignoreErrors[] = [ 227 | // identifier: missingType.iterableValue 228 | 'message' => '#^Method Go_Live_Update_Urls\\\\Serialized\\:\\:has_missing_classes\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#', 229 | 'count' => 1, 230 | 'path' => __DIR__ . '/../src/Serialized.php', 231 | ]; 232 | $ignoreErrors[] = [ 233 | // identifier: missingType.iterableValue 234 | 'message' => '#^Method Go_Live_Update_Urls\\\\Serialized\\:\\:replace_tree\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#', 235 | 'count' => 1, 236 | 'path' => __DIR__ . '/../src/Serialized.php', 237 | ]; 238 | $ignoreErrors[] = [ 239 | // identifier: missingType.iterableValue 240 | 'message' => '#^Method Go_Live_Update_Urls\\\\Serialized\\:\\:replace_tree\\(\\) return type has no value type specified in iterable type array\\.$#', 241 | 'count' => 1, 242 | 'path' => __DIR__ . '/../src/Serialized.php', 243 | ]; 244 | $ignoreErrors[] = [ 245 | // identifier: missingType.return 246 | 'message' => '#^Method Go_Live_Update_Urls\\\\Serialized\\:\\:set_dry_run\\(\\) has no return type specified\\.$#', 247 | 'count' => 1, 248 | 'path' => __DIR__ . '/../src/Serialized.php', 249 | ]; 250 | $ignoreErrors[] = [ 251 | // identifier: empty.notAllowed 252 | 'message' => '#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#', 253 | 'count' => 1, 254 | 'path' => __DIR__ . '/../src/Skip_Rows.php', 255 | ]; 256 | $ignoreErrors[] = [ 257 | // identifier: missingType.iterableValue 258 | 'message' => '#^Property Go_Live_Update_Urls\\\\Skip_Rows\\:\\:\\$primary_keys type has no value type specified in iterable type array\\.$#', 259 | 'count' => 1, 260 | 'path' => __DIR__ . '/../src/Skip_Rows.php', 261 | ]; 262 | $ignoreErrors[] = [ 263 | // identifier: lipemat.noUnknownProperty 264 | 'message' => '#^Accessing `dbname` property on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 265 | 'count' => 1, 266 | 'path' => __DIR__ . '/../src/Updates.php', 267 | ]; 268 | $ignoreErrors[] = [ 269 | // identifier: lipemat.noUnknownProperty 270 | 'message' => '#^Accessing `type` property on unknown `\\$column` can skip important errors\\. Make sure the type is known\\.$#', 271 | 'count' => 1, 272 | 'path' => __DIR__ . '/../src/Updates.php', 273 | ]; 274 | $ignoreErrors[] = [ 275 | // identifier: lipemat.noUnknownMethodCaller 276 | 'message' => '#^Calling `get_results` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 277 | 'count' => 1, 278 | 'path' => __DIR__ . '/../src/Updates.php', 279 | ]; 280 | $ignoreErrors[] = [ 281 | // identifier: lipemat.noUnknownMethodCaller 282 | 'message' => '#^Calling `prepare` method on unknown `\\$wpdb` can skip important errors\\. Make sure the type is known\\.$#', 283 | 'count' => 1, 284 | 'path' => __DIR__ . '/../src/Updates.php', 285 | ]; 286 | $ignoreErrors[] = [ 287 | // identifier: empty.notAllowed 288 | 'message' => '#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#', 289 | 'count' => 1, 290 | 'path' => __DIR__ . '/../src/Updates.php', 291 | ]; 292 | 293 | return ['parameters' => ['ignoreErrors' => $ignoreErrors]]; 294 | -------------------------------------------------------------------------------- /dev/phpstan-phpVersion-ignores.php: -------------------------------------------------------------------------------- 1 | = 80000 ) { 13 | // `array_combine` returns `false|array` in PHP 7 and `array` in PHP 8. 14 | $ignoreErrors[] = [ 15 | 'message' => '#^Strict comparison using \\=\\=\\= between false and array\\ will always evaluate to false\\.$#', 16 | 'count' => 2, 17 | 'path' => __DIR__ . '/../src/Updates.php', 18 | ]; 19 | } 20 | 21 | return [ 'parameters' => [ 'ignoreErrors' => $ignoreErrors ] ]; 22 | -------------------------------------------------------------------------------- /dev/stubs/go-live-update-urls-pro.stub: -------------------------------------------------------------------------------- 1 | ' ) ) { 45 | add_action( 'all_admin_notices', 'go_live_update_urls_pro_plugin_notice' ); 46 | remove_action( 'plugins_loaded', 'go_live_update_urls_pro_load', 9 ); 47 | } 48 | } 49 | 50 | add_action( 'plugins_loaded', 'go_live_update_urls_load', 8 ); 51 | 52 | /** 53 | * Autoload classes from PSR4 src directory 54 | * Mirrored after Composer dump-autoload for performance 55 | * 56 | * @since 5.0.0 57 | * 58 | * @param string $class_name - class to load. 59 | * 60 | * @return void 61 | */ 62 | function go_live_update_urls_autoload( $class_name ) { 63 | $classes = [ 64 | Admin::class => 'Admin.php', 65 | Core::class => 'Core.php', 66 | Database::class => 'Database.php', 67 | Repo::class => 'Updaters/Repo.php', 68 | Serialized::class => 'Serialized.php', 69 | Singleton::class => 'Traits/Singleton.php', 70 | Skip_Rows::class => 'Skip_Rows.php', 71 | Updates::class => 'Updates.php', 72 | Updaters_Abstract::class => 'Updaters/Updaters_Abstract.php', 73 | Url_Encoded::class => 'Updaters/Url_Encoded.php', 74 | ]; 75 | if ( isset( $classes[ $class_name ] ) ) { 76 | require __DIR__ . '/src/' . $classes[ $class_name ]; 77 | } 78 | } 79 | 80 | spl_autoload_register( 'go_live_update_urls_autoload' ); 81 | 82 | /** 83 | * Display a warning if we don't have the required PRO version installed 84 | * 85 | * @return void 86 | */ 87 | function go_live_update_urls_pro_plugin_notice() { 88 | ?> 89 |
90 |

91 | ]{%2$s}[] */ 93 | printf( esc_html_x( 'Go Live Update Urls requires %1$sGo Live Update Urls PRO %3$s+%2$s. Please update or deactivate the PRO version.', '{}{}', 'go-live-update-urls' ), '', '', esc_attr( GO_LIVE_UPDATE_URLS_REQUIRED_PRO_VERSION ) ); 94 | ?> 95 |

96 |
97 | \n" 7 | "Language-Team: \n" 8 | "Language: de_DE\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 13 | "X-Domain: go-live-update-urls\n" 14 | "X-Generator: Poedit 2.4.3\n" 15 | "X-Poedit-Basepath: ..\n" 16 | "X-Poedit-WPHeader: go-live-update-urls.php\n" 17 | "X-Poedit-SourceCharset: UTF-8\n" 18 | "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" 19 | "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" 20 | "_nx_noop:3c,1,2;__ngettext_noop:1,2\n" 21 | "X-Poedit-SearchPath-0: .\n" 22 | "X-Poedit-SearchPathExcluded-0: *.js\n" 23 | "X-Poedit-SearchPathExcluded-1: .yarn\n" 24 | 25 | #: go-live-update-urls.php:93 26 | #, php-format 27 | msgctxt "{}{}" 28 | msgid "" 29 | "Go Live Update Urls requires %1$sGo Live Update Urls PRO %3$s+%2$s. Please " 30 | "update or deactivate the PRO version." 31 | msgstr "" 32 | "Go Live Update Urls erfordert %1$sGo Live Update Urls PRO %3$s+%2$s. Bitte " 33 | "aktualisieren oder deaktivieren Sie die PRO-Version." 34 | 35 | #: src/Admin.php:49 36 | msgid "Ouch! That hurt! You should not be here!" 37 | msgstr "Autsch! Das tut weh! Du solltest nicht hier sein!" 38 | 39 | #: src/Admin.php:83 40 | msgid "The urls in the checked tables have been updated." 41 | msgstr "Die URLs in den überprüften Tabellen wurden aktualisiert." 42 | 43 | #: src/Admin.php:102 44 | msgid "" 45 | "You must select tables and fill out both the Old URL and New URL to update " 46 | "urls!" 47 | msgstr "Sie müssen beide URLs ausfüllen, um das Update durchzuführen!" 48 | 49 | #. Plugin Name of the plugin/theme 50 | #: src/Admin.php:151 51 | msgid "Go Live Update Urls" 52 | msgstr "Go Live Update Urls" 53 | 54 | #: src/Admin.php:156 55 | msgid "" 56 | "Replaces all occurrences in the entire database of the Old URL with a New " 57 | "URL." 58 | msgstr "" 59 | "Ersetzt alle Vorkommen in der gesamten Datenbank der alten URL durch eine " 60 | "neue URL." 61 | 62 | #: src/Admin.php:188 63 | msgid "WordPress Core Tables" 64 | msgstr "WordPress Core-Tabellen" 65 | 66 | #: src/Admin.php:193 67 | msgid "These tables are safe to update." 68 | msgstr "Diese Tabellen können sicher aktualisiert werden." 69 | 70 | #: src/Admin.php:203 src/Admin.php:233 71 | msgid "Only the checked tables will be updated." 72 | msgstr "Nur die überprüften Tabellen werden aktualisiert." 73 | 74 | #: src/Admin.php:217 75 | msgid "Tables Created By Plugins" 76 | msgstr "Tabellen erstellt von Plugins" 77 | 78 | #: src/Admin.php:224 79 | #, php-format 80 | msgctxt "{
}{}{}" 81 | msgid "" 82 | "These tables are not safe to update with the basic version of this plugin! " 83 | "%1$sTo update tables created by plugins, use the %2$sPRO version.%3$s" 84 | msgstr "" 85 | "Diese Tabellen sind nicht sicher mit der Basisversion dieses Plugins zu " 86 | "aktualisieren! %1$sUm Tabellen zu aktualisieren, die von Plugins erstellt " 87 | "wurden, verwenden Sie die %2$sPRO-Version.%3$s" 88 | 89 | #: src/Admin.php:253 src/Admin.php:263 90 | msgid "Old URL" 91 | msgstr "Alte URL" 92 | 93 | #: src/Admin.php:269 src/Admin.php:279 94 | msgid "New URL" 95 | msgstr "Neue URL" 96 | 97 | #: src/Admin.php:294 98 | #, php-format 99 | msgctxt "{}{}" 100 | msgid "Use the %1$sPRO version%2$s to test URL updates before making them." 101 | msgstr "" 102 | "Verwenden Sie die %1$sPRO-Version%2$s, um URL-Aktualisierungen zu testen, " 103 | "bevor Sie sie erstellen." 104 | 105 | #: src/Admin.php:302 106 | msgid "Update Urls" 107 | msgstr "Urls aktualisieren" 108 | 109 | #: src/Core.php:119 110 | msgid "Settings" 111 | msgstr "Einstellungen" 112 | 113 | #: src/Core.php:121 114 | msgid "Go PRO" 115 | msgstr "Gehen Sie PRO" 116 | 117 | #: src/Skip_Rows.php:87 118 | msgid "You must set a table and DB id before skipping a row." 119 | msgstr "" 120 | 121 | #. Plugin URI of the plugin/theme 122 | msgid "https://onpointplugins.com/go-live-update-urls/" 123 | msgstr "https://onpointplugins.com/go-live-update-urls/" 124 | 125 | #. Description of the plugin/theme 126 | msgid "Updates every URL on your site when going live or changing domains." 127 | msgstr "" 128 | "Aktualisiert jede URL auf Ihrer Website, wenn sie live geht oder die Domain " 129 | "wechselt." 130 | 131 | #. Author of the plugin/theme 132 | msgid "OnPoint Plugins" 133 | msgstr "OnPoint Plugins" 134 | 135 | #. Author URI of the plugin/theme 136 | msgid "https://onpointplugins.com" 137 | msgstr "https://onpointplugins.com" 138 | 139 | #~ msgid "You must implement apply_rule_to_url with an override" 140 | #~ msgstr "" 141 | #~ "Sie müssen apply_rule_to_url mit einer Außerkraftsetzung implementieren" 142 | 143 | #~ msgid "" 144 | #~ "Like any other database updating tool, you should always perform a backup " 145 | #~ "before running." 146 | #~ msgstr "" 147 | #~ "Wie jedes andere Datenbankaktualisierungstool sollten Sie vor dem " 148 | #~ "Ausführen immer eine Sicherung durchführen." 149 | 150 | #~ msgid "" 151 | #~ "OnPoint Plugins Author URI: https://onpointplugins.com/ Version: 5.3.0 " 152 | #~ "Text Domain:" 153 | #~ msgstr "" 154 | #~ "OnPoint Plugins Author URI: https://onpointplugins.com/ Version: 5.3.0 " 155 | #~ "Text Domain:" 156 | 157 | #~ msgid "https://onpointplugins.com/ Version: 5.3.0 Text Domain:" 158 | #~ msgstr "https://onpointplugins.com/ Version: 5.3.0 Text Domain:" 159 | 160 | #~ msgid "Serialized" 161 | #~ msgstr "Seriell" 162 | 163 | #, php-format 164 | #~ msgctxt "{}{}" 165 | #~ msgid "" 166 | #~ "To test this change before running it, use %1$sPro Version 2.0.0+%2$s." 167 | #~ msgstr "" 168 | #~ "Um diese Änderung vor dem Ausführen zu testen, verwenden Sie%1$sPro " 169 | #~ "Version 2.0.0 +%2$s." 170 | 171 | #~ msgid "Go Live Update URLS" 172 | #~ msgstr "Go Live Update URLS" 173 | 174 | #~ msgid "Mat Lipe" 175 | #~ msgstr "Mat Lipe" 176 | -------------------------------------------------------------------------------- /languages/go-live-update-urls-es_ES.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/languages/go-live-update-urls-es_ES.mo -------------------------------------------------------------------------------- /languages/go-live-update-urls-es_ES.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Go Live Update Urls\n" 4 | "POT-Creation-Date: 2025-04-08 10:20-0400\n" 5 | "PO-Revision-Date: 2025-04-08 10:21-0400\n" 6 | "Last-Translator: Mat Lipe \n" 7 | "Language-Team: \n" 8 | "Language: es_ES\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 13 | "X-Domain: go-live-update-urls\n" 14 | "X-Generator: Poedit 2.4.3\n" 15 | "X-Poedit-Basepath: ..\n" 16 | "X-Poedit-WPHeader: go-live-update-urls.php\n" 17 | "X-Poedit-SourceCharset: UTF-8\n" 18 | "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" 19 | "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" 20 | "_nx_noop:3c,1,2;__ngettext_noop:1,2\n" 21 | "X-Poedit-SearchPath-0: .\n" 22 | "X-Poedit-SearchPathExcluded-0: *.js\n" 23 | "X-Poedit-SearchPathExcluded-1: .yarn\n" 24 | 25 | #: go-live-update-urls.php:93 26 | #, php-format 27 | msgctxt "{}{}" 28 | msgid "" 29 | "Go Live Update Urls requires %1$sGo Live Update Urls PRO %3$s+%2$s. Please " 30 | "update or deactivate the PRO version." 31 | msgstr "" 32 | "Go Live Update Urls requiere %1$sGo Live Update Urls PRO %3$s+%2$s. " 33 | "Actualice o desactive la versión PRO." 34 | 35 | #: src/Admin.php:49 36 | msgid "Ouch! That hurt! You should not be here!" 37 | msgstr "¡Ay! ¡Eso duele! ¡No deberías estar aquí!" 38 | 39 | #: src/Admin.php:83 40 | msgid "The urls in the checked tables have been updated." 41 | msgstr "Las URL en las tablas comprobadas se han actualizado." 42 | 43 | #: src/Admin.php:102 44 | msgid "" 45 | "You must select tables and fill out both the Old URL and New URL to update " 46 | "urls!" 47 | msgstr "" 48 | "Debe seleccionar tablas y rellenar tanto la URL antigua como la nueva URL " 49 | "para actualizar las URL!" 50 | 51 | #. Plugin Name of the plugin/theme 52 | #: src/Admin.php:151 53 | msgid "Go Live Update Urls" 54 | msgstr "Go Live Update Urls" 55 | 56 | #: src/Admin.php:156 57 | msgid "" 58 | "Replaces all occurrences in the entire database of the Old URL with a New " 59 | "URL." 60 | msgstr "" 61 | "Reemplaza todas las apariciones de toda la base de datos de la dirección URL " 62 | "antigua por una nueva dirección URL." 63 | 64 | #: src/Admin.php:188 65 | msgid "WordPress Core Tables" 66 | msgstr "Tablas Principales de WordPress" 67 | 68 | #: src/Admin.php:193 69 | msgid "These tables are safe to update." 70 | msgstr "Todas las tablas son seguras para actualizar." 71 | 72 | #: src/Admin.php:203 src/Admin.php:233 73 | msgid "Only the checked tables will be updated." 74 | msgstr "Solo las tablas comprobadas serán actualizadas." 75 | 76 | #: src/Admin.php:217 77 | msgid "Tables Created By Plugins" 78 | msgstr "Tablas creadas por complementos" 79 | 80 | #: src/Admin.php:224 81 | #, php-format 82 | msgctxt "{
}{}{}" 83 | msgid "" 84 | "These tables are not safe to update with the basic version of this plugin! " 85 | "%1$sTo update tables created by plugins, use the %2$sPRO version.%3$s" 86 | msgstr "" 87 | "Estas tablas no son seguras para actualizar con la versión básica de este " 88 | "plugin! %1$sPara actualizar tablas creadas por plugins, utilice la versión " 89 | "%2$sPRO.%3$s" 90 | 91 | #: src/Admin.php:253 src/Admin.php:263 92 | msgid "Old URL" 93 | msgstr "URL antigua" 94 | 95 | #: src/Admin.php:269 src/Admin.php:279 96 | msgid "New URL" 97 | msgstr "Nueva URL" 98 | 99 | #: src/Admin.php:294 100 | #, php-format 101 | msgctxt "{}{}" 102 | msgid "Use the %1$sPRO version%2$s to test URL updates before making them." 103 | msgstr "" 104 | "Utilice %1$sPRO versión%2$s para probar las actualizaciones de URL antes de " 105 | "realizarlas." 106 | 107 | #: src/Admin.php:302 108 | msgid "Update Urls" 109 | msgstr "Actualizar Urls" 110 | 111 | #: src/Core.php:119 112 | msgid "Settings" 113 | msgstr "Ajustes" 114 | 115 | #: src/Core.php:121 116 | msgid "Go PRO" 117 | msgstr "Actualizar a PRO" 118 | 119 | #: src/Skip_Rows.php:87 120 | msgid "You must set a table and DB id before skipping a row." 121 | msgstr "" 122 | 123 | #. Plugin URI of the plugin/theme 124 | msgid "https://onpointplugins.com/go-live-update-urls/" 125 | msgstr "https://onpointplugins.com/go-live-update-urls/" 126 | 127 | #. Description of the plugin/theme 128 | msgid "Updates every URL on your site when going live or changing domains." 129 | msgstr "" 130 | "Actualiza todas las URL de tu sitio cuando se publica o se cambia de dominio." 131 | 132 | #. Author of the plugin/theme 133 | msgid "OnPoint Plugins" 134 | msgstr "OnPoint Plugins" 135 | 136 | #. Author URI of the plugin/theme 137 | msgid "https://onpointplugins.com" 138 | msgstr "https://onpointplugins.com" 139 | 140 | #~ msgid "You must implement apply_rule_to_url with an override" 141 | #~ msgstr "Debe implementar apply_rule_to_url con una invalidación" 142 | 143 | #~ msgid "" 144 | #~ "Like any other database updating tool, you should always perform a backup " 145 | #~ "before running." 146 | #~ msgstr "" 147 | #~ "Al igual que cualquier otra herramienta de actualización de base de " 148 | #~ "datos, siempre debe realizar una copia de seguridad antes de ejecutar." 149 | 150 | #~ msgid "" 151 | #~ "OnPoint Plugins Author URI: https://onpointplugins.com/ Version: 5.3.0 " 152 | #~ "Text Domain:" 153 | #~ msgstr "" 154 | #~ "OnPoint Plugins Author URI: https://onpointplugins.com/ Version: 5.3.0 " 155 | #~ "Text Domain:" 156 | 157 | #~ msgid "https://onpointplugins.com/ Version: 5.3.0 Text Domain:" 158 | #~ msgstr "https://onpointplugins.com/ Version: 5.3.0 Text Domain:" 159 | 160 | #~ msgid "Serialized" 161 | #~ msgstr "Serializado" 162 | 163 | #, php-format 164 | #~ msgctxt "{}{}" 165 | #~ msgid "" 166 | #~ "To test this change before running it, use %1$sPro Version 2.0.0+%2$s." 167 | #~ msgstr "" 168 | #~ "Para probar este cambio antes de ejecutarlo, use%1$sPro Versión 2.0.0+" 169 | #~ "%2$s." 170 | -------------------------------------------------------------------------------- /languages/go-live-update-urls-fr_FR.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lipemat/go-live-update-urls/68d0676e5e4d633fccf3f9a20c4296bd4943e3ff/languages/go-live-update-urls-fr_FR.mo -------------------------------------------------------------------------------- /languages/go-live-update-urls-fr_FR.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Go Live Update Urls\n" 4 | "POT-Creation-Date: 2025-04-08 10:21-0400\n" 5 | "PO-Revision-Date: 2025-04-08 10:22-0400\n" 6 | "Last-Translator: Mat Lipe \n" 7 | "Language-Team: \n" 8 | "Language: fr_FR\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 13 | "X-Domain: go-live-update-urls\n" 14 | "X-Generator: Poedit 2.4.3\n" 15 | "X-Poedit-Basepath: ..\n" 16 | "X-Poedit-WPHeader: go-live-update-urls.php\n" 17 | "X-Poedit-SourceCharset: UTF-8\n" 18 | "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" 19 | "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" 20 | "_nx_noop:3c,1,2;__ngettext_noop:1,2\n" 21 | "X-Poedit-SearchPath-0: .\n" 22 | "X-Poedit-SearchPathExcluded-0: *.js\n" 23 | "X-Poedit-SearchPathExcluded-1: .yarn\n" 24 | 25 | #: go-live-update-urls.php:93 26 | #, php-format 27 | msgctxt "{}{}" 28 | msgid "" 29 | "Go Live Update Urls requires %1$sGo Live Update Urls PRO %3$s+%2$s. Please " 30 | "update or deactivate the PRO version." 31 | msgstr "" 32 | "Go Live Update Urls nécessite %1$sGo Live Update Urls PRO %3$s -%2$s. " 33 | "Veuillez mettre à jour ou désactiver la version PRO." 34 | 35 | #: src/Admin.php:49 36 | msgid "Ouch! That hurt! You should not be here!" 37 | msgstr "Aie! Ça fait mal! Tu ne devrais pas être ici!" 38 | 39 | #: src/Admin.php:83 40 | msgid "The urls in the checked tables have been updated." 41 | msgstr "Les URL dans les tables vérifiées ont été mises à jour." 42 | 43 | #: src/Admin.php:102 44 | msgid "" 45 | "You must select tables and fill out both the Old URL and New URL to update " 46 | "urls!" 47 | msgstr "" 48 | "Vous devez sélectionner des tables et remplir à la fois l’ancienne URL et la " 49 | "nouvelle URL pour mettre à jour les URL!" 50 | 51 | #. Plugin Name of the plugin/theme 52 | #: src/Admin.php:151 53 | msgid "Go Live Update Urls" 54 | msgstr "Go Live Update Urls" 55 | 56 | #: src/Admin.php:156 57 | msgid "" 58 | "Replaces all occurrences in the entire database of the Old URL with a New " 59 | "URL." 60 | msgstr "" 61 | "Remplace tous les occurrences de l’ensemble de la base de données de " 62 | "l’ancienne URL par une nouvelle URL." 63 | 64 | #: src/Admin.php:188 65 | msgid "WordPress Core Tables" 66 | msgstr "Tables de base WordPress" 67 | 68 | #: src/Admin.php:193 69 | msgid "These tables are safe to update." 70 | msgstr "Toutes les tables peuvent être mises à jour en toute sécurité." 71 | 72 | #: src/Admin.php:203 src/Admin.php:233 73 | msgid "Only the checked tables will be updated." 74 | msgstr "Seules les tables vérifiées seront mises à jour." 75 | 76 | #: src/Admin.php:217 77 | msgid "Tables Created By Plugins" 78 | msgstr "Tables créées par des plugins" 79 | 80 | #: src/Admin.php:224 81 | #, php-format 82 | msgctxt "{
}{}{}" 83 | msgid "" 84 | "These tables are not safe to update with the basic version of this plugin! " 85 | "%1$sTo update tables created by plugins, use the %2$sPRO version.%3$s" 86 | msgstr "" 87 | "Ces tables ne sont pas sûrs à mettre à jour avec la version de base de ce " 88 | "plugin! %1$sPour mettre à jour les tables créées par les plugins, utilisez " 89 | "la version %2$sPRO.%3$s" 90 | 91 | #: src/Admin.php:253 src/Admin.php:263 92 | msgid "Old URL" 93 | msgstr "Ancienne URL" 94 | 95 | #: src/Admin.php:269 src/Admin.php:279 96 | msgid "New URL" 97 | msgstr "Nouvelle URL" 98 | 99 | #: src/Admin.php:294 100 | #, php-format 101 | msgctxt "{}{}" 102 | msgid "Use the %1$sPRO version%2$s to test URL updates before making them." 103 | msgstr "" 104 | "Utilisez la version %1$sPRO%2$s pour tester les mises à jour de l’URL avant " 105 | "de les effectuer." 106 | 107 | #: src/Admin.php:302 108 | msgid "Update Urls" 109 | msgstr "Mettre à jour les Urls" 110 | 111 | #: src/Core.php:119 112 | msgid "Settings" 113 | msgstr "Paramètres" 114 | 115 | #: src/Core.php:121 116 | msgid "Go PRO" 117 | msgstr "Passer à la version pro" 118 | 119 | #: src/Skip_Rows.php:87 120 | msgid "You must set a table and DB id before skipping a row." 121 | msgstr "" 122 | 123 | #. Plugin URI of the plugin/theme 124 | msgid "https://onpointplugins.com/go-live-update-urls/" 125 | msgstr "https://onpointplugins.com/go-live-update-urls/" 126 | 127 | #. Description of the plugin/theme 128 | msgid "Updates every URL on your site when going live or changing domains." 129 | msgstr "" 130 | "Met à jour toutes les URL de votre site lors de la mise en ligne ou du " 131 | "changement de domaine." 132 | 133 | #. Author of the plugin/theme 134 | msgid "OnPoint Plugins" 135 | msgstr "OnPoint Plugins" 136 | 137 | #. Author URI of the plugin/theme 138 | msgid "https://onpointplugins.com" 139 | msgstr "https://onpointplugins.com" 140 | 141 | #~ msgid "You must implement apply_rule_to_url with an override" 142 | #~ msgstr "Vous devez mettre en œuvre apply_rule_to_url avec un remplacement" 143 | 144 | #~ msgid "" 145 | #~ "Like any other database updating tool, you should always perform a backup " 146 | #~ "before running." 147 | #~ msgstr "" 148 | #~ "Comme tout autre outil de mise à jour de base de données, vous devez " 149 | #~ "toujours effectuer une sauvegarde avant de l'exécuter." 150 | 151 | #~ msgid "" 152 | #~ "OnPoint Plugins Author URI: https://onpointplugins.com/ Version: 5.3.0 " 153 | #~ "Text Domain:" 154 | #~ msgstr "" 155 | #~ "OnPoint Plugins Author URI: https://onpointplugins.com/ Version: 5.3.0 " 156 | #~ "Text Domain:" 157 | 158 | #~ msgid "https://onpointplugins.com/ Version: 5.3.0 Text Domain:" 159 | #~ msgstr "https://onpointplugins.com/ Version: 5.3.0 Text Domain:" 160 | 161 | #~ msgid "Serialized" 162 | #~ msgstr "Serial" 163 | 164 | #, php-format 165 | #~ msgctxt "{}{}" 166 | #~ msgid "" 167 | #~ "To test this change before running it, use %1$sPro Version 2.0.0+%2$s." 168 | #~ msgstr "" 169 | #~ "Pour tester cette modification avant de l'exécuter, utilisez%1$sPro " 170 | #~ "Version 2.0.0 +%2$s." 171 | -------------------------------------------------------------------------------- /languages/go-live-update-urls.pot: -------------------------------------------------------------------------------- 1 | #, fuzzy 2 | msgid "" 3 | msgstr "" 4 | "Project: https://translate.wordpress.org/projects/wp-plugins/go-live-update-" 5 | "urls\n" 6 | "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" 7 | "Project-Id-Version: Go Live Update URLS\n" 8 | "POT-Creation-Date: 2025-04-08 10:20-0400\n" 9 | "PO-Revision-Date: 2016-05-15 10:47-0400\n" 10 | "Last-Translator: \n" 11 | "Language-Team: \n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "X-Domain: go-live-update-urls\n" 16 | "X-Generator: Poedit 2.4.3\n" 17 | "X-Poedit-Basepath: ..\n" 18 | "X-Poedit-WPHeader: go-live-update-urls.php\n" 19 | "X-Poedit-SourceCharset: UTF-8\n" 20 | "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" 21 | "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;" 22 | "_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n" 23 | "X-Poedit-SearchPath-0: .\n" 24 | "X-Poedit-SearchPathExcluded-0: *.js\n" 25 | "X-Poedit-SearchPathExcluded-1: .yarn\n" 26 | 27 | #: go-live-update-urls.php:93 28 | #, php-format 29 | msgctxt "{}{}" 30 | msgid "" 31 | "Go Live Update Urls requires %1$sGo Live Update Urls PRO %3$s+%2$s. Please " 32 | "update or deactivate the PRO version." 33 | msgstr "" 34 | 35 | #: src/Admin.php:49 36 | msgid "Ouch! That hurt! You should not be here!" 37 | msgstr "" 38 | 39 | #: src/Admin.php:83 40 | msgid "The urls in the checked tables have been updated." 41 | msgstr "" 42 | 43 | #: src/Admin.php:102 44 | msgid "" 45 | "You must select tables and fill out both the Old URL and New URL to update " 46 | "urls!" 47 | msgstr "" 48 | 49 | #. Plugin Name of the plugin/theme 50 | #: src/Admin.php:151 51 | msgid "Go Live Update Urls" 52 | msgstr "" 53 | 54 | #: src/Admin.php:156 55 | msgid "" 56 | "Replaces all occurrences in the entire database of the Old URL with a New " 57 | "URL." 58 | msgstr "" 59 | 60 | #: src/Admin.php:188 61 | msgid "WordPress Core Tables" 62 | msgstr "" 63 | 64 | #: src/Admin.php:193 65 | msgid "These tables are safe to update." 66 | msgstr "" 67 | 68 | #: src/Admin.php:203 src/Admin.php:233 69 | msgid "Only the checked tables will be updated." 70 | msgstr "" 71 | 72 | #: src/Admin.php:217 73 | msgid "Tables Created By Plugins" 74 | msgstr "" 75 | 76 | #: src/Admin.php:224 77 | #, php-format 78 | msgctxt "{
}{}{}" 79 | msgid "" 80 | "These tables are not safe to update with the basic version of this plugin! " 81 | "%1$sTo update tables created by plugins, use the %2$sPRO version.%3$s" 82 | msgstr "" 83 | 84 | #: src/Admin.php:253 src/Admin.php:263 85 | msgid "Old URL" 86 | msgstr "" 87 | 88 | #: src/Admin.php:269 src/Admin.php:279 89 | msgid "New URL" 90 | msgstr "" 91 | 92 | #: src/Admin.php:294 93 | #, php-format 94 | msgctxt "{}{}" 95 | msgid "Use the %1$sPRO version%2$s to test URL updates before making them." 96 | msgstr "" 97 | 98 | #: src/Admin.php:302 99 | msgid "Update Urls" 100 | msgstr "" 101 | 102 | #: src/Core.php:119 103 | msgid "Settings" 104 | msgstr "" 105 | 106 | #: src/Core.php:121 107 | msgid "Go PRO" 108 | msgstr "" 109 | 110 | #: src/Skip_Rows.php:87 111 | msgid "You must set a table and DB id before skipping a row." 112 | msgstr "" 113 | 114 | #. Plugin URI of the plugin/theme 115 | msgid "https://onpointplugins.com/go-live-update-urls/" 116 | msgstr "" 117 | 118 | #. Description of the plugin/theme 119 | msgid "Updates every URL on your site when going live or changing domains." 120 | msgstr "" 121 | 122 | #. Author of the plugin/theme 123 | msgid "OnPoint Plugins" 124 | msgstr "" 125 | 126 | #. Author URI of the plugin/theme 127 | msgid "https://onpointplugins.com" 128 | msgstr "" 129 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@onpointplugins/go-live-update-urls", 3 | "version": "9.1.0", 4 | "description": "Tools for the Go Live Update Urls plugin.", 5 | "author": "OnPoint Plugins ", 6 | "license": "UNLICENSED", 7 | "browserslist": [ 8 | "extends @wordpress/browserslist-config" 9 | ], 10 | "scripts": { 11 | "lint": "stylelint resources/**/*.css --fix --cache" 12 | }, 13 | "devDependencies": { 14 | "@lipemat/stylelint-config": "^2.2.1", 15 | "stylelint": "^14" 16 | }, 17 | "packageManager": "yarn@4.6.0" 18 | } 19 | -------------------------------------------------------------------------------- /phpcs.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | --> 4 | 5 | Ruleset for the Go Live Update Urls plugin. 6 | 4.2.1 7 | 8 | 9 | ./ 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /phpstan.neon.dist: -------------------------------------------------------------------------------- 1 | includes: 2 | # Include the lipemat phpstan rules. 3 | - %rootDir%/../../../rules.neon 4 | # Baseline file full of @todo 5 | - dev/phpstan-baseline.php 6 | # PHP version specific ignores. 7 | - dev/phpstan-phpVersion-ignores.php 8 | 9 | parameters: 10 | level: 8 11 | lipemat: 12 | allowedToBeExtended: 13 | - Go_Live_Update_Urls\Updaters\Updaters_Abstract 14 | noExtends: true 15 | nonDistributed: false 16 | paths: 17 | - go-live-update-urls.php 18 | - src 19 | dynamicConstantNames: 20 | - GO_LIVE_UPDATE_URLS_PRO_VERSION 21 | - GO_LIVE_UPDATE_URLS_REQUIRED_PRO_VERSION 22 | bootstrapFiles: 23 | - go-live-update-urls.php 24 | scanFiles: 25 | - dev/stubs/go-live-update-urls-pro.stub 26 | ignoreErrors: 27 | - # Serialized data has unknown keys which require variables. 28 | message: '#^Variable property access on#' 29 | path: src/Serialized.php 30 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | === Go Live Update Urls === 2 | Contributors: onpointplugins, Mat Lipe 3 | Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=paypal%40onpointplugins%2ecom&lc=US&item_name=Go%20Live%20Update%20Urls&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest 4 | Tags: search and replace, database, urls, domain, update urls 5 | Requires at least: 6.2.0 6 | Tested up to: 6.8.1 7 | Requires PHP: 7.4.0 8 | Stable tag: 7.0.5 9 | License: GPLv3 or later 10 | License URI: http://www.gnu.org/licenses/gpl-3.0.html 11 | Change the domain on your site with one click. 12 | 13 | == Description == 14 | 15 | ### Change the domain on your site with one click. 16 | 17 | Goes through entire site and replaces all instances of an old URL with a new one. Used most often when changing the domain of your site. 18 | 19 | Automatically detects and handles special domain circumstances to give you an accurate update every time without side effects. 20 | 21 | **Developed and supported by OnPoint Plugins.** 22 | 23 | ### Features 24 | 25 | * Database table by table selection. 26 | * Updates serialized data in core tables. 27 | * Updates encoded URL. 28 | * Easy to use admin page - which may be found under Tools. 29 | * Works on both multisite and single site installs. 30 | 31 | ### Updates Entire Site Including 32 | 33 | * Posts 34 | * Pages 35 | * Image URLs 36 | * Excerpts 37 | * Post meta data 38 | * Custom post types 39 | * Widgets and widget data 40 | * Options and settings 41 | * And much more 42 | 43 | 44 |

Domain Update Process

45 | Full step-by-step instructions for a changing a site's domain may be found here. 46 | 47 |

Included Language Translations

48 | * English (en_US). 49 | * French (fr_FR). 50 | * German (de_DE). 51 | * Spanish (es_ES). 52 | 53 |

Developers

54 | Developer docs may be found here. 55 | 56 |

Troubleshooting

57 | Troubleshooting information may be found here. 58 | 59 |

Contribute

60 | Send pull requests via the Github Repo 61 | 62 |

Go PRO

63 | Our [PRO version](https://onpointplugins.com/product/go-live-update-urls-pro/?utm_source=readme&utm_campaign=gopro&utm_medium=dot-org) brings additional functionality to this plugin. Check out [the demo](https://onpointplugins.com/go-live-update-urls/go-live-update-urls-pro-demo/?utm_source=demo&utm_campaign=gopro&utm_medium=dot-org) to see if the PRO version is useful for you. 64 | 65 | * Updates database tables created by plugins. 66 | * Database tables are organized into simple intuitive sections. 67 | * Ability to choose between tables or sections. 68 | * Ability to convert relative URL into absolute URL. 69 | * Updates serialized data across any table. 70 | * Updates encoded URL across any table. 71 | * Updates JSON data across any table. 72 | * Ability to test URL changes before running them. 73 | * URL testing report is provided for peace of mind. 74 | * Option to fix common mistakes automatically when entering a URL. 75 | * View and use history of your site's address. 76 | * Accessible update history including count and location of updated URL. **New** 77 | * Predictive URL automatically fill in the "Old URL" and "New URL." 78 | * Real time reporting of count and location of URL which will be updated. 79 | * Report of count and location of URL which were updated. 80 | * WP-CLI support for updating URL from the command line. 81 | * Priority support with access to members only support area. 82 | 83 | == Installation == 84 | 85 | Use the standard WordPress plugins search and installer. 86 | Activate the plugin. 87 | Use the "Go Live" page, located under the Tools menu, in the WordPress admin. 88 | 89 | Manual Installation 90 | 91 | 1. Upload the `go-live-upload-urls` folder to the `/wp-content/plugins/` directory. 92 | 2. Activate the plugin through the 'Plugins' menu in WordPress. 93 | 94 | == Frequently Asked Questions == 95 | 96 | = Where do you use this plugin? = 97 | 98 | Under the Tools menu in the dashboard there will be a "Go Live" link. 99 | 100 | = Why does updating the domain break some plugins? = 101 | 102 | Some plugins will store the serialized or JSON data in the database which does not allow for easy updating of the data. You may un-check tables used by such plugins and then update the urls manually for those plugins. Currently, the options, postmeta, usermeta, commentmeta, blogmeta, and sitemeta tables are serialization safe. The PRO Version supports updating all tables created by plugins, including ones with serialized or JSON data. 103 | 104 | = How do I know which tables I should not update? = 105 | 106 | Most tables will be just fine to update. This plugin will tell you which tables not to update. 107 | If you wish to try to update tables mentioned as "not safe" anyway, you may: 108 | 1. Make a backup of your database. 109 | 2. Run the update with all tables checked. 110 | 111 | If you run into trouble: 112 | 1. Restore your database. 113 | 2. Un-check tables in sections. 114 | 3. Re-run this until you find the culprit. 115 | 116 | If you find you are running into issues with custom tables, you may want to check out the PRO Version of this plugin, which works with any table. 117 | 118 | == Screenshots == 119 | 120 | 1. Tools page. The list of tables will change depending on your database structure. 121 | 2. Successfully updated urls. 122 | 3. Update prevented due to incomplete data entered. 123 | 124 | == Changelog == 125 | 126 | = 7.0.5 = 127 | * Officially added support for PHP 8.4. 128 | * Improved `Skip_Rows` unit testing. 129 | * Tested to WordPress 6.8.1. 130 | 131 | = 7.0.4 = 132 | * Improve labels on tools page. 133 | * Simplified the readme. 134 | * Tested to WordPress 6.8.0. 135 | * Required PRO version 7.0.4+. 136 | 137 | = 7.0.3 = 138 | * Added original plugin author to the readme. 139 | * Upgraded PHPStan to version 2. 140 | * Updated nanoid to latest version to resolve dependency vulnerability. 141 | * Tested to WordPress 6.7.2. 142 | 143 | = 7.0.2 = 144 | * Adjusted memory limit during counting to assure all tables are counted. 145 | 146 | = 7.0.1 = 147 | * Improved readme. 148 | * Tested to WordPress 6.7.1. 149 | 150 | = 7.0.0 = 151 | * Introduced class constants for admin capability and parent menu. 152 | * Introduced `Admin::get_admin_capability` method. 153 | * Introduced `go-live-update-urls/admin/admin-capability` filter. 154 | * Removed deprecated `Core::sanitize_field` method. 155 | * Converted GitHub Actions and Git hooks to distributed versions. 156 | * Tested to WordPress 6.6.2. 157 | * Required PRO version 7.0.0+. 158 | 159 | = 6.8.0 = 160 | * Added support for PHP based translations. 161 | * Bumped required WordPress version to 6.2.0. 162 | * Dropped support for PHP 7.2 in favor of 7.4+. 163 | * Tested to WordPress 6.6.0. 164 | * Officially added support for PHP 8.3. 165 | * Required PRO version 6.13.0+. 166 | 167 | = 6.7.3 = 168 | * Improved the readme. 169 | * Added a plugin domain to the translation files headers. 170 | * Bumped required WordPress version to 6.1.0. 171 | * Added live preview supporting using a playground blueprint. 172 | * Update PHPUnit support to version 10. 173 | * Tested to WordPress version 6.5.0. 174 | * 175 | = 6.7.2 = 176 | * Fixed deprecated notices in PHP 8.2. 177 | * Introduced `go_live_update_urls_sanitize_field` function. 178 | * Misc code improvements. 179 | * Tested to WordPress version 6.4.2. 180 | 181 | = 6.7.1 = 182 | * Made admin styles more resilient to style conflicts. 183 | * Added support for sites which don't include the `wp_links` table. 184 | * Introduced a shared `render_admin_header` method for the tools page header. 185 | 186 | = 6.7.0 = 187 | * Dropped support for PHP 7.0 in favor of 7.2. 188 | * Bumped minimum supported WordPress version to 6.0.0. 189 | * Improved block preview link handling. 190 | * Required PRO version 6.10.3+. 191 | 192 | = 6.6.3 = 193 | * Updated node version to 18. 194 | * Improved static analysis tools and scan level. 195 | * Improved support for PHP 8.2. 196 | * Tested to WordPress version 6.4.1. 197 | 198 | = 6.6.2 = 199 | * Updated Stylelint configuration and modernized CSS. 200 | * Included admin notices on network admin page. 201 | * Updated WP-PHPCS to version 3 and fixed all findings. 202 | 203 | = 6.6.1 = 204 | * Updated documentation links. 205 | * Tested to WordPress version 6.3.1. 206 | 207 | = 6.6.0 = 208 | * Added support for updating keys in serialized data. 209 | * Added support for updating sub serialized data values. 210 | * Enhanced all data updaters. 211 | * Included table and row_id information to error log when a row is skipped. 212 | * Improved miscellaneous PHP docs and type hints. 213 | * Fixed issue with updaters breaking paths when adding a sub-path to a URL. 214 | * Tested to WordPress core 6.3. 215 | * Updated the minimum WordPress core requirement to version 5.8. 216 | * Updated the PRO version requirement to version 6.10.0. 217 | 218 | = 6.5.3 = 219 | * Improved plugin readme. 220 | * Tested to WordPress version 6.2.2. 221 | 222 | = 6.5.2 = 223 | * Modernized the tools page JavaScript. 224 | * Improved extendability by removing all `private` access modifiers. 225 | * Improved extendability by converting all `self` to `static`. 226 | * Improved PHPCS scanning. 227 | * Fully support PHP 8.1. 228 | * Tested to WordPress Core 6.2.0. 229 | 230 | = 6.5.1 = 231 | * Fixed handling of row skipping for PHP 7.0. 232 | 233 | = 6.5.0 = 234 | * Gracefully handle missing PHP classes in serialized data. 235 | * Introduced `Skip_Rows` class for programmatically skipping database row updates. 236 | * Introduced `go-live-update-urls-pro/database/supports-skipping` filter to disable row skipping. 237 | * Tested to WordPress Core version 6.1.1. 238 | 239 | = 6.4.1 = 240 | * Improved readme. 241 | * Added GPL license to plugin. 242 | * Tested to WordPress core version 6.1.0. 243 | 244 | = 6.4.0 = 245 | * Dropped support for PHP 5.6 in favor of PHP 7.0. 246 | * Required PRO version 6.8.0+. 247 | 248 | = 6.3.9 = 249 | * Tested to WordPress 6.0.1. 250 | * Mentioned updating encoded URL in readme. 251 | 252 | = 6.3.8 = 253 | * Improved translations. 254 | * Fix typo in the readme. 255 | * Required PRO version 6.6.0+. 256 | * Tested to WordPress 6.0.0. 257 | 258 | = 6.3.7 = 259 | * Added "Settings" link to plugin actions. 260 | * Introduced `Admin::get_url` method for retrieving URL or tools page. 261 | * Fixed title of tools page in browser tab. 262 | 263 | = 6.3.6 = 264 | * Improved internal URL utm structure. 265 | * Tested to WordPress 5.9.0. 266 | 267 | = 6.3.5 = 268 | * Tested to WordPress 5.8.3. 269 | * Fix issue with tables showing from other sites on multisite. 270 | 271 | = 6.3.4 = 272 | * Support updating URL with URL encoded characters. 273 | * Tested to WordPress 5.8.2. 274 | 275 | = 6.3.3 = 276 | * Improved capitalization across plugin verbiage. 277 | * Improved translations. 278 | * Tested to WordPress 5.8.1. 279 | 280 | = 6.3.2 = 281 | * Improved sanitization of table names. 282 | * Fully support PHP 8. 283 | * Tested to WordPress 5.7.2. 284 | 285 | = 6.3.1 = 286 | * Tested to WordPress 5.6.1. 287 | * Improved translation process and documentation. 288 | * Improved responsiveness of admin page. 289 | 290 | = 6.3.0 = 291 | * Improved readme. 292 | * Improved plugin headers. 293 | * Required WordPress version 5.2.0+. 294 | 295 | = 6.2.2 = 296 | * Pass option value when flushing Elementor cache to prevent edge case conflicts. 297 | * Improved counting of urls across subdomains. 298 | * Improved counting of urls across serialized data. 299 | * Support replacing non subdomain values which duplicate because the old URL exists within the new URL. 300 | * Introduced `go-live-update-urls/database/after-counting` action. 301 | * Introduced `go-live-update-urls/database/before-counting` action 302 | 303 | = 6.2.1 = 304 | * Automatically flush Elementor's CSS cache during updates. 305 | * Update screenshots and captions. 306 | * Introduced new `go-live-update-urls-pro/admin/use-default-inputs` filter. 307 | * Add CSS classes to form elements on tools page. 308 | * Fix spacing of banners on tools page. 309 | * Improved PHPCS implementation. 310 | 311 | = 6.2.0 = 312 | * Redesign tools page for a modern block look. 313 | * Improved various verbiage. 314 | * Update all translations. 315 | * More gracefully handle version conflicts with PRO. 316 | * Support for PRO version 6.2.0. 317 | 318 | = 6.1.4 = 319 | * Support updating `registration_log` and `signups` tables. 320 | * Make `get_doubled_up_subdomain` method public. 321 | 322 | = 6.1.3 = 323 | * Support WordPress version 5.5.1 324 | 325 | = 6.1.2 = 326 | * Improved admin form and selectors. 327 | * Fix filter name for `go-live-update-urls/database/column-types`. 328 | * Improved FAQs. 329 | * Support for PRO version 6.1.0. 330 | 331 | = 6.1.0 = 332 | * Automatically exclude non text database columns. 333 | * Support email addresses within serialized data. 334 | * Greatly improved database update performance. 335 | * Split database update steps into their own class. 336 | * Support URL counting for upcoming PRO enhancements. 337 | * Tested to WordPress version 5.5.0 338 | 339 | = 6.0.1 = 340 | * Improved compatibility with very old versions of PRO. 341 | * Improved the readme. 342 | * Add links for the documentation and troubleshooting. 343 | 344 | = 6.0.0 = 345 | * Entirely new code structure. 346 | * Removed all deprecated code and filters. 347 | * Improved filter and action names. 348 | * Improved performance. 349 | 350 | = 5.3.0 = 351 | * Display error message when no tables are selected during update. 352 | * Fix bug when updating columns which are name the same as MySQL commands. 353 | * Remove confusing '- Serialized' label from checkboxes list. 354 | * Improved stability to modernize code some code. 355 | * Introduced `go-live-update-urls/views/admin-tools-page/disable-description` filter. 356 | * Cleanup some long deprecated code. 357 | 358 | = 5.2.12 = 359 | * Support for WordPress version 5.3.0 360 | * Officially drop support for PHP 5.4 in favor of 5.6.0 361 | 362 | = 5.2.0 = 363 | * Support URL Encoded Urls within serialized data 364 | * Support JSON Encoded Urls within serialized data 365 | 366 | = 5.1.0 = 367 | * Added new languages including French, German, and Spanish 368 | * Support upcoming blogmeta table in WP 5.0.0+ 369 | * Support updating urlencoded urls 370 | * Improved support for Visual Composer 371 | * Add PHP composer support 372 | 373 | = 5.0.0 = 374 | * Bring back PHP 5.2 support 375 | * Restructure entire codebase 376 | * Greatly improved security 377 | * Improved performance 378 | * UI improvements 379 | * Use strict WP coding standards 380 | 381 | == Upgrade Notice == 382 | = 6.1.2 = 383 | Update to support PRO version 6.1.0. 384 | 385 | = 6.0.1 = 386 | Major version update. Not backward compatible with version 5 filters or code. Please remove any custom filters or extensions before updating. 387 | 388 | = 5.0.6 = 389 | Fixes bug with the submit button in some browsers 390 | 391 | = 5.0.4 = 392 | Fixes bug with the database not updating properly 393 | 394 | = 5.0.1 = 395 | For full functionality of PRO version 2.2.0 396 | -------------------------------------------------------------------------------- /resources/go-live-update-urls.css: -------------------------------------------------------------------------------- 1 | #wpcontent { 2 | padding-left: 0 !important; 3 | } 4 | 5 | .update-nag, 6 | .notice, 7 | div.updated, 8 | div.error { 9 | margin: 15px 15px 25px 15px; 10 | } 11 | 12 | .update-nag { 13 | margin-top: 0; 14 | } 15 | 16 | .go-live-header-wrap { 17 | background: #fff; 18 | border-bottom: 1px solid #e2e4e7; 19 | margin: 0 0 30px; 20 | padding: 10px 0 0 0; 21 | text-align: center; 22 | } 23 | 24 | .go-live-header-wrap h1 { 25 | display: block; 26 | font-size: 26px; 27 | font-weight: 600; 28 | line-height: 18px; 29 | margin: 18px 0; 30 | } 31 | 32 | .go-live-header-wrap h1::before { 33 | color: #02657a; 34 | font-size: 40px; 35 | margin: -8px 25px 0 -25px; 36 | } 37 | 38 | .go-live-header-wrap a { 39 | color: #23282d; 40 | font-size: 23px; 41 | font-weight: 600; 42 | line-height: 1.1; 43 | text-decoration: none; 44 | } 45 | 46 | .go-live-header-message { 47 | color: #3c434a; 48 | font-weight: 600; 49 | line-height: 20px; 50 | margin: 0 10px 20px; 51 | padding: 0 12px; 52 | } 53 | 54 | .go-live-checkbox-form { 55 | display: block; 56 | font-size: 13px; 57 | margin: 0 auto; 58 | max-width: 800px; 59 | } 60 | 61 | .go-live-checkbox-form * { 62 | box-sizing: content-box; 63 | } 64 | 65 | .go-live-checkbox-form h3 { 66 | color: #23282d; 67 | font-size: 1.3em; 68 | font-weight: 400; 69 | margin: 1em 0; 70 | padding: 0; 71 | } 72 | 73 | .go-live-section { 74 | background: #fff; 75 | border: 1px solid #ccd0d4; 76 | display: block; 77 | margin: 15px 0; 78 | padding: 20px; 79 | } 80 | 81 | .go-live-only-checked { 82 | color: #666; 83 | display: inline-block; 84 | font-weight: 600; 85 | padding: 1px 0 0; 86 | position: relative; 87 | top: 2px; 88 | } 89 | 90 | .go-live-checkbox-form th { 91 | padding-right: 0 !important; 92 | width: 90px; 93 | } 94 | 95 | @media only screen and (max-width: 960px) { 96 | .go-live-checkbox-form { 97 | max-width: calc(100% - 30px); 98 | } 99 | } 100 | 101 | @media only screen and (max-width: 500px) { 102 | .go-live-header-wrap h1::before { 103 | margin-left: -10px !important; 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /resources/go-live-update-urls.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Check-all functionality on tools page. 3 | * 4 | * @package go-live-update-urls 5 | */ 6 | 7 | jQuery( function ( $ ) { 8 | $( '[data-js="go-live-update-urls/checkboxes/check-all"]' ).on( 'click', function () { 9 | var el = $( this ); 10 | if ( el.prop( 'checked' ) ) { 11 | $( '[data-list="' + el.data( 'list' ) + '"] input' ).prop( 'checked', true ); 12 | } else { 13 | $( '[data-list="' + el.data( 'list' ) + '"] input' ).prop( 'checked', false ); 14 | } 15 | } ) 16 | } ) 17 | -------------------------------------------------------------------------------- /src/Admin.php: -------------------------------------------------------------------------------- 1 | failure_message(); 54 | return; 55 | } 56 | 57 | $old_url = go_live_update_urls_sanitize_field( (string) $_POST[ static::OLD_URL ] ); 58 | $new_url = go_live_update_urls_sanitize_field( (string) $_POST[ static::NEW_URL ] ); 59 | if ( '' === $old_url || '' === $new_url || ! isset( $_POST[ static::TABLE_INPUT_NAME ] ) ) { 60 | $this->failure_message(); 61 | return; 62 | } 63 | 64 | $tables = \array_filter( \array_map( 'go_live_update_urls_sanitize_field', (array) $_POST[ static::TABLE_INPUT_NAME ] ), fn( $value ) => '' !== $value ); 65 | 66 | do_action( 'go-live-update-urls/admin-page/before-update', $old_url, $new_url, $tables ); 67 | 68 | if ( \count( Database::instance()->update_the_database( $old_url, $new_url, $tables ) ) > 0 ) { 69 | add_action( 'admin_notices', [ $this, 'success' ] ); 70 | add_filter( 'go-live-update-urls/views/admin-tools-page/disable-description', '__return_true' ); 71 | } 72 | } 73 | 74 | 75 | /** 76 | * Render a success message as admin banner. 77 | */ 78 | public function success(): void { 79 | ?> 80 |
81 |

82 | 83 | 84 | 85 |

86 |
87 | 99 |
100 |

101 | 102 | 103 | 104 |

105 |
106 | get_admin_capability(), self::NAME, [ $this, 'admin_page' ] ); 118 | } 119 | 120 | 121 | /** 122 | * Get the filtered capability required to use the tools page. 123 | * 124 | * @since 6.9.0 125 | * 126 | * @return string 127 | */ 128 | public function get_admin_capability(): string { 129 | return (string) apply_filters( 'go-live-update-urls/admin/admin-capability', self::CAPABILITY, $this ); 130 | } 131 | 132 | 133 | /** 134 | * Render the tools page header. 135 | * 136 | * This is the same header used by the PRO version. 137 | * 138 | * @param string $url - URL to link the plugin name to. 139 | * 140 | * @return void 141 | */ 142 | public function render_admin_header( string $url ): void { 143 | ?> 144 |
145 |
146 |

147 | 151 | 152 | 153 |

154 |
155 |
156 | 157 |
158 |
159 | 173 |
174 | render_admin_header( 'https://wordpress.org/plugins/go-live-update-urls/' ); 176 | ?> 177 |
180 | 187 |

188 | 189 |

190 |
191 |

192 | 193 | 194 | 195 |

196 |

197 | 203 | 204 |

205 |
206 | 207 | render_check_boxes( Database::instance()->get_core_tables(), 'wp-core' ); 209 | ?> 210 |
211 | get_custom_plugin_tables(); 214 | if ( \count( $custom_tables ) > 0 ) { 215 | ?> 216 |

217 | 218 |

219 |
220 |

221 | 222 | */ 224 | printf( esc_html_x( 'These tables are not safe to update with the basic version of this plugin! %1$sTo update tables created by plugins, use the %2$sPRO version.%3$s', '{
}{}{}', 'go-live-update-urls' ), '
', '', '' ); 225 | ?> 226 |
227 |

228 |

229 | 233 | 234 |

235 |
236 | 237 | render_check_boxes( $custom_tables, 'custom-plugins', false ); 239 | ?> 240 |
241 | 249 | 250 | 251 | 256 | 265 | 266 | 267 | 272 | 281 | 282 |
252 | 255 | 257 | 264 |
268 | 271 | 273 | 280 |
283 | 284 | 285 | 289 |

290 | 291 | 292 | */ 294 | printf( esc_html_x( 'Use the %1$sPRO version%2$s to test URL updates before making them.', '{}{}', 'go-live-update-urls' ), '', '' ); 295 | ?> 296 | 297 | 298 |

299 | 302 | 303 |
304 |
305 | 322 |
    323 | 326 |
  • 327 | %s', esc_attr( static::TABLE_INPUT_NAME ), esc_attr( $_table ), checked( $checked, true, false ), esc_html( $_table ) ); 329 | ?> 330 |
  • 331 | 334 |
335 | get_all_table_names(); 101 | 102 | do_action( 'go-live-update-urls/core/before-update', $old_url, $new_url, $tables ); 103 | 104 | return $db->update_the_database( $old_url, $new_url, $tables ); 105 | } 106 | 107 | 108 | /** 109 | * Display custom action links in plugins list. 110 | * 111 | * 1. Settings. 112 | * 2. Go PRO. 113 | * 114 | * @param array $actions - Array of actions and their link. 115 | * 116 | * @return array 117 | */ 118 | public function plugin_action_link( array $actions ) { 119 | $actions['settings'] = sprintf( '%2$s', Admin::instance()->get_url(), __( 'Settings', 'go-live-update-urls' ) ); 120 | if ( ! \defined( 'GO_LIVE_UPDATE_URLS_PRO_VERSION' ) ) { 121 | $actions['go-pro'] = sprintf( '%2$s', 'https://onpointplugins.com/product/go-live-update-urls-pro/?utm_source=wp-plugins&utm_campaign=gopro&utm_medium=wp-dash', __( 'Go PRO', 'go-live-update-urls' ) ); 122 | } 123 | return $actions; 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /src/Database.php: -------------------------------------------------------------------------------- 1 | - array( %table_name% => %table_column% ) 22 | */ 23 | public function get_serialized_tables() { 24 | global $wpdb; 25 | // Default tables with serialized data. 26 | $serialized_tables = [ 27 | $wpdb->options => 'option_value', 28 | $wpdb->postmeta => 'meta_value', 29 | $wpdb->commentmeta => 'meta_value', 30 | $wpdb->signups => 'meta', 31 | $wpdb->termmeta => 'meta_value', 32 | $wpdb->usermeta => 'meta_value', 33 | ]; 34 | 35 | // We are not going to update site meta if we are not on the main blog. 36 | if ( is_multisite() ) { 37 | $serialized_tables[ $wpdb->sitemeta ] = 'meta_value'; 38 | $serialized_tables[ $wpdb->blogmeta ] = 'meta_value'; 39 | } 40 | 41 | return apply_filters( 'go-live-update-urls/database/serialized-tables', $serialized_tables ); 42 | } 43 | 44 | 45 | /** 46 | * Get the list of tables that were not create by WP core 47 | * 48 | * @return string[] 49 | */ 50 | public function get_custom_plugin_tables(): array { 51 | $core_tables = $this->get_core_tables(); 52 | $all_tables = $this->get_all_table_names(); 53 | $all_tables = \array_flip( $all_tables ); 54 | foreach ( $core_tables as $_table ) { 55 | unset( $all_tables[ $_table ] ); 56 | } 57 | 58 | return (array) apply_filters( 'go-live-update-urls/database/plugin-tables', \array_keys( $all_tables ) ); 59 | } 60 | 61 | 62 | /** 63 | * Get the list of WP core tables 64 | * 65 | * @since 4.0.0 66 | * 67 | * @return string[] 68 | */ 69 | public function get_core_tables() { 70 | global $wpdb; 71 | 72 | $tables = [ 73 | $wpdb->posts, 74 | $wpdb->comments, 75 | $wpdb->options, 76 | $wpdb->postmeta, 77 | $wpdb->terms, 78 | $wpdb->term_taxonomy, 79 | $wpdb->term_relationships, 80 | $wpdb->termmeta, 81 | $wpdb->commentmeta, 82 | $wpdb->users, 83 | $wpdb->usermeta, 84 | ]; 85 | 86 | if ( isset( $wpdb->links ) ) { 87 | $tables[] = $wpdb->links; 88 | } 89 | 90 | if ( is_multisite() ) { 91 | $tables[] = $wpdb->blogs; 92 | $tables[] = $wpdb->signups; 93 | $tables[] = $wpdb->site; 94 | $tables[] = $wpdb->sitemeta; 95 | $tables[] = $wpdb->sitecategories; 96 | $tables[] = $wpdb->registration_log; 97 | // WP 5.0.0+. 98 | if ( isset( $wpdb->blogmeta ) ) { 99 | $tables[] = $wpdb->blogmeta; 100 | } 101 | } 102 | 103 | return (array) apply_filters( 'go-live-update-urls/database/core-tables', $tables ); 104 | } 105 | 106 | 107 | /** 108 | * Get types of MySQL fields which may contain URLS. 109 | * 110 | * Only fields of these types will be updated. 111 | * 112 | * @since 6.1.0 113 | * 114 | * @return string[] 115 | */ 116 | public function get_column_types(): array { 117 | $types = [ 118 | 'char', 119 | 'longtext', 120 | 'longtext', 121 | 'mediumtext', 122 | 'text', 123 | 'tinytext', 124 | 'varchar', 125 | ]; 126 | return (array) apply_filters( 'go-live-update-urls/database/column-types', $types, $this ); 127 | } 128 | 129 | 130 | /** 131 | * Get the names of every table in this blog 132 | * If we are multisite, we also get the global tables. 133 | * 134 | * @since 5.0.1 135 | * 136 | * @return string[] 137 | */ 138 | public function get_all_table_names() { 139 | global $wpdb; 140 | $query = "SELECT TABLE_NAME as TableName FROM information_schema.TABLES WHERE TABLE_SCHEMA='" . $wpdb->dbname . "' AND TABLE_NAME LIKE '" . $wpdb->esc_like( $wpdb->prefix ) . "%'"; 141 | 142 | // Site 1's 'LIKE wp_%' will return all tables in the database, 143 | // so we exclude all possible sub sites (e.g., wp_2, wp_3 up to 9). 144 | $not_like = ''; 145 | if ( 1 === (int) $wpdb->blogid && is_multisite() ) { 146 | for ( $i = 1; $i <= 9; $i ++ ) { 147 | $not_like .= $wpdb->prepare( '%s,', $wpdb->prefix . $i ); 148 | } 149 | $query .= ' AND SUBSTRING(TABLE_NAME,1,4) NOT IN (' . substr( $not_like, 0, - 1 ) . ')'; 150 | } 151 | return $wpdb->get_col( $query ); 152 | } 153 | 154 | 155 | /** 156 | * Make the actual changes to the database 157 | * 158 | * @since 5.0.0 159 | * 160 | * @param string $old_url - the old URL. 161 | * @param string $new_url - the new URL. 162 | * @param string[] $tables - the tables we are going to update. 163 | * 164 | * @return array 165 | */ 166 | public function update_the_database( $old_url, $new_url, array $tables ): array { 167 | do_action( 'go-live-update-urls/database/before-update', $old_url, $new_url, $tables, $this ); 168 | $tables = apply_filters( 'go-live-update-urls/database/update-tables', $tables, $this ); 169 | 170 | $updates = Updates::factory( $old_url, $new_url, $tables ); 171 | $counts = $updates->update_serialized_values(); 172 | foreach ( (array) $tables as $_table ) { 173 | if ( ! \array_key_exists( $_table, $counts ) ) { 174 | $counts[ $_table ] = 0; 175 | } 176 | $counts[ $_table ] += $updates->update_table_columns( $_table ); 177 | } 178 | 179 | $counts = apply_filters( 'go-live-update-urls/database/updated/counts', $counts, $old_url, $new_url, $tables, $this ); 180 | 181 | do_action( 'go-live-update-urls/database/after-update', $old_url, $new_url, $tables, $this ); 182 | return $counts; 183 | } 184 | 185 | 186 | /** 187 | * Count all occurrences of the old URL within a provided 188 | * list of tables. 189 | * 190 | * @since 5.0.0 191 | * 192 | * @param string $old_url - the old URL. 193 | * @param string $new_url - the new URL. 194 | * @param string[] $tables - the tables we are going to update. 195 | * 196 | * @return int[] 197 | */ 198 | public function count_database_urls( string $old_url, string $new_url, array $tables ): array { 199 | do_action( 'go-live-update-urls/database/before-counting', $old_url, $new_url, $tables, $this ); 200 | $tables = apply_filters( 'go-live-update-urls/database/update-tables', $tables, $this ); 201 | 202 | $updates = Updates::factory( $old_url, $new_url, $tables ); 203 | $counts = []; 204 | foreach ( (array) $tables as $_table ) { 205 | $counts[ $_table ] = $updates->count_table_urls( $_table ); 206 | } 207 | 208 | $counts = (array) apply_filters( 'go-live-update-urls/database/counted/counts', $counts, $old_url, $new_url, $tables, $this ); 209 | 210 | do_action( 'go-live-update-urls/database/after-counting', $old_url, $new_url, $tables, $this ); 211 | 212 | return $counts; 213 | } 214 | 215 | 216 | /** 217 | * Update an individual table's column. 218 | * 219 | * @since 5.3.0 220 | * 221 | * @param string $table - Table to update. 222 | * @param string $column - Column to update. 223 | * @param string $old_url - Old URL. 224 | * @param string $new_url - New URL. 225 | * 226 | * @return int 227 | */ 228 | public function update_column( $table, $column, $old_url, $new_url ): int { 229 | global $wpdb; 230 | 231 | $count = $this->count_column_urls( $table, $column, $old_url ); 232 | $update_query = 'UPDATE ' . $table . ' SET `' . $column . '` = replace(`' . $column . '`, %s, %s)'; 233 | 234 | if ( $this->supports_skipping( $table ) ) { 235 | $skip = esc_sql( implode( ',', (array) Skip_Rows::instance()->get_skipped( $table ) ) ); 236 | $primary = esc_sql( (string) Skip_Rows::instance()->get_primary_key( $table ) ); 237 | $update_query .= " WHERE `{$primary}` NOT IN ({$skip})"; 238 | } 239 | 240 | $wpdb->query( $wpdb->prepare( $update_query, [ $old_url, $new_url ] ) ); 241 | return $count; 242 | } 243 | 244 | 245 | /** 246 | * Count of number of rows in a table which contain the old URL. 247 | * 248 | * When updating, the serialized data is updated first and this 249 | * counts the leftovers. 250 | * 251 | * During dry-run counting, this will count all occurrences in the 252 | * database. 253 | * 254 | * @since 6.1.0 255 | * 256 | * @param string $table - Table to update. 257 | * @param string $column - Column to update. 258 | * @param string $old_url - Old URL. 259 | * 260 | * @return int 261 | */ 262 | public function count_column_urls( $table, $column, $old_url ): int { 263 | global $wpdb; 264 | 265 | $query = "SELECT SUM( ROUND( ( LENGTH( `{$column}` ) - LENGTH( REPLACE( `{$column}`, %s, '' ) ) ) / LENGTH( %s ) ) ) from `{$table}`"; 266 | 267 | return (int) $wpdb->get_var( $wpdb->prepare( $query, [ $old_url, $old_url ] ) ); 268 | } 269 | 270 | 271 | /** 272 | * Does this table support skipping rows? 273 | * 274 | * 1. Does it have rows to skip? 275 | * 2. Does the filter allow skipping? 276 | * 277 | * @since 6.5.0 278 | * 279 | * @param string $table - Database table. 280 | * 281 | * @return bool 282 | */ 283 | protected function supports_skipping( $table ) { 284 | if ( null === Skip_Rows::instance()->get_skipped( $table ) || null === Skip_Rows::instance()->get_primary_key( $table ) ) { 285 | return false; 286 | } 287 | 288 | return (bool) apply_filters( 'go-live-update-urls-pro/database/supports-skipping', true, $table, $this ); 289 | } 290 | } 291 | -------------------------------------------------------------------------------- /src/Serialized.php: -------------------------------------------------------------------------------- 1 | new = $new_url; 63 | $this->old = $old_url; 64 | } 65 | 66 | 67 | /** 68 | * Go through every registered serialized table and update them one by one 69 | * 70 | * @since 5.2.5 - Only update provided tables. 71 | * 72 | * @param array $tables - The tables to update. 73 | * 74 | * @return array 75 | */ 76 | public function update_all_serialized_tables( array $tables ) { 77 | $serialized_tables = Database::instance()->get_serialized_tables(); 78 | 79 | $counts = []; 80 | foreach ( $serialized_tables as $table => $columns ) { 81 | if ( ! \in_array( $table, $tables, true ) ) { 82 | continue; 83 | } 84 | $counts[ $table ] = \array_sum( \array_map( function( $column ) use ( $table ) { 85 | return $this->update_table( $table, $column ); 86 | }, (array) $columns ) ); 87 | } 88 | return $counts; 89 | } 90 | 91 | 92 | /** 93 | * Query all serialized rows from a database table and 94 | * update them one by one. 95 | * 96 | * @noinspection CallableParameterUseCaseInTypeContextInspection 97 | * 98 | * @param string $table - Database table. 99 | * @param string $column - Database column. 100 | * 101 | * @return int 102 | */ 103 | protected function update_table( string $table, string $column ): int { 104 | global $wpdb; 105 | $this->count = 0; 106 | $column = esc_sql( $column ); 107 | $table = esc_sql( $table ); 108 | $pk = $wpdb->get_results( 'SHOW KEYS FROM `' . $table . "` WHERE Key_name = 'PRIMARY'" ); 109 | if ( empty( $pk[0] ) ) { 110 | $pk = $wpdb->get_results( 'SHOW KEYS FROM `' . $table . '`' ); 111 | if ( empty( $pk[0] ) ) { 112 | return 0; // Fail. 113 | } 114 | } 115 | $primary_key_column = $pk[0]->Column_name; 116 | Skip_Rows::instance()->set_current_table( $table, $primary_key_column ); 117 | 118 | // Get all serialized rows. 119 | $rows = $wpdb->get_results( "SELECT `$primary_key_column`, `{$column}` FROM `{$table}` WHERE `{$column}` LIKE 'a:%' OR `{$column}` LIKE 'O:%' OR `{$column}` LIKE 's:%';" ); 120 | 121 | foreach ( $rows as $row ) { 122 | if ( ! $this->has_data_to_update( $row->{$column} ) ) { 123 | continue; 124 | } 125 | 126 | Skip_Rows::instance()->set_current_row_id( $row->{$primary_key_column} ); 127 | $clean = $this->replace_tree( @unserialize( $row->{$column} ) ); 128 | if ( empty( $clean ) ) { 129 | continue; 130 | } 131 | 132 | if ( ! $this->dry_run ) { 133 | $clean = @serialize( $clean ); 134 | if ( '' !== $clean ) { 135 | $wpdb->query( $wpdb->prepare( "UPDATE `{$table}` SET `{$column}`=%s WHERE `{$primary_key_column}` = %s", $clean, $row->{$primary_key_column} ) ); 136 | } 137 | } 138 | } 139 | 140 | return $this->count; 141 | } 142 | 143 | 144 | /** 145 | * Replaces all the occurrences of a string in a multidimensional array or Object 146 | * 147 | * @noinspection OffsetOperationsInspection 148 | * 149 | * @since 5.2.0 150 | * 151 | * @param object|array|string|int|float|null $data - Data to change. 152 | * 153 | * @return object|array|string|int|float|null 154 | */ 155 | public function replace_tree( $data ) { 156 | if ( null === $data ) { 157 | return null; 158 | } 159 | 160 | if ( \is_int( $data ) || \is_float( $data ) ) { 161 | if ( \is_numeric( $this->old ) ) { 162 | return $this->replace( (string) $data ); 163 | } 164 | return $data; 165 | } 166 | 167 | if ( \is_string( $data ) ) { 168 | return $this->replace( $data ); 169 | } 170 | 171 | if ( $this->has_missing_classes( $data ) ) { 172 | Skip_Rows::instance()->skip_current(); 173 | return $data; 174 | } 175 | 176 | // @phpstan-ignore-next-line -- Sanity check. 177 | if ( ! \is_array( $data ) && ! \is_object( $data ) ) { 178 | return $data; 179 | } 180 | 181 | // @phpstan-ignore-next-line -- Classes are iterables but have no conditions to check. 182 | foreach ( $data as $key => $item ) { 183 | $updated_key = ''; 184 | if ( \is_string( $key ) ) { 185 | $updated_key = $this->replace( $key ); 186 | } 187 | // The key was updated. 188 | if ( '' !== $updated_key && $updated_key !== $key ) { 189 | if ( \is_array( $data ) ) { 190 | $data[ $updated_key ] = $this->replace_tree( $item ); 191 | unset( $data[ $key ] ); 192 | } else { 193 | $data->{$updated_key} = $this->replace_tree( $item ); 194 | unset( $data->{$key} ); 195 | } 196 | } elseif ( \is_array( $data ) ) { 197 | $data[ $key ] = $this->replace_tree( $item ); 198 | } else { 199 | $data->{$key} = $this->replace_tree( $item ); 200 | } 201 | } 202 | 203 | return $data; 204 | } 205 | 206 | 207 | /** 208 | * Replace occurrences of an old url with a new url 209 | * within a string. 210 | * 211 | * Also replace occurrences of an old url formatted using 212 | * all available updaters 213 | * 214 | * @param string $mysql_value - Original value from the database. 215 | * 216 | * @return string 217 | */ 218 | protected function replace( string $mysql_value ): string { 219 | /** 220 | * `maybe_serialize` wraps the data in a string if passing an already 221 | * serialized item when calling functions like `add_option`. 222 | */ 223 | if ( is_serialized( $mysql_value ) ) { 224 | $result = @unserialize( $mysql_value ); 225 | if ( false === $result ) { 226 | return $mysql_value; 227 | } 228 | return @serialize( $this->replace_tree( $result ) ); 229 | } 230 | 231 | $mysql_value = \str_replace( $this->old, $this->new, $mysql_value, $count ); 232 | $this->count += $count; 233 | 234 | foreach ( Repo::instance()->get_updaters() as $updater ) { 235 | /* @var Updaters_Abstract $updater - Updater class instance. */ 236 | $formatted = $updater::get_formatted( $this->old, $this->new ); 237 | if ( $formatted['old'] !== $this->old ) { 238 | $mysql_value = \str_replace( $formatted['old'], $formatted['new'], $mysql_value, $updater_count ); 239 | if ( ! $updater::is_appending_update( $this->old, $this->new ) ) { 240 | $this->count += $updater_count; 241 | } 242 | } 243 | } 244 | 245 | return \trim( $mysql_value ); 246 | } 247 | 248 | 249 | /** 250 | * Do we have any urls to actually update? 251 | * 252 | * - Check the old URL as is. 253 | * - Check the old URL formatted by any updater. 254 | * 255 | * @param string $mysql_value - Original value from the database. 256 | * 257 | * @return bool 258 | */ 259 | protected function has_data_to_update( $mysql_value ): bool { 260 | if ( ! is_serialized( $mysql_value ) ) { 261 | return false; 262 | } 263 | 264 | if ( false !== strpos( $mysql_value, $this->old ) ) { 265 | return true; 266 | } 267 | 268 | foreach ( Repo::instance()->get_updaters() as $_updater ) { 269 | /* @var Updaters_Abstract $_updater - Updater class instance. */ 270 | $formatted = $_updater::get_formatted( $this->old, $this->new ); 271 | if ( false !== strpos( $mysql_value, $formatted['old'] ) ) { 272 | return true; 273 | } 274 | } 275 | 276 | return false; 277 | } 278 | 279 | 280 | /** 281 | * Wrapper around `unserialize` to support gracefully 282 | * failing to unserialize a value due to a missing class. 283 | * 284 | * If a class is not available when `unserialize` is called 285 | * PHP automatically converts the result to `__PHP_Incomplete_Class`. 286 | * 287 | * @ticket #10723 288 | * 289 | * @since 6.5.0 290 | * 291 | * @param object|array $data - Value from the database column. 292 | * 293 | * @return bool 294 | */ 295 | protected function has_missing_classes( $data ) { 296 | if ( ! \is_array( $data ) && is_a( $data, \__PHP_Incomplete_Class::class ) ) { 297 | // Hack to get the name of the class from __PHP_Incomplete_Class without `Error`. 298 | foreach ( (array) $data as $key => $name ) { 299 | if ( '__PHP_Incomplete_Class_Name' === $key ) { 300 | Skip_Rows::instance()->log_error( $name ); 301 | return true; 302 | } 303 | } 304 | return true; 305 | } 306 | return false; 307 | } 308 | 309 | 310 | /** 311 | * Getter for current count. 312 | * 313 | * @since 6.1.0 314 | * 315 | * @return int 316 | */ 317 | public function get_count() { 318 | return $this->count; 319 | } 320 | 321 | 322 | /** 323 | * Set the property to determine if we are 324 | * doing a dry run for counts, or actually updating 325 | * the database. 326 | * 327 | * @since 6.1.0 328 | * 329 | * @param bool $dry_run - Is this a dry run or not. 330 | */ 331 | public function set_dry_run( $dry_run ) { 332 | $this->dry_run = $dry_run; 333 | } 334 | } 335 | -------------------------------------------------------------------------------- /src/Skip_Rows.php: -------------------------------------------------------------------------------- 1 | 45 | */ 46 | protected array $skip = []; 47 | 48 | 49 | /** 50 | * Set the table, which subsequent calls to `skip_row` will 51 | * be assigned to. 52 | * 53 | * @param string $table - Database table. 54 | * @param string $primary_key - Primary key field for this table. 55 | * 56 | * @return void 57 | */ 58 | public function set_current_table( $table, $primary_key ) { 59 | $this->table = $table; 60 | $this->primary_keys[ $table ] = $primary_key; 61 | } 62 | 63 | 64 | /** 65 | * Skip a row in the current table by calling 66 | * `skip_row` after setting this id. 67 | * 68 | * Allows accessing and id down the stack without 69 | * passing it to every level. 70 | * 71 | * @param int $db_id - ID of database table row. 72 | * 73 | * @return void 74 | */ 75 | public function set_current_row_id( $db_id ): void { 76 | $this->row_id = $db_id; 77 | } 78 | 79 | 80 | /** 81 | * Skip a row in the current table. 82 | * 83 | * @return void 84 | */ 85 | public function skip_current(): void { 86 | if ( '' === $this->table || 0 === $this->row_id ) { 87 | _doing_it_wrong( __METHOD__, esc_html__( 'You must set a table and DB id before skipping a row.', 'go-live-update-urls' ), '6.5.0' ); 88 | } 89 | if ( empty( $this->skip[ $this->table ] ) || ! \in_array( $this->row_id, $this->skip[ $this->table ], true ) ) { 90 | $this->skip[ $this->table ][] = $this->row_id; 91 | } 92 | } 93 | 94 | 95 | /** 96 | * Get any db ids to be skipped for a table. 97 | * 98 | * @param string $table - Database table. 99 | * 100 | * @return int[]|null 101 | */ 102 | public function get_skipped( $table ): ?array { 103 | if ( isset( $this->skip[ $table ] ) && [] !== $this->skip[ $table ] ) { 104 | return $this->skip[ $table ]; 105 | } 106 | 107 | return null; 108 | } 109 | 110 | 111 | /** 112 | * Get the primary key for a table, which was provided 113 | * during `set_current_table`. 114 | * 115 | * @param string $table - Database table. 116 | * 117 | * @return string|null 118 | */ 119 | public function get_primary_key( $table ) { 120 | return $this->primary_keys[ $table ] ?? null; 121 | } 122 | 123 | 124 | /** 125 | * Log information to the PHP Error log about a missing 126 | * class in serialized data. 127 | * 128 | * @since 6.5.4 129 | * 130 | * @param string $class_name - Name of class which does not exist. 131 | * 132 | * @return void 133 | */ 134 | public function log_error( string $class_name ): void { 135 | //phpcs:ignore -- We want to use the PHP error log. 136 | \error_log( \vsprintf( 'Go Live skipped row `%s` in the table `%s` because it contains an unavailable PHP class named `%s`.', [ 137 | $this->row_id, 138 | $this->table, 139 | $class_name, 140 | ] ) ); 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /src/Traits/Singleton.php: -------------------------------------------------------------------------------- 1 | hook(); 32 | } 33 | 34 | 35 | /** 36 | * Get (and instantiate, if necessary) the instance of the 37 | * class 38 | * 39 | * @static 40 | * @return self 41 | */ 42 | public static function instance() { 43 | if ( null === static::$instance || ! is_a( static::$instance, __CLASS__ ) ) { 44 | static::$instance = new static(); // @phpstan-ignore-line 45 | } 46 | return static::$instance; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/Updaters/Repo.php: -------------------------------------------------------------------------------- 1 | > 20 | */ 21 | public function get_updaters(): array { 22 | $updaters = apply_filters( 'go-live-update-urls/updaters/repo/updaters', [ 23 | 'url-encoded' => Url_Encoded::class, 24 | ] ); 25 | if ( ! \is_array( $updaters ) ) { 26 | return []; 27 | } 28 | 29 | \uasort( $updaters, 30 | /** 31 | * Sort the updater classes by priority. 32 | * 33 | * @param class-string $a 34 | * @param class-string $b 35 | */ 36 | function( $a, $b ) { 37 | return $a::get_priority() <=> $b::get_priority(); 38 | } 39 | ); 40 | 41 | return $updaters; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/Updaters/Updaters_Abstract.php: -------------------------------------------------------------------------------- 1 | table = $table; 53 | $this->column = $column; 54 | $this->old = $old_url; 55 | $this->new = $new_url; 56 | } 57 | 58 | 59 | /** 60 | * Filter the new or old url based on this particular updater's logic. 61 | * 62 | * @param string $url - Either the old or new URL. 63 | * 64 | * @return string 65 | */ 66 | abstract public static function apply_rule_to_url( $url ); 67 | 68 | 69 | /** 70 | * Get the priority of this updater. 71 | * 72 | * The higher the number, the sooner it will run in the stack. 73 | * 74 | * @since 6.10.0 75 | * 76 | * @return int 77 | */ 78 | abstract public static function get_priority(): int; 79 | 80 | 81 | /** 82 | * Update this table and column. 83 | * 84 | * @param string $old_url - Old URL. 85 | * @param string $new_url - New URL. 86 | * 87 | * @return int 88 | */ 89 | protected function update_column( $old_url, $new_url ): int { 90 | return Database::instance()->update_column( $this->table, $this->column, $old_url, $new_url ); 91 | } 92 | 93 | 94 | /** 95 | * Count occurrences of the old URL in this table's column. 96 | * 97 | * @return int 98 | */ 99 | public function count_urls(): int { 100 | $old_url = static::apply_rule_to_url( $this->old ); 101 | if ( $old_url === $this->old ) { 102 | return 0; 103 | } 104 | return Database::instance()->count_column_urls( $this->table, $this->column, $old_url ); 105 | } 106 | 107 | 108 | /** 109 | * Get the old and new URLs formatted for replacement. 110 | * 111 | * @since 6.10.0 112 | * 113 | * @param string $old_url - Old URL. 114 | * @param string $new_url - New URL. 115 | * 116 | * @return array{new: string, old: string} 117 | */ 118 | public static function get_formatted( string $old_url, string $new_url ): array { 119 | /** 120 | * If the old URL has a "/" in it, but the new URL doesn't, we add a / to the beginning of each URL to create a selector to look for. 121 | * 122 | * Without: domain.com 123 | * With: \\\/domain.com 124 | */ 125 | if ( static::is_appending_update( $old_url, $new_url ) ) { 126 | $prefix = static::apply_rule_to_url( '/' ); 127 | return [ 128 | 'old' => $prefix . $new_url, 129 | 'new' => $prefix . static::apply_rule_to_url( $new_url ), 130 | ]; 131 | } 132 | 133 | return [ 134 | 'old' => static::apply_rule_to_url( $old_url ), 135 | 'new' => static::apply_rule_to_url( $new_url ), 136 | ]; 137 | } 138 | 139 | 140 | /** 141 | * Is this updater appending to a previous update made by 142 | * by Database::update_column()? 143 | * 144 | * Used for 145 | * - Prevent duplicate counts. 146 | * - Fix previous updates which conflict with this rule. 147 | * 148 | * @since 6.10.0 149 | * 150 | * @see Database::update_column 151 | * 152 | * @param string $old_url - Old URL. 153 | * @param string $new_url - New URL. 154 | * 155 | * @return bool 156 | */ 157 | public static function is_appending_update( string $old_url, string $new_url ): bool { 158 | return static::apply_rule_to_url( $old_url ) === $old_url && static::apply_rule_to_url( $new_url ) !== $new_url; 159 | } 160 | 161 | 162 | /** 163 | * Update the old over escaped URL with the new over escaped URL if the entered 164 | * old URL or new URL has a "/" in it. 165 | * If no URL has a "/" in it, we don't need to run this. 166 | * 167 | * @return int 168 | */ 169 | public function update_data(): int { 170 | if ( false === strpos( $this->old, '/' ) && false === strpos( $this->new, '/' ) ) { 171 | return 0; 172 | } 173 | $formatted = static::get_formatted( $this->old, $this->new ); 174 | $count = $this->update_column( $formatted['old'], $formatted['new'] ); 175 | if ( static::is_appending_update( $this->old, $this->new ) ) { 176 | return 0; 177 | } 178 | return $count; 179 | } 180 | 181 | 182 | /** 183 | * Factory to get constructed class 184 | * 185 | * @param string $table Table to update. 186 | * @param string $column Column to update. 187 | * @param string $old_url Old URL. 188 | * @param string $new_url New URL. 189 | * 190 | * @since 5.3.0 191 | * 192 | * @return static 193 | */ 194 | public static function factory( $table, $column, $old_url, $new_url ) { 195 | return new static( $table, $column, $old_url, $new_url ); 196 | } 197 | } 198 | -------------------------------------------------------------------------------- /src/Updaters/Url_Encoded.php: -------------------------------------------------------------------------------- 1 | old_url = $old_url; 52 | $this->new_url = $new_url; 53 | $this->tables = $tables; 54 | } 55 | 56 | 57 | /** 58 | * Update all instances of the URLS within a provided table. 59 | * 60 | * Takes care of all calls related to necessary updates. 61 | * 62 | * @param string $table - Table to update. 63 | * 64 | * @return int 65 | */ 66 | public function update_table_columns( $table ) { 67 | $doubled = $this->get_doubled_up_subdomain(); 68 | $columns = $this->get_table_columns( $table ); 69 | $count = 0; 70 | \array_walk( $columns, function( $column ) use ( $table, $doubled, &$count ) { 71 | $count += Database::instance()->update_column( $table, $column, $this->old_url, $this->new_url ); 72 | $count += $this->update_column_with_updaters( $table, $column ); 73 | $this->update_email_addresses( $table, $column ); 74 | 75 | if ( null !== $doubled ) { 76 | $count -= Database::instance()->update_column( $table, $column, $doubled, $this->new_url ); 77 | } 78 | } ); 79 | 80 | return $count; 81 | } 82 | 83 | 84 | /** 85 | * Counts all instances of the URLS within a provided table. 86 | * 87 | * @param string $table - Table to count. 88 | * 89 | * @return int 90 | */ 91 | public function count_table_urls( $table ) { 92 | $doubled = $this->get_doubled_up_subdomain(); 93 | $columns = $this->get_table_columns( $table ); 94 | $count = 0; 95 | \array_walk( $columns, function( $column ) use ( $table, $doubled, &$count ) { 96 | $count += Database::instance()->count_column_urls( $table, $column, $this->old_url ); 97 | $count += $this->count_column_urls_with_updaters( $table, $column ); 98 | 99 | if ( null !== $doubled ) { 100 | $count -= Database::instance()->count_column_urls( $table, $column, $this->new_url ); 101 | } 102 | } ); 103 | 104 | return $count; 105 | } 106 | 107 | 108 | /** 109 | * Remove any prepended subdomain from email addresses. 110 | * 111 | * If we change a domain to a subdomain like www, and an email address 112 | * is using the original domain we end up with an email address that 113 | * includes @www We remove the prepended www from email addresses 114 | * here. 115 | * 116 | * @param string $table - Any database table. 117 | * @param string $column - Any column within the provided table. 118 | * 119 | * @return int 120 | */ 121 | protected function update_email_addresses( $table, $column ) { 122 | $url = wp_parse_url( $this->old_url ); 123 | $doubled = $this->get_doubled_up_subdomain(); 124 | if ( null === $doubled || ! empty( $url['scheme'] ) ) { 125 | return 0; 126 | } 127 | return Database::instance()->update_column( $table, $column, '@' . $this->new_url, '@' . $this->old_url ); 128 | } 129 | 130 | 131 | /** 132 | * Using all registered updaters, replace the Updater's variation 133 | * of the URL. 134 | * 135 | * Actual translation and updating is handled by each updater. 136 | * We simply load and call them here. 137 | * 138 | * @param string $table - Any database table. 139 | * @param string $column - Any column within the provided table. 140 | * 141 | * @return int 142 | */ 143 | protected function update_column_with_updaters( $table, $column ): int { 144 | $doubled = $this->get_doubled_up_subdomain(); 145 | $count = 0; 146 | \array_map( function( string $class_name ) use ( $doubled, $table, $column, &$count ) { 147 | if ( \class_exists( $class_name ) ) { 148 | /* @var Updaters_Abstract $updater - An updater instance. */ 149 | $updater = $class_name::factory( $table, $column, $this->old_url, $this->new_url ); 150 | $count += $updater->update_data(); 151 | if ( null !== $doubled ) { 152 | $updater = $class_name::factory( $table, $column, $doubled, $this->new_url ); 153 | $count -= $updater->update_data(); 154 | } 155 | } 156 | }, Repo::instance()->get_updaters() ); 157 | return $count; 158 | } 159 | 160 | 161 | /** 162 | * Using all registered updaters, count the Updater's variation 163 | * of the URL. 164 | * 165 | * Actual counting is handled by each updater. 166 | * We simply load and call them here. 167 | * 168 | * @param string $table - Any database table. 169 | * @param string $column - Any column within the provided table. 170 | * 171 | * @return int 172 | */ 173 | protected function count_column_urls_with_updaters( $table, $column ): int { 174 | $count = 0; 175 | \array_map( function( $class_name ) use ( $table, $column, &$count ) { 176 | if ( \class_exists( $class_name ) ) { 177 | /* @var Updaters_Abstract $updater - An updater instance. */ 178 | $updater = $class_name::factory( $table, $column, $this->old_url, $this->new_url ); 179 | $count += $updater->count_urls(); 180 | } 181 | }, Repo::instance()->get_updaters() ); 182 | return $count; 183 | } 184 | 185 | 186 | /** 187 | * Update values in all serialized columns within the specified tables. 188 | * 189 | * Detection of which columns are possibly serialized is handled within 190 | * the Serialized class. We simply provide the OLD and NEW URL and the 191 | * list of tables we are updating. 192 | * 193 | * @return array 194 | */ 195 | public function update_serialized_values(): array { 196 | $serialized = new Serialized( $this->old_url, $this->new_url ); 197 | $counts = $serialized->update_all_serialized_tables( $this->tables ); 198 | 199 | $doubled = $this->get_doubled_up_subdomain(); 200 | if ( null !== $doubled ) { 201 | $keys = \array_keys( $counts ); 202 | $serialized = new Serialized( $doubled, $this->new_url ); 203 | $counts = \array_combine( $keys, \array_map( function( $value, $subtract ) { 204 | return $value - $subtract; 205 | }, $counts, $serialized->update_all_serialized_tables( $this->tables ) ) ); 206 | if ( false === $counts ) { 207 | return []; 208 | } 209 | 210 | // Remove a prepended subdomain like www. from email addresses. 211 | $serialized = new Serialized( '@' . $this->new_url, '@' . $this->old_url ); 212 | $counts = \array_combine( $keys, \array_map( function( $value, $subtract ) { 213 | return $value - $subtract; 214 | }, $counts, $serialized->update_all_serialized_tables( $this->tables ) ) ); 215 | if ( false === $counts ) { 216 | return []; 217 | } 218 | } 219 | 220 | return $counts; 221 | } 222 | 223 | 224 | /** 225 | * If the new domain is the old one with a new subdomain like www. 226 | * the first round of updates will create double subdomains in 227 | * the database like www.www. 228 | * 229 | * Return the doubled up subdomain if it exists, otherwise null. 230 | * 231 | * @since 6.1.0 232 | * 233 | * @return string|null 234 | */ 235 | public function get_doubled_up_subdomain() { 236 | if ( static::is_subdomain( $this->old_url, $this->new_url ) ) { 237 | return \str_replace( $this->old_url, $this->new_url, $this->new_url ); 238 | } 239 | return null; 240 | } 241 | 242 | 243 | /** 244 | * Return all database columns for a specified table that 245 | * match the column types we update. 246 | * 247 | * We include any varchar or char which are 21 characters 248 | * or above which takes care of a lot of core columns which 249 | * don't store Urls. 250 | * 251 | * @since 6.1.0 252 | * 253 | * @param string $table - Database table to retrieve from. 254 | * 255 | * @return string[] 256 | */ 257 | protected function get_table_columns( $table ) { 258 | global $wpdb; 259 | 260 | $all = $wpdb->get_results( $wpdb->prepare( "SELECT COLUMN_NAME as name, COLUMN_TYPE as type FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='{$wpdb->dbname}' AND TABLE_NAME=%s", $table ) ); 261 | $types = Database::instance()->get_column_types(); 262 | 263 | return wp_list_pluck( array_filter( $all, function( $column ) use ( $types ) { 264 | // Strip the (\d) from varchar and char with (21) and over. 265 | return \in_array( preg_replace( '/\((\d{3}|[3-9]\d|2[1-9])\d*?\)/', '', $column->type ), $types, true ); 266 | } ), 'name' ); 267 | } 268 | 269 | 270 | /** 271 | * Is a new URL a subdomain of the old URL? 272 | * 273 | * @since 6.2.4 274 | * 275 | * @param string $old_url - Old URL. 276 | * @param string $new_url - New URL. 277 | * 278 | * @return bool 279 | */ 280 | public static function is_subdomain( $old_url, $new_url ) { 281 | return false !== \strpos( $new_url, $old_url ); 282 | } 283 | 284 | 285 | /** 286 | * Construct the Updates class. 287 | * 288 | * @param string $old_url - Entered old URL. 289 | * @param string $new_url - Entered new URL. 290 | * 291 | * @param string[] $tables - List of tables to interact with. 292 | * 293 | * @return static 294 | */ 295 | public static function factory( $old_url, $new_url, array $tables ) { 296 | return new static( $old_url, $new_url, $tables ); 297 | } 298 | } 299 | --------------------------------------------------------------------------------