├── vendor ├── freemius │ └── wordpress-sdk │ │ ├── templates │ │ ├── partials │ │ │ └── index.php │ │ ├── index.php │ │ ├── js │ │ │ ├── index.php │ │ │ ├── open-license-activation.php │ │ │ ├── jquery.content-change.php │ │ │ └── style-premium-theme.php │ │ ├── account │ │ │ ├── index.php │ │ │ ├── partials │ │ │ │ ├── index.php │ │ │ │ ├── deactivate-license-button.php │ │ │ │ └── activate-license-button.php │ │ │ └── payments.php │ │ ├── connect │ │ │ ├── index.php │ │ │ ├── permission.php │ │ │ └── permissions-group.php │ │ ├── debug │ │ │ ├── index.php │ │ │ ├── logger.php │ │ │ └── plugins-themes-sync.php │ │ ├── forms │ │ │ ├── index.php │ │ │ ├── deactivation │ │ │ │ ├── index.php │ │ │ │ ├── contact.php │ │ │ │ └── retry-skip.php │ │ │ └── premium-versions-upgrade-metadata.php │ │ ├── plugin-info │ │ │ ├── index.php │ │ │ ├── screenshots.php │ │ │ └── description.php │ │ ├── ajax-loader.php │ │ ├── plugin-icon.php │ │ ├── checkout.php │ │ ├── add-trial-to-pricing.php │ │ ├── api-connectivity-message-js.php │ │ ├── secure-https-header.php │ │ ├── email.php │ │ ├── sticky-admin-notice-js.php │ │ ├── tabs-capture-js.php │ │ ├── gdpr-optin-js.php │ │ ├── admin-notice.php │ │ ├── checkout │ │ │ └── redirect.php │ │ ├── clone-resolution-js.php │ │ └── contact.php │ │ ├── index.php │ │ ├── assets │ │ ├── index.php │ │ ├── css │ │ │ ├── index.php │ │ │ ├── admin │ │ │ │ ├── index.php │ │ │ │ ├── gdpr-optin-notice.css │ │ │ │ ├── plugins.css │ │ │ │ ├── checkout.css │ │ │ │ ├── debug.css │ │ │ │ ├── clone-resolution.css │ │ │ │ ├── affiliation.css │ │ │ │ └── optout.css │ │ │ └── customizer.css │ │ ├── img │ │ │ ├── index.php │ │ │ ├── theme-icon.png │ │ │ └── plugin-icon.png │ │ └── js │ │ │ ├── index.php │ │ │ ├── pricing │ │ │ ├── 178afa6030e76635dbe835e111d2c507.png │ │ │ ├── 27b5a722a5553d9de0170325267fccec.png │ │ │ ├── 4375c4a3ddc6f637c2ab9a2d7220f91e.png │ │ │ ├── 45da596e2b512ffc3bb638baaf0fdc4e.png │ │ │ ├── c03f665db27af43971565560adfba594.png │ │ │ ├── cb5fc4f6ec7ada72e986f6e7dde365bf.png │ │ │ ├── d65812c447b4523b42d59018e1c0bb53.png │ │ │ ├── f3aac72a8e63997d6bb888f816457e9b.png │ │ │ ├── fde48e4609a6ddc11d639fc2421f2afd.png │ │ │ └── freemius-pricing.js.LICENSE.txt │ │ │ ├── jquery.form.js │ │ │ ├── postmessage.js │ │ │ └── nojquery.ba-postmessage.js │ │ ├── includes │ │ ├── index.php │ │ ├── sdk │ │ │ ├── index.php │ │ │ └── Exceptions │ │ │ │ ├── index.php │ │ │ │ ├── InvalidArgumentException.php │ │ │ │ ├── EmptyArgumentException.php │ │ │ │ ├── ArgumentNotExistException.php │ │ │ │ ├── OAuthException.php │ │ │ │ └── Exception.php │ │ ├── debug │ │ │ ├── index.php │ │ │ ├── debug-bar-start.php │ │ │ └── class-fs-debug-bar-panel.php │ │ ├── entities │ │ │ ├── index.php │ │ │ ├── class-fs-scope-entity.php │ │ │ ├── class-fs-plugin-info.php │ │ │ ├── class-fs-plugin-tag.php │ │ │ ├── class-fs-billing.php │ │ │ ├── class-fs-affiliate.php │ │ │ ├── class-fs-user.php │ │ │ ├── class-fs-plugin-plan.php │ │ │ ├── class-fs-pricing.php │ │ │ └── class-fs-entity.php │ │ ├── managers │ │ │ ├── index.php │ │ │ ├── class-fs-contact-form-manager.php │ │ │ └── class-fs-license-manager.php │ │ ├── customizer │ │ │ ├── index.php │ │ │ └── class-fs-customizer-support-section.php │ │ ├── supplements │ │ │ ├── index.php │ │ │ ├── fs-migration-2.5.1.php │ │ │ ├── fs-essential-functions-1.1.7.1.php │ │ │ └── fs-essential-functions-2.2.1.php │ │ ├── l10n.php │ │ ├── class-fs-hook-snapshot.php │ │ ├── class-fs-user-lock.php │ │ ├── class-fs-security.php │ │ └── class-fs-lock.php │ │ ├── languages │ │ ├── index.php │ │ ├── freemius-ja.mo │ │ ├── freemius-ta.mo │ │ ├── freemius-cs_CZ.mo │ │ ├── freemius-da_DK.mo │ │ ├── freemius-de_DE.mo │ │ ├── freemius-es_ES.mo │ │ ├── freemius-fr_FR.mo │ │ ├── freemius-he_IL.mo │ │ ├── freemius-hu_HU.mo │ │ ├── freemius-it_IT.mo │ │ ├── freemius-nl_NL.mo │ │ ├── freemius-ru_RU.mo │ │ └── freemius-zh_CN.mo │ │ ├── composer.json │ │ └── require.php ├── composer │ ├── autoload_namespaces.php │ ├── autoload_psr4.php │ ├── platform_check.php │ ├── LICENSE │ └── autoload_real.php ├── afragen │ ├── singleton │ │ ├── composer.json │ │ ├── LICENSE │ │ ├── README.md │ │ └── Singleton.php │ ├── wp-dismiss-notice │ │ ├── composer.json │ │ ├── LICENSE │ │ ├── README.md │ │ └── js │ │ │ └── dismiss-notice.js │ └── wordpress-plugin-readme-parser │ │ ├── composer.json │ │ └── README.md ├── autoload.php └── erusev │ └── parsedown │ ├── composer.json │ ├── .github │ └── workflows │ │ └── unit-tests.yaml │ └── LICENSE.txt ├── assets ├── banner-772x250.png ├── GitUpdater_Logo.png ├── banner-1544x500.png ├── github-logo.svg └── icon.svg ├── github-updater.php ├── css ├── git-updater.css └── git-updater-settings.css ├── src └── Git_Updater │ ├── Additions │ └── Bootstrap.php │ ├── WP_CLI │ ├── CLI_Common.php │ └── CLI.php │ ├── Ignore.php │ ├── REST │ └── Rest_Upgrader_Skin.php │ ├── Init.php │ ├── API │ └── Zipfile_API.php │ └── Language_Pack.php ├── js ├── ghu-install.js ├── ajax-activate.js └── gu-install-vanilla.js ├── composer.json ├── gu-uninstall.php ├── git-updater.php ├── readme.txt └── README.md /vendor/freemius/wordpress-sdk/templates/partials/index.php: -------------------------------------------------------------------------------- 1 | array($vendorDir . '/erusev/parsedown'), 10 | ); 11 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/ajax-loader.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/css/admin/gdpr-optin-notice.css: -------------------------------------------------------------------------------- 1 | .fs-notice[data-id^=gdpr_optin_actions] .underlined{text-decoration:underline}.fs-notice[data-id^=gdpr_optin_actions] ul .action-description,.fs-notice[data-id^=gdpr_optin_actions] ul .button{vertical-align:middle}.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{display:inline-block;margin-left:3px} -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/sdk/Exceptions/InvalidArgumentException.php: -------------------------------------------------------------------------------- 1 | array($vendorDir . '/dealerdirect/phpcodesniffer-composer-installer/src'), 10 | 'McAskill\\Composer\\' => array($vendorDir . '/mcaskill/composer-exclude-files/src'), 11 | 'Fragen\\Git_Updater\\' => array($baseDir . '/src/Git_Updater'), 12 | ); 13 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/js/jquery.form.js: -------------------------------------------------------------------------------- 1 | !function(n){n.extend({form:function(r,e,t){null==t&&(t="POST"),null==e&&(e={});var o=n("
").attr({method:t,action:r}).css({display:"none"}),a=function(r,e){if(n.isArray(e))for(var t=0;t").attr({type:"hidden",name:String(r),value:String(e)}))};for(var i in e)e.hasOwnProperty(i)&&a(i,e[i]);return o.appendTo("body")}})}(jQuery); -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/css/admin/plugins.css: -------------------------------------------------------------------------------- 1 | label.fs-tag,span.fs-tag{background:#ffba00;border-radius:3px;color:#fff;display:inline-block;font-size:11px;line-height:11px;padding:5px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;line-height:10px;margin-left:5px} -------------------------------------------------------------------------------- /css/git-updater.css: -------------------------------------------------------------------------------- 1 | div.install-theme-info { 2 | display: block !important; 3 | } 4 | 5 | /* Remove star rating for themes. */ 6 | #theme-installer div.install-theme-info div.star-rating { 7 | display: none; 8 | } 9 | 10 | 11 | @media screen and (max-width: 782px) { 12 | /* Properly align branch switcher in mobile. */ 13 | .plugins .plugin-update-tr .notice { margin-left: 0; } 14 | 15 | /* Fix for ::before on mobile. */ 16 | .git-updater.plugin-update-tr.active:before { 17 | background-color: #f0f6fc; 18 | border-left: 4px solid #72aee6; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Git_Updater/Additions/Bootstrap.php: -------------------------------------------------------------------------------- 1 | load_hooks(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/plugin-icon.php: -------------------------------------------------------------------------------- 1 | 20 |
21 | 22 |
-------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/entities/class-fs-scope-entity.php: -------------------------------------------------------------------------------- 1 | =5.6.5" 28 | }, 29 | "autoload": { 30 | "classmap": [ 31 | "Singleton.php" 32 | ] 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /vendor/afragen/wp-dismiss-notice/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "afragen/wp-dismiss-notice", 3 | "description": "Library for time dismissible WordPress admin notices.", 4 | "version": "0.3.7", 5 | "type": "library", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Andy Fragen", 10 | "email": "andy@thefragens.com", 11 | "homepage": "https://thefragens.com", 12 | "role": "Developer" 13 | } 14 | ], 15 | "prefer-stable": true, 16 | "require": { 17 | "php": ">=5.6" 18 | }, 19 | "support": { 20 | "issues": "https://github.com/afragen/wp-dismiss-notice/issues", 21 | "source": "https://github.com/afragen/wp-dismiss-notice" 22 | }, 23 | "autoload": { 24 | "classmap": [ 25 | "wp-dismiss-notice.php" 26 | ] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /vendor/autoload.php: -------------------------------------------------------------------------------- 1 | is_premium() ) { 23 | fs_require_template( 'checkout/frame.php', $VARS ); 24 | } else { 25 | fs_require_template( 'checkout/redirect.php', $VARS ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/plugin-info/screenshots.php: -------------------------------------------------------------------------------- 1 | 22 |
    23 | $url ) : ?> 25 |
  1. 26 | 27 |
  2. 28 | 29 |
30 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-info.php: -------------------------------------------------------------------------------- 1 | get_slug(); 18 | 19 | echo fs_text_inline( 'Sorry for the inconvenience and we are here to help if you give us a chance.', 'contact-support-before-deactivation', $slug ) 20 | . sprintf(" %s", 21 | $fs->contact_url( 'technical_support' ), 22 | fs_text_inline( 'Contact Support', 'contact-support', $slug ) 23 | ); 24 | -------------------------------------------------------------------------------- /vendor/erusev/parsedown/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "erusev/parsedown", 3 | "description": "Parser for Markdown.", 4 | "keywords": ["markdown", "parser"], 5 | "homepage": "http://parsedown.org", 6 | "type": "library", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Emanuil Rusev", 11 | "email": "hello@erusev.com", 12 | "homepage": "http://erusev.com" 13 | } 14 | ], 15 | "require": { 16 | "php": ">=7.1", 17 | "ext-mbstring": "*" 18 | }, 19 | "require-dev": { 20 | "phpunit/phpunit": "^7.5|^8.5|^9.6" 21 | }, 22 | "autoload": { 23 | "psr-0": {"Parsedown": ""} 24 | }, 25 | "autoload-dev": { 26 | "psr-0": { 27 | "TestParsedown": "test/", 28 | "ParsedownTest": "test/", 29 | "CommonMarkTest": "test/", 30 | "CommonMarkTestWeak": "test/" 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /assets/github-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/add-trial-to-pricing.php: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /vendor/afragen/wordpress-plugin-readme-parser/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "afragen/wordpress-plugin-readme-parser", 3 | "description": "A clone of the current WordPress.org Plugin Readme Parser, class-parser.php", 4 | "type": "library", 5 | "keywords": [ 6 | "wordpress", 7 | "readme", 8 | "parser" 9 | ], 10 | "license": "MIT", 11 | "repositories": [ 12 | { 13 | "type": "vcs", 14 | "url": "https://github.com/afragen/wordpress-plugin-reamde-parser" 15 | } 16 | ], 17 | "authors": [ 18 | { 19 | "name": "WordPress.org", 20 | "homepage": "https://meta.trac.wordpress.org/browser/sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/readme" 21 | } 22 | ], 23 | "prefer-stable": true, 24 | "require": { 25 | "php": ">=5.4", 26 | "erusev/parsedown": "dev-master#0b274ac959624e6c6d647e9c9b6c2d20da242004" 27 | }, 28 | "autoload": { 29 | "classmap": [ 30 | "class-parser.php" 31 | ] 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /vendor/composer/platform_check.php: -------------------------------------------------------------------------------- 1 | = 80000)) { 8 | $issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.0". You are running ' . PHP_VERSION . '.'; 9 | } 10 | 11 | if ($issues) { 12 | if (!headers_sent()) { 13 | header('HTTP/1.1 500 Internal Server Error'); 14 | } 15 | if (!ini_get('display_errors')) { 16 | if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { 17 | fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); 18 | } elseif (!headers_sent()) { 19 | echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; 20 | } 21 | } 22 | throw new \RuntimeException( 23 | 'Composer detected issues in your platform: ' . implode(' ', $issues) 24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /vendor/afragen/wordpress-plugin-readme-parser/README.md: -------------------------------------------------------------------------------- 1 | # WordPress Plugin Readme Parser 2 | 3 | A scrape of the current [WordPress.org Plugin Readme Parser](https://meta.trac.wordpress.org/browser/sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/readme) 4 | 5 | In my [Git Updater](https://github.com/afragen/git-updater) plugin I use the WP.org Plugin Directory readme parser. I created this library to allow me to more easily include the `class-parser.php` for my project by using composer. 6 | 7 | I will try to keep this as up-to-date as possible. 8 | 9 | The `index.php` file, when run locally, will update the `class-parser.php` file with the most current version in meta.trac.wordpress.org. 10 | 11 | ## Usage 12 | 13 | `composer require afragen/wordpress-plugin-readme-parser:dev-master` 14 | 15 | `class-parser.php` uses [Michelf’s Markdown_Extra](https://github.com/michelf/php-markdown) but I use a more lightweight markdown parser, [erusev’s Parsedown](https://github.com/erusev/parsedown). Parsedown is required in this `composer.json`. 16 | -------------------------------------------------------------------------------- /vendor/erusev/parsedown/.github/workflows/unit-tests.yaml: -------------------------------------------------------------------------------- 1 | on: 2 | - push 3 | - pull_request 4 | 5 | jobs: 6 | phpunit: 7 | runs-on: ubuntu-latest 8 | 9 | strategy: 10 | matrix: 11 | php: 12 | - '7.1' 13 | - '7.2' 14 | - '7.3' 15 | - '7.4' 16 | - '8.0' 17 | - '8.1' 18 | - '8.2' 19 | - '8.3' 20 | - '8.4' 21 | 22 | steps: 23 | - name: Checkout the source code 24 | uses: actions/checkout@v4 25 | 26 | - name: Set up PHP 27 | uses: shivammathur/setup-php@v2 28 | with: 29 | php-version: '${{ matrix.php }}' 30 | 31 | - name: Install dependencies 32 | run: composer install 33 | 34 | - name: Run tests 35 | run: | 36 | vendor/bin/phpunit 37 | vendor/bin/phpunit test/CommonMarkTestWeak.php || true 38 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/css/admin/checkout.css: -------------------------------------------------------------------------------- 1 | .fs-ajax-loader{height:20px;margin:auto;position:relative;width:170px}.fs-ajax-loader .fs-ajax-loader-bar{animation-direction:normal;animation-duration:1.5s;animation-iteration-count:infinite;animation-name:bounce_ajaxLoader;background-color:#fff;height:20px;position:absolute;top:0;transform:scale(.3);width:20px}.fs-ajax-loader .fs-ajax-loader-bar-1{animation-delay:.6s;left:0}.fs-ajax-loader .fs-ajax-loader-bar-2{animation-delay:.75s;left:19px}.fs-ajax-loader .fs-ajax-loader-bar-3{animation-delay:.9s;left:38px}.fs-ajax-loader .fs-ajax-loader-bar-4{animation-delay:1.05s;left:57px}.fs-ajax-loader .fs-ajax-loader-bar-5{animation-delay:1.2s;left:76px}.fs-ajax-loader .fs-ajax-loader-bar-6{animation-delay:1.35s;left:95px}.fs-ajax-loader .fs-ajax-loader-bar-7{animation-delay:1.5s;left:114px}.fs-ajax-loader .fs-ajax-loader-bar-8{animation-delay:1.65s;left:133px}@keyframes bounce_ajaxLoader{0%{background-color:#0074a3;transform:scale(1)}to{background-color:#fff;transform:scale(.3)}}@media screen and (max-width:782px){#wpbody-content{padding-bottom:0!important}}.fs-checkout-process-redirect{padding:40px;text-align:center} -------------------------------------------------------------------------------- /vendor/composer/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Copyright (c) Nils Adermann, Jordi Boggiano 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is furnished 9 | to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | 22 | -------------------------------------------------------------------------------- /vendor/afragen/singleton/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Andy Fragen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /vendor/afragen/wp-dismiss-notice/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Andy Fragen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /vendor/erusev/parsedown/LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2018 Emanuil Rusev, erusev.com 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/supplements/fs-migration-2.5.1.php: -------------------------------------------------------------------------------- 1 | $install ) { 21 | if ( true === $install->is_disconnected ) { 22 | $permission_manager->update_site_tracking( 23 | false, 24 | ( 0 == $blog_id ) ? null : $blog_id, 25 | // Update only if permissions are not yet set. 26 | true 27 | ); 28 | } 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/css/admin/debug.css: -------------------------------------------------------------------------------- 1 | label.fs-tag,span.fs-tag{background:#ffba00;border-radius:3px;color:#fff;display:inline-block;font-size:11px;line-height:11px;padding:5px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}.fs-debug-table-toggle-button{background:transparent;border:none;cursor:pointer;font-size:1.2em}.fs-debug-table{overflow:hidden}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:700}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac!important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be} -------------------------------------------------------------------------------- /vendor/afragen/wp-dismiss-notice/README.md: -------------------------------------------------------------------------------- 1 | # WP Dismiss Notice 2 | 3 | Add time dismissible admin notices to WordPress. 4 | Fork of https://github.com/w3guy/persist-admin-notices-dismissal 5 | 6 | ## Instuctions 7 | 8 | Initialize the class. 9 | 10 | `new \WP_Dismiss_Notice();` in your project. 11 | 12 | ### Admin notice format. 13 | 14 | You must add `data-dismissible='-'` to the admin notice div class. `` values are from one day '1' to 'forever'. Default timeout is 14 days. The `` should be some unique value based upon the admin notice that you wish to dismiss. 15 | 16 | Example using a 14 day dismissible notice. 17 | 18 | ```html 19 |
...
20 | ``` 21 | 22 | Use the filter `dismiss_notice_vendor_dir` if you have set the composer `vendor-dir` to a non-standard location. 23 | 24 | /** 25 | * Filter composer.json vendor directory. 26 | * Some people don't use the standard vendor directory. 27 | * 28 | * @param string Composer vendor directory. 29 | */ 30 | $vendor_dir = apply_filters( 'dismiss_notice_vendor_dir', '/vendor' ); 31 | -------------------------------------------------------------------------------- /vendor/afragen/wp-dismiss-notice/js/dismiss-notice.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @output wp-admin/js/dismiss-notice.js 3 | * 4 | * @see https://github.com/w3guy/persist-admin-notices-dismissal 5 | */ 6 | 7 | (function ($) { 8 | // Shorthand for ready event. 9 | $( 10 | function () { 11 | $('div[data-dismissible] button.notice-dismiss').on('click', 12 | function (event) { 13 | event.preventDefault(); 14 | var $this = $(this); 15 | 16 | var attr_value, option_name, dismissible_length, data; 17 | 18 | attr_value = $this.closest('div[data-dismissible]').attr('data-dismissible').split('-'); 19 | 20 | // Remove the dismissible length from the attribute value and rejoin the array. 21 | dismissible_length = attr_value.pop(); 22 | 23 | option_name = attr_value.join('-'); 24 | 25 | data = { 26 | 'action': 'wp_dismiss_notice', 27 | 'option_name': option_name, 28 | 'dismissible_length': dismissible_length, 29 | 'nonce': window.wp_dismiss_notice.nonce 30 | }; 31 | 32 | // Run Ajax request. 33 | $.post(window.wp_dismiss_notice.ajaxurl, data); 34 | $this.closest('div[data-dismissible]').hide('slow'); 35 | } 36 | ); 37 | } 38 | ); 39 | 40 | }(jQuery)); 41 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/api-connectivity-message-js.php: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /css/git-updater-settings.css: -------------------------------------------------------------------------------- 1 | /* Position Settings input */ 2 | input.gu-callback-text { 3 | width: 50%; 4 | } 5 | 6 | input.bitbucket_setting { 7 | margin-top: 5px; 8 | } 9 | 10 | /* Position Save and Refresh buttons */ 11 | .git-updater-settings form.settings p.submit { 12 | float: left; 13 | clear: right; 14 | width: 40%; 15 | } 16 | 17 | .git-updater-settings form.settings.no-sub-tabs p.submit { 18 | margin-top: 10px; 19 | } 20 | 21 | div.hide-git-updater-settings { 22 | display: none; 23 | } 24 | 25 | .git-updater-settings .form-table th[scope='row']:empty { 26 | display: none; 27 | } 28 | 29 | .git-updater-settings .git-oauth-icon { 30 | display: block; 31 | clear: both; 32 | width: 100px; 33 | margin: 2em; 34 | display: none; 35 | } 36 | 37 | /* Add-Ons */ 38 | .git-updater.plugin-card.plugin-card-git-updater-pro .name h3::after { 39 | content: "♥♥♥"; 40 | color: red; 41 | } 42 | 43 | .git-updater.plugin-card .plugin-card-bottom .submit { 44 | margin-top: 0; 45 | padding: 0; 46 | } 47 | 48 | .git-updater.plugin-card .desc { 49 | margin-right: 0; 50 | } 51 | 52 | .git-updater-addons .plugin-card-bottom .column-rating, 53 | .git-updater-addons .plugin-card-bottom .column-downloaded { 54 | display: none; 55 | } 56 | -------------------------------------------------------------------------------- /src/Git_Updater/WP_CLI/CLI_Common.php: -------------------------------------------------------------------------------- 1 | base_prefix . 'sitemeta' : $wpdb->base_prefix . 'options'; 26 | $column = is_multisite() ? 'meta_key' : 'option_name'; 27 | $delete_string = 'DELETE FROM ' . $table . ' WHERE ' . $column . ' LIKE %s LIMIT 1000'; 28 | $get_options_string = 'SELECT * FROM ' . $table . ' WHERE ' . $column . ' LIKE %s'; 29 | 30 | $ghu_options = $wpdb->get_results( $wpdb->prepare( $get_options_string, [ '%ghu-%' ] ) ); // phpcs:ignore 31 | foreach ( $ghu_options as $option ) { 32 | delete_site_option( $option->option_name ); 33 | } 34 | 35 | $wpdb->query( $wpdb->prepare( $delete_string, [ '%ghu-%' ] ) ); // phpcs:ignore 36 | 37 | return true; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/secure-https-header.php: -------------------------------------------------------------------------------- 1 | 15 |
16 | 17 | get_text_inline( 'Secure HTTPS %s page, running from an external domain', 'secure-x-page-header' ), 29 | $VARS['page'] 30 | ) ) . 31 | ' - ' . 32 | sprintf( 33 | '%s', 34 | 'https://www.mcafeesecure.com/verify?host=' . WP_FS__ROOT_DOMAIN_PRODUCTION, 35 | 'Freemius Inc. [US]' 36 | ); 37 | } 38 | ?> 39 |
-------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/email.php: -------------------------------------------------------------------------------- 1 | 18 | 19 | $section ) { 21 | ?> 22 | 23 | 24 | 25 | 26 | $row ) { 28 | $col_count = count( $row ); 29 | ?> 30 | 31 | 33 | 34 | 36 | 37 | 38 | 41 | 42 | 45 | 46 | 49 |
:
-------------------------------------------------------------------------------- /js/ghu-install.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Javascript to show and hide the API specific settings 3 | * for the remote install feature. 4 | * 5 | * @class Fragen\GitHub_Updater\Install 6 | * @since 4.6.0 7 | * @access public 8 | * @package git-updater 9 | */ 10 | 11 | jQuery( document ).ready( 12 | function ($) { 13 | // Hide non-default (Bitbucket & GitLab) settings on page load. 14 | $.each( 15 | ['bitbucket', 'gitlab', 'gitea', 'zipfile'], 16 | function () { 17 | $( 'input.'.concat( this, '_setting' ) ).parents( 'tr' ).hide(); 18 | } 19 | ); 20 | 21 | // When the api selector changes. 22 | $( 'select[ name="github_updater_api" ]' ).on( 23 | 'change', 24 | function () { 25 | 26 | // create difference array. 27 | var hideMe = $( ['github', 'bitbucket', 'gitlab', 'gitea', 'zipfile'] ).not( [this.value] ).get(); 28 | 29 | /* 30 | * Show/hide all settings that have the selected api's class. 31 | * this.value equals either 'github', 'bitbucket', or 'gitlab'. 32 | */ 33 | $.each( 34 | hideMe, 35 | function () { 36 | $( 'input.'.concat( this, '_setting' ) ).parents( 'tr' ).hide(); 37 | } 38 | ); 39 | 40 | $( 'input.'.concat( this.value, '_setting' ) ).parents( 'tr' ).show(); 41 | 42 | } 43 | ); 44 | } 45 | ); 46 | -------------------------------------------------------------------------------- /vendor/composer/autoload_real.php: -------------------------------------------------------------------------------- 1 | register(true); 35 | 36 | return $loader; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/forms/deactivation/retry-skip.php: -------------------------------------------------------------------------------- 1 | get_slug(); 18 | 19 | $skip_url = fs_nonce_url( $fs->_get_admin_page_url( '', array( 'fs_action' => $fs->get_unique_affix() . '_skip_activation' ) ), $fs->get_unique_affix() . '_skip_activation' ); 20 | $skip_text = strtolower( fs_text_x_inline( 'Skip', 'verb', 'skip', $slug ) ); 21 | $use_plugin_anonymously_text = fs_text_inline( 'Click here to use the plugin anonymously', 'click-here-to-use-plugin-anonymously', $slug ); 22 | 23 | echo sprintf( fs_text_inline( "You might have missed it, but you don't have to share any data and can just %s the opt-in.", 'dont-have-to-share-any-data', $slug ), "{$skip_text}" ) 24 | . " {$use_plugin_anonymously_text}"; -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/js/pricing/freemius-pricing.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /* 2 | object-assign 3 | (c) Sindre Sorhus 4 | @license MIT 5 | */ 6 | 7 | /*! 8 | * Determine if an object is a Buffer 9 | * 10 | * @author Feross Aboukhadijeh 11 | * @license MIT 12 | */ 13 | 14 | /*! 15 | * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com 16 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 17 | */ 18 | 19 | /** @license React v0.20.2 20 | * scheduler.production.min.js 21 | * 22 | * Copyright (c) Facebook, Inc. and its affiliates. 23 | * 24 | * This source code is licensed under the MIT license found in the 25 | * LICENSE file in the root directory of this source tree. 26 | */ 27 | 28 | /** @license React v17.0.2 29 | * react-dom.production.min.js 30 | * 31 | * Copyright (c) Facebook, Inc. and its affiliates. 32 | * 33 | * This source code is licensed under the MIT license found in the 34 | * LICENSE file in the root directory of this source tree. 35 | */ 36 | 37 | /** @license React v17.0.2 38 | * react.production.min.js 39 | * 40 | * Copyright (c) Facebook, Inc. and its affiliates. 41 | * 42 | * This source code is licensed under the MIT license found in the 43 | * LICENSE file in the root directory of this source tree. 44 | */ 45 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/js/open-license-activation.php: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/l10n.php: -------------------------------------------------------------------------------- 1 | removed_actions[ $hook ] = $wp_filter[ $hook ]; 30 | unset( $wp_filter[ $hook ] ); 31 | } 32 | } 33 | 34 | /** 35 | * Restore previously removed actions for a given hook. 36 | */ 37 | public function restore( $hook ) { 38 | global $wp_filter; 39 | 40 | if ( ! empty( $wp_filter ) && isset( $this->removed_actions[ $hook ] ) ) { 41 | $wp_filter[ $hook ] = $this->removed_actions[ $hook ]; 42 | unset( $this->removed_actions[ $hook ] ); 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/sticky-admin-notice-js.php: -------------------------------------------------------------------------------- 1 | 16 | 41 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/supplements/fs-essential-functions-1.1.7.1.php: -------------------------------------------------------------------------------- 1 | $data ) { 35 | if ( 0 === strpos( $file_real_path, fs_normalize_path( dirname( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ) . '/' ) ) ) { 36 | if ( '.' !== dirname( trailingslashit( $relative_path ) ) ) { 37 | return $relative_path; 38 | } 39 | } 40 | } 41 | 42 | return null; 43 | } 44 | -------------------------------------------------------------------------------- /vendor/afragen/singleton/README.md: -------------------------------------------------------------------------------- 1 | # singleton 2 | 3 | This is a singleton static proxy generator that I use in several projects instead of creating true Singletons. It was inspired by [Alain Schlesser’s post on Singletons](https://www.alainschlesser.com/singletons-shared-instances/). 4 | 5 | I’ve moved this library into it’s own repository so that I will be better able to include it via composer. 6 | 7 | I have written it to work with PSR-4. 8 | 9 | `composer require afragen/singleton:dev-master` 10 | 11 | When using this Singleton class in your project you will create an array of class instances. 12 | 13 | ## Usage 14 | 15 | ```php 16 | @param string $class_name Class name. 17 | @param object $caller Originating object. 18 | @param null|array|object $options Options for class constructor. 19 | Optional. 20 | 21 | Singleton::get_instance( $class_name, $calling_class, $options ); 22 | ``` 23 | 24 | This will usually be called as follows. 25 | 26 | `Singleton::get_instance( 'MyClass', $this );` 27 | 28 | I do my best to automatically determine the namespace of the class. If the class is in a subfolder of `src` it will need to be designated in the call as follows. 29 | 30 | If PSR-4 is set for the `src` directory and the class lives in `src/MySubDir/MyClass` the corresponding call would be as follows. 31 | 32 | `Singleton::get_instance( 'MySubDir\MyClass', $this );` 33 | 34 | I’m still learning how to properly set up using composer so this may be updated along the way. 35 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/account/partials/deactivate-license-button.php: -------------------------------------------------------------------------------- 1 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/js/postmessage.js: -------------------------------------------------------------------------------- 1 | !function(t,e){var s,n,o,i,r,a,c,p,u=this;u.FS=u.FS||{},u.FS.PostMessage=(n=new NoJQueryPostMessageMixin("postMessage","receiveMessage"),o={},i=decodeURIComponent(document.location.hash.replace(/^#/,"")),r=i.substring(0,i.indexOf("/","https://"===i.substring(0,8)?8:7)),a=""!==i,c=t(window),p=t("html"),{init:function(t,e){s=t,n.receiveMessage((function(t){var e=JSON.parse(t.data);if(o[e.type])for(var s=0;s0&&c.on("scroll",(function(){for(var t=0;t error-phpstan.xml" 12 | }, 13 | "require": { 14 | "php": ">=5.6" 15 | }, 16 | "autoload": { 17 | "files": [ 18 | "start.php" 19 | ] 20 | }, 21 | "require-dev": { 22 | "wp-coding-standards/wpcs": "^2.3", 23 | "dealerdirect/phpcodesniffer-composer-installer": "^1.0", 24 | "squizlabs/php_codesniffer": "^3.7", 25 | "phpcompatibility/php-compatibility": "^9.3", 26 | "phpcompatibility/phpcompatibility-wp": "^2.1", 27 | "szepeviktor/phpstan-wordpress": "^1.3", 28 | "phpstan/extension-installer": "^1.3" 29 | }, 30 | "prefer-stable": true, 31 | "config": { 32 | "allow-plugins": { 33 | "dealerdirect/phpcodesniffer-composer-installer": true, 34 | "phpstan/extension-installer": true 35 | }, 36 | "platform": { 37 | "php": "8.0" 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-tag.php: -------------------------------------------------------------------------------- 1 | release_mode ); 67 | } 68 | } -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "afragen/git-updater", 3 | "description": "A plugin to automatically update GitHub, Bitbucket, GitLab, or Gitea hosted plugins, themes, and language packs.", 4 | "type": "wordpress-plugin", 5 | "keywords": [ 6 | "wordpress", 7 | "plugin", 8 | "theme", 9 | "updater" 10 | ], 11 | "license": "GPL-3.0-or-later", 12 | "authors": [ 13 | { 14 | "name": "Andy Fragen", 15 | "email": "andy@thefragens.com", 16 | "homepage": "https://thefragens.com", 17 | "role": "Developer" 18 | } 19 | ], 20 | "repositories": [ 21 | { 22 | "type": "vcs", 23 | "url": "https://github.com/afragen/git-updater" 24 | } 25 | ], 26 | "support": { 27 | "issues": "https://github.com/afragen/git-updater/issues", 28 | "source": "https://github.com/afragen/git-updater" 29 | }, 30 | "prefer-stable": true, 31 | "require": { 32 | "php": ">=8.0", 33 | "afragen/wordpress-plugin-readme-parser": "^1", 34 | "erusev/parsedown": "dev-master#0b274ac959624e6c6d647e9c9b6c2d20da242004", 35 | "afragen/singleton": "^1.0", 36 | "afragen/wp-dismiss-notice": "*", 37 | "freemius/wordpress-sdk": "^2.12" 38 | }, 39 | "require-dev": { 40 | "wp-coding-standards/wpcs": "^3.0.0", 41 | "mcaskill/composer-exclude-files": "^4.0" 42 | }, 43 | "extra": { 44 | "exclude-from-files": [ 45 | "freemius/wordpress-sdk/start.php" 46 | ] 47 | }, 48 | "config": { 49 | "allow-plugins": { 50 | "dealerdirect/phpcodesniffer-composer-installer": true, 51 | "mcaskill/composer-exclude-files": true 52 | } 53 | }, 54 | "autoload": { 55 | "psr-4": { 56 | "Fragen\\Git_Updater\\": "src/Git_Updater/" 57 | } 58 | }, 59 | "scripts": { 60 | "lint": "@php ./vendor/bin/phpcs .", 61 | "format": "@php ./vendor/bin/phpcbf ." 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/forms/premium-versions-upgrade-metadata.php: -------------------------------------------------------------------------------- 1 | _get_license(); 19 | 20 | if ( ! is_object( $license ) ) { 21 | $purchase_url = $fs->pricing_url(); 22 | } else { 23 | $subscription = $fs->_get_subscription( $license->id ); 24 | 25 | $purchase_url = $fs->checkout_url( 26 | is_object( $subscription ) ? 27 | ( 1 == $subscription->billing_cycle ? WP_FS__PERIOD_MONTHLY : WP_FS__PERIOD_ANNUALLY ) : 28 | WP_FS__PERIOD_LIFETIME, 29 | false, 30 | array( 'licenses' => $license->quota ) 31 | ); 32 | } 33 | 34 | $plugin_data = $fs->get_plugin_data(); 35 | ?> 36 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/js/jquery.content-change.php: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/js/style-premium-theme.php: -------------------------------------------------------------------------------- 1 | get_premium_slug(); 21 | 22 | ?> 23 | -------------------------------------------------------------------------------- /assets/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 19 | 20 | 21 | 22 | 43 | 44 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/entities/class-fs-billing.php: -------------------------------------------------------------------------------- 1 | 29 |
  • 31 | 32 | 33 |
    34 |
    35 |
    36 | 37 | 38 |
    39 | class="fs-tooltip-trigger"> 40 | 41 |

    42 |
    43 |
  • -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/debug/class-fs-debug-bar-panel.php: -------------------------------------------------------------------------------- 1 | title( 'Freemius' ); // @phpstan-ignore-line 27 | } 28 | 29 | public static function requests_count() { 30 | if ( class_exists( 'Freemius_Api_WordPress' ) ) { 31 | $logger = Freemius_Api_WordPress::GetLogger(); 32 | } else { 33 | $logger = array(); 34 | } 35 | 36 | return number_format( count( $logger ) ); 37 | } 38 | 39 | public static function total_time() { 40 | if ( class_exists( 'Freemius_Api_WordPress' ) ) { 41 | $logger = Freemius_Api_WordPress::GetLogger(); 42 | } else { 43 | $logger = array(); 44 | } 45 | 46 | $total_time = .0; 47 | foreach ( $logger as $l ) { 48 | $total_time += $l['total']; 49 | } 50 | 51 | return number_format( 100 * $total_time, 2 ) . ' ' . fs_text_x_inline( 'ms', 'milliseconds' ); 52 | } 53 | 54 | public function render() { 55 | ?> 56 |
    57 | 58 |
    59 | 60 |
    61 | 62 |
    63 | 64 |
    65 | get_slug(); 25 | 26 | ?> 27 |
    28 |
    29 |

    30 | 31 |
    32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | > 45 | 46 | 47 | 48 | 51 | 52 | 53 | 54 |
    id ?>created ) ) ?>formatted_gross() ?>is_migrated() ) : ?>
    55 |
    56 |
    57 |
    58 | get_slug(); 19 | ?> 20 | -------------------------------------------------------------------------------- /gu-uninstall.php: -------------------------------------------------------------------------------- 1 | base_prefix . 'sitemeta' : $wpdb->base_prefix . 'options'; 38 | $column = is_multisite() ? 'meta_key' : 'option_name'; 39 | $delete_string = 'DELETE FROM ' . $table . ' WHERE ' . $column . ' LIKE %s LIMIT 1000'; 40 | $get_options_string = 'SELECT * FROM ' . $table . ' WHERE ' . $column . ' LIKE %s'; 41 | 42 | $ghu_options = $wpdb->get_results( $wpdb->prepare( $get_options_string, [ '%ghu-%' ] ) ); // phpcs:ignore 43 | foreach ( $ghu_options as $option ) { 44 | delete_site_option( $option->option_name ); 45 | } 46 | 47 | $wpdb->query( $wpdb->prepare( $delete_string, [ '%ghu-%' ] ) ); // phpcs:ignore 48 | -------------------------------------------------------------------------------- /src/Git_Updater/Ignore.php: -------------------------------------------------------------------------------- 1 | load_hooks(); 36 | } 37 | 38 | /** 39 | * Load hooks. 40 | * 41 | * @return void 42 | */ 43 | public function load_hooks() { 44 | 45 | // Remove repository from array of repositories. 46 | add_filter( 47 | 'gu_config_pre_process', 48 | static function ( $config ) { 49 | foreach ( self::$repos as $slug => $file ) { 50 | unset( $config[ $slug ] ); 51 | } 52 | 53 | return $config; 54 | }, 55 | 10, 56 | 1 57 | ); 58 | 59 | // Fix to display properly in Settings git subtab. 60 | add_filter( 61 | 'gu_display_repos', 62 | static function ( $type_repos ) { 63 | foreach ( self::$repos as $slug => $file ) { 64 | if ( isset( $type_repos[ $slug ] ) ) { 65 | $type_repos[ $slug ]->remote_version = false; 66 | $type_repos[ $slug ]->dismiss = true; 67 | } 68 | } 69 | 70 | return $type_repos; 71 | }, 72 | 10, 73 | 1 74 | ); 75 | 76 | // Don't display Settings token field. 77 | add_filter( 78 | 'gu_add_repo_setting_field', 79 | static function ( $arr, $token ) { 80 | foreach ( self::$repos as $file ) { 81 | if ( $file === $token->file ) { 82 | $arr = []; 83 | } 84 | } 85 | 86 | return $arr; 87 | }, 88 | 15, 89 | 2 90 | ); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/css/admin/affiliation.css: -------------------------------------------------------------------------------- 1 | #fs_affiliation_content_wrapper #messages{margin-top:25px}#fs_affiliation_content_wrapper h3{font-size:24px;margin-left:0;padding:0}#fs_affiliation_content_wrapper ul li{box-sizing:border-box;list-style-type:none}#fs_affiliation_content_wrapper ul li:before{content:"✓";font-weight:700;margin-right:10px}#fs_affiliation_content_wrapper label,#fs_affiliation_content_wrapper li,#fs_affiliation_content_wrapper p:not(.description){font-size:16px!important;line-height:26px!important}#fs_affiliation_content_wrapper .button{font-size:16px;height:40px;line-height:35px;margin-bottom:7px;margin-top:20px}#fs_affiliation_content_wrapper .button#cancel_button{margin-right:5px}#fs_affiliation_content_wrapper form .input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form .input-container .input-label{display:block;font-weight:700;width:100%}#fs_affiliation_content_wrapper form .input-container.input-container-text input,#fs_affiliation_content_wrapper form .input-container.input-container-text label,#fs_affiliation_content_wrapper form .input-container.input-container-text textarea{display:block}#fs_affiliation_content_wrapper form .input-container #add_domain,#fs_affiliation_content_wrapper form .input-container .remove-domain{display:inline-block;margin-top:3px;text-decoration:none}#fs_affiliation_content_wrapper form .input-container #add_domain:focus,#fs_affiliation_content_wrapper form .input-container .remove-domain:focus{box-shadow:none}#fs_affiliation_content_wrapper form .input-container #add_domain.disabled,#fs_affiliation_content_wrapper form .input-container .remove-domain.disabled{color:#aaa;cursor:default}#fs_affiliation_content_wrapper form #extra_domains_container .description{margin-top:0;position:relative;top:-4px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain{display:inline-block;margin-right:5px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain:last-of-type{margin-bottom:0} -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/sdk/Exceptions/Exception.php: -------------------------------------------------------------------------------- 1 | _result = $result; 23 | 24 | $code = 0; 25 | $message = 'Unknown error, please check GetResult().'; 26 | $type = ''; 27 | 28 | if ( isset( $result['error'] ) && is_array( $result['error'] ) ) { 29 | if ( isset( $result['error']['code'] ) ) { 30 | $code = $result['error']['code']; 31 | } 32 | if ( isset( $result['error']['message'] ) ) { 33 | $message = $result['error']['message']; 34 | } 35 | if ( isset( $result['error']['type'] ) ) { 36 | $type = $result['error']['type']; 37 | } 38 | } 39 | 40 | $this->_type = $type; 41 | $this->_code = $code; 42 | 43 | parent::__construct( $message, is_numeric( $code ) ? $code : 0 ); 44 | } 45 | 46 | /** 47 | * Return the associated result object returned by the API server. 48 | * 49 | * @return array The result from the API server 50 | */ 51 | public function getResult() { 52 | return $this->_result; 53 | } 54 | 55 | public function getStringCode() { 56 | return $this->_code; 57 | } 58 | 59 | public function getType() { 60 | return $this->_type; 61 | } 62 | 63 | /** 64 | * To make debugging easier. 65 | * 66 | * @return string The string representation of the error 67 | */ 68 | public function __toString() { 69 | $str = $this->getType() . ': '; 70 | 71 | if ( $this->code != 0 ) { 72 | $str .= $this->getStringCode() . ': '; 73 | } 74 | 75 | return $str . $this->getMessage(); 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/entities/class-fs-affiliate.php: -------------------------------------------------------------------------------- 1 | status ); 47 | } 48 | 49 | /** 50 | * @author Leo Fajardo 51 | * 52 | * @return bool 53 | */ 54 | function is_pending() { 55 | return ( 'pending' === $this->status ); 56 | } 57 | 58 | /** 59 | * @author Leo Fajardo 60 | * 61 | * @return bool 62 | */ 63 | function is_suspended() { 64 | return ( 'suspended' === $this->status ); 65 | } 66 | 67 | /** 68 | * @author Leo Fajardo 69 | * 70 | * @return bool 71 | */ 72 | function is_rejected() { 73 | return ( 'rejected' === $this->status ); 74 | } 75 | 76 | /** 77 | * @author Leo Fajardo 78 | * 79 | * @return bool 80 | */ 81 | function is_blocked() { 82 | return ( 'blocked' === $this->status ); 83 | } 84 | } -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/entities/class-fs-user.php: -------------------------------------------------------------------------------- 1 | is_beta ); 61 | } 62 | } 63 | 64 | function get_name() { 65 | return trim( ucfirst( trim( is_string( $this->first ) ? $this->first : '' ) ) . ' ' . ucfirst( trim( is_string( $this->last ) ? $this->last : '' ) ) ); 66 | } 67 | 68 | function is_verified() { 69 | return ( isset( $this->is_verified ) && true === $this->is_verified ); 70 | } 71 | 72 | /** 73 | * @author Leo Fajardo (@leorw) 74 | * @since 2.4.2 75 | * 76 | * @return bool 77 | */ 78 | function is_beta() { 79 | // Return `false` since this is just for backward compatibility. 80 | return false; 81 | } 82 | 83 | static function get_type() { 84 | return 'user'; 85 | } 86 | } -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/debug/logger.php: -------------------------------------------------------------------------------- 1 | 15 |

    16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 33 | 39 | > 42 | 43 | 44 | 45 | 46 | 57 | 62 | 63 | 64 | 65 | 66 |
    #
    .get_id() ?> 47 | %s', 50 | esc_html( substr( $log['msg'], 0, 32 ) ) . ( 32 < strlen( $log['msg'] ) ? '...' : '' ) 51 | ); 52 | ?> 53 |
    54 | 55 |
    56 |
    get_file() ) . ':' . $log['line']; 60 | } 61 | ?>
    -------------------------------------------------------------------------------- /src/Git_Updater/WP_CLI/CLI.php: -------------------------------------------------------------------------------- 1 | 33 | * : delete the cache 34 | * 35 | * ## EXAMPLES 36 | * 37 | * wp git-updater cache delete 38 | * 39 | * @param array $args Array of arguments. 40 | * 41 | * @subcommand cache 42 | */ 43 | public function cache( $args ) { 44 | list($action) = $args; 45 | if ( 'delete' === $action ) { 46 | Singleton::get_instance( 'CLI_Common', $this )->delete_all_cached_data(); 47 | WP_CLI::success( 'Git Updater cache has been cleared.' ); 48 | } else { 49 | WP_CLI::error( sprintf( 'Incorrect command syntax, see %s for proper syntax.', '`wp help git-updater cache`' ) ); 50 | } 51 | WP_CLI::success( 'WP-Cron is now running.' ); 52 | WP_CLI::runcommand( 'cron event run --due-now' ); 53 | } 54 | 55 | /** 56 | * Reset Git Updater REST API key. 57 | * 58 | * ## EXAMPLES 59 | * 60 | * wp git-updater reset-api-key 61 | * 62 | * @subcommand reset-api-key 63 | */ 64 | public function reset_api_key() { 65 | delete_site_option( 'git_updater_api_key' ); 66 | Singleton::get_instance( 'Fragen\Git_Updater\Remote_Management', $this )->ensure_api_key_is_set(); 67 | $namespace = Singleton::get_instance( 'Fragen\Git_Updater\Base', $this )->get_class_vars( 'Fragen\Git_Updater\REST\REST_API', 'namespace' ); 68 | $api_key = get_site_option( 'git_updater_api_key' ); 69 | $api_url = add_query_arg( 70 | [ 'key' => $api_key ], 71 | home_url( "wp-json/$namespace/update/" ) 72 | ); 73 | 74 | WP_CLI::success( 'Git Updater REST API key has been reset.' ); 75 | WP_CLI::success( sprintf( 'The new REST API key is: `%s`', $api_key ) ); 76 | WP_CLI::success( sprintf( 'The current REST API endpoint for updating is `%s`', $api_url ) ); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /js/ajax-activate.js: -------------------------------------------------------------------------------- 1 | (function( $, wp ) { 2 | var $document = $( document ), 3 | $pluginFilter = $( "#plugin-filter, #plugin-information-footer" ), 4 | __ = wp.i18n.__; 5 | _x = wp.i18n._x, 6 | 7 | $document.off( 'click', '#plugin-information-footer .activate-now' ); 8 | 9 | $pluginFilter.off( "click" ); 10 | $pluginFilter.on( "click", ".activate-now", function( event ) { 11 | event.preventDefault(); 12 | var $activateButton = $( event.target ); 13 | 14 | if ( $activateButton.hasClass( "activating-message" ) || $activateButton.hasClass( "button-disabled" ) ) { 15 | return; 16 | } 17 | 18 | $activateButton 19 | .removeClass( "activate-now button-primary" ) 20 | .addClass( "activating-message" ) 21 | .attr( 22 | "aria-label", 23 | sprintf( 24 | /* translators: %s: Plugin name. */ 25 | $activateButton.data( "name" ), 26 | _x( "Activating %s", "plugin" ), 27 | ) 28 | ) 29 | .text( __( "Activating..." ) ); 30 | 31 | wp.updates.activatePlugin( 32 | { 33 | name: $activateButton.data( "name" ), 34 | slug: $activateButton.data( "slug" ), 35 | plugin: $activateButton.data( "plugin" ) 36 | } 37 | ); 38 | }); 39 | 40 | /** 41 | * Pulls available jobs from the queue and runs them. 42 | * 43 | * @since 4.2.0 44 | * @since 4.6.0 Can handle multiple job types. 45 | */ 46 | wp.updates.queueChecker = function() { 47 | var job; 48 | 49 | if ( wp.updates.ajaxLocked || ! wp.updates.queue.length ) { 50 | return; 51 | } 52 | 53 | job = wp.updates.queue.shift(); 54 | 55 | // Handle a queue job. 56 | switch ( job.action ) { 57 | case 'install-plugin': 58 | wp.updates.installPlugin( job.data ); 59 | break; 60 | 61 | case 'update-plugin': 62 | wp.updates.updatePlugin( job.data ); 63 | break; 64 | 65 | case 'delete-plugin': 66 | wp.updates.deletePlugin( job.data ); 67 | break; 68 | 69 | case 'install-theme': 70 | wp.updates.installTheme( job.data ); 71 | break; 72 | 73 | case 'update-theme': 74 | wp.updates.updateTheme( job.data ); 75 | break; 76 | 77 | case 'delete-theme': 78 | wp.updates.deleteTheme( job.data ); 79 | break; 80 | 81 | case 'check_plugin_dependencies': 82 | wp.updates.checkPluginDependencies( job.data ); 83 | break; 84 | 85 | default: 86 | break; 87 | } 88 | }; 89 | })( jQuery, window.wp, window._wpUpdatesSettings ); 90 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/js/nojquery.ba-postmessage.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery postMessage - v0.5 - 9/11/2009 3 | * http://benalman.com/projects/jquery-postmessage-plugin/ 4 | * 5 | * Copyright (c) 2009 "Cowboy" Ben Alman 6 | * Dual licensed under the MIT and GPL licenses. 7 | * http://benalman.com/about/license/ 8 | * 9 | * Non-jQuery fork by Jeff Lee 10 | * 11 | * This fork consists of the following changes: 12 | * 1. Basic code cleanup and restructuring, for legibility. 13 | * 2. The `postMessage` and `receiveMessage` functions can be bound arbitrarily, 14 | * in terms of both function names and object scope. Scope is specified by 15 | * the the "this" context of NoJQueryPostMessageMixin(); 16 | * 3. I've removed the check for Opera 9.64, which used `$.browser`. There were 17 | * at least three different GitHub users requesting the removal of this 18 | * "Opera sniff" on the original project's Issues page, so I figured this 19 | * would be a relatively safe change. 20 | * 4. `postMessage` no longer uses `$.param` to serialize messages that are not 21 | * strings. I actually prefer this structure anyway. `receiveMessage` does 22 | * not implement a corresponding deserialization step, and as such it seems 23 | * cleaner and more symmetric to leave both data serialization and 24 | * deserialization to the client. 25 | * 5. The use of `$.isFunction` is replaced by a functionally-identical check. 26 | * 6. The `$:nomunge` YUI option is no longer necessary. 27 | */ 28 | function NoJQueryPostMessageMixin(n,e){var t,i,o,s,a,r=1;return window.postMessage?(window.addEventListener?(t=function(n){window.addEventListener("message",n,!1)},i=function(n){window.removeEventListener("message",n,!1)}):(t=function(n){window.attachEvent("onmessage",n)},i=function(n){window.detachEvent("onmessage",n)}),this[n]=function(n,e,t){e&&t.postMessage(n,e.replace(/([^:]+:\/\/[^\/]+).*/,"$1"))},this[e]=function(n,e,s){if(o&&(i(o),o=null),!n)return!1;o=t((function(t){switch(Object.prototype.toString.call(e)){case"[object String]":if(e!==t.origin)return!1;break;case"[object Function]":if(e(t.origin))return!1}n(t)}))}):(this[n]=function(n,e,t){e&&(t.location=e.replace(/#.*$/,"")+"#"+ +new Date+r+++"&"+n)},this[e]=function(n,e,t){s&&(clearInterval(s),s=null),n&&(t="number"==typeof e?e:"number"==typeof t?t:100,s=setInterval((function(){var e=document.location.hash,t=/^#?\d+&/;e!==a&&t.test(e)&&(a=e,n({data:e.replace(t,"")}))}),t))}),this} -------------------------------------------------------------------------------- /src/Git_Updater/REST/Rest_Upgrader_Skin.php: -------------------------------------------------------------------------------- 1 | upgrader->strings[ $message ] ) ) { 55 | $string = $this->upgrader->strings[ $message ]; 56 | } 57 | 58 | if ( empty( $string ) ) { 59 | return; 60 | } 61 | 62 | if ( str_contains( $string, '%' ) ) { 63 | if ( $args ) { 64 | $args = array_map( 'strip_tags', $args ); 65 | $args = array_map( 'esc_html', $args ); 66 | $string = vsprintf( $string, $args ); 67 | } 68 | } 69 | 70 | $this->messages[] = $string; 71 | } 72 | 73 | /** 74 | * Set the error flag to true, then let the base class handle the rest. 75 | * 76 | * @param mixed $errors Error messages. 77 | */ 78 | public function error( $errors ) { 79 | $this->error = true; 80 | parent::error( $errors ); 81 | } 82 | 83 | /** 84 | * Do nothing. 85 | * 86 | * @param mixed $type I don't know, not used. 87 | */ 88 | protected function decrement_update_count( $type ) { 89 | } 90 | 91 | /** 92 | * Do nothing. 93 | */ 94 | public function header() { 95 | } 96 | 97 | /** 98 | * Do nothing. 99 | */ 100 | public function footer() { 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/managers/class-fs-contact-form-manager.php: -------------------------------------------------------------------------------- 1 | 44 | */ 45 | public function get_query_params( Freemius $fs ) { 46 | $context_params = array( 47 | 'plugin_id' => $fs->get_id(), 48 | 'plugin_public_key' => $fs->get_public_key(), 49 | 'plugin_version' => $fs->get_plugin_version(), 50 | ); 51 | 52 | // Get site context secure params. 53 | if ( $fs->is_registered() ) { 54 | $context_params = array_merge( $context_params, FS_Security::instance()->get_context_params( 55 | $fs->get_site(), 56 | time(), 57 | 'contact' 58 | ) ); 59 | } 60 | 61 | return array_merge( $_GET, array_merge( $context_params, array( 62 | 'plugin_version' => $fs->get_plugin_version(), 63 | 'wp_login_url' => wp_login_url(), 64 | 'site_url' => Freemius::get_unfiltered_site_url(), 65 | // 'wp_admin_css' => get_bloginfo('wpurl') . "/wp-admin/load-styles.php?c=1&load=buttons,wp-admin,dashicons", 66 | ) ) ); 67 | } 68 | 69 | /** 70 | * Retrieves the standalone link to the Freemius Contact Form. 71 | * 72 | * @param Freemius $fs 73 | * 74 | * @return string 75 | */ 76 | public function get_standalone_link( Freemius $fs ) { 77 | $query_params = $this->get_query_params( $fs ); 78 | 79 | $query_params['is_standalone'] = 'true'; 80 | $query_params['parent_url'] = admin_url( add_query_arg( null, null ) ); 81 | 82 | return WP_FS__ADDRESS . '/contact/?' . http_build_query( $query_params ); 83 | } 84 | } -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/plugin-info/description.php: -------------------------------------------------------------------------------- 1 | info->selling_point_0 ) || 21 | ! empty( $plugin->info->selling_point_1 ) || 22 | ! empty( $plugin->info->selling_point_2 ) 23 | ) : ?> 24 |
    25 |
      26 | 27 | info->{'selling_point_' . $i} ) ) : ?> 28 |
    • 29 | 30 |

      info->{'selling_point_' . $i} ) ?>

    • 31 | 32 | 33 |
    34 |
    35 | 36 |
    37 | info->description, array( 39 | 'a' => array( 'href' => array(), 'title' => array(), 'target' => array() ), 40 | 'b' => array(), 41 | 'i' => array(), 42 | 'p' => array(), 43 | 'blockquote' => array(), 44 | 'h2' => array(), 45 | 'h3' => array(), 46 | 'ul' => array(), 47 | 'ol' => array(), 48 | 'li' => array() 49 | ) ); 50 | ?> 51 |
    52 | info->screenshots ) ) : ?> 53 | info->screenshots ?> 54 |
    55 |

    slug ) ?>

    56 |
      57 | $url ) : ?> 59 |
    • 60 | 66 | 69 |
    • 70 | 71 |
    72 |
    73 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/account/partials/activate-license-button.php: -------------------------------------------------------------------------------- 1 | 35 |
    36 | 37 | 38 | 39 | 40 | 41 | 54 |
    -------------------------------------------------------------------------------- /git-updater.php: -------------------------------------------------------------------------------- 1 | deactivate_die(); 58 | } 59 | 60 | register_activation_hook( PLUGIN_FILE, [ new Bootstrap(), 'rename_on_activation' ] ); 61 | 62 | ( new Zipfile_API() )->load_hooks(); 63 | 64 | add_action( 65 | 'plugins_loaded', 66 | function () { 67 | ( new Bootstrap() )->run(); 68 | } 69 | ); 70 | 71 | // Initiate Additions. 72 | add_filter( 73 | 'gu_additions', 74 | static function ( $listing, $repos, $type ) { 75 | $config = get_site_option( 'git_updater_additions', [] ); 76 | $additions = new Additions(); 77 | $additions->register( $config, $repos, $type ); 78 | $additions->add_to_git_updater = array_merge( (array) $additions->add_to_git_updater, (array) $listing ); 79 | 80 | return $additions->add_to_git_updater; 81 | }, 82 | 10, 83 | 3 84 | ); 85 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/css/customizer.css: -------------------------------------------------------------------------------- 1 | #fs_customizer_upsell .fs-customizer-plan{background:#fff;border-radius:3px;padding:10px 20px 20px}#fs_customizer_upsell .fs-customizer-plan h2{line-height:2em;margin:0;position:relative;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;margin-left:-7px;margin-right:10px;vertical-align:bottom}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{background:#000;border-radius:5px;bottom:100%;box-shadow:1px 1px 1px rgba(0,0,0,.2);color:#fff;font-family:arial,serif;font-size:12px;font-weight:700;left:0;line-height:1.3em;margin-bottom:5px;opacity:0;padding:10px;position:absolute;right:0;text-align:left;transition:opacity .3s ease-in-out;visibility:hidden;z-index:999999}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc:after{border-color:#000 transparent transparent;border-style:solid;border-width:5px 5px 0;content:" ";display:block;height:0;left:21px;position:absolute;top:100%;width:0}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc:after{left:auto;right:21px}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{opacity:1;visibility:visible}#fs_customizer_upsell .button-primary{display:block;margin-top:10px;text-align:center}#fs_customizer_support{display:block!important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{display:block;margin-top:10px;width:100%}#fs_customizer_support .button-group .button{float:none;text-align:center;width:50%}#customize-theme-controls #accordion-section-freemius_upsell{border-bottom:1px solid #0085ba!important;border-top:1px solid #0085ba!important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title{background-color:#0085ba;border-bottom:none!important;border-left:4px solid #0085ba;color:#fff;outline:none;transition:background-color .15s ease-in-out,border-color .15s ease-in-out}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:hover{background-color:#008ec2;border-left-color:#0073aa}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:after{color:#fff}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title{border-left:none;border-right:4px solid #0085ba}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title:hover{border-right-color:#0073aa} -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/class-fs-user-lock.php: -------------------------------------------------------------------------------- 1 | _lock = new FS_Lock( "locked_{$current_user_id}" ); 53 | } 54 | 55 | /** 56 | * Try to acquire lock. If the lock is already set or is being acquired by another locker, don't do anything. 57 | * 58 | * @author Vova Feldman (@svovaf) 59 | * @since 2.1.0 60 | * 61 | * @param int $expiration 62 | * 63 | * @return bool TRUE if successfully acquired lock. 64 | */ 65 | function try_lock( $expiration = 0 ) { 66 | return $this->_lock->try_lock( $expiration ); 67 | } 68 | 69 | /** 70 | * Acquire lock regardless if it's already acquired by another locker or not. 71 | * 72 | * @author Vova Feldman (@svovaf) 73 | * @since 2.1.0 74 | * 75 | * @param int $expiration 76 | */ 77 | function lock( $expiration = 0 ) { 78 | $this->_lock->lock( $expiration ); 79 | } 80 | 81 | /** 82 | * Unlock the lock. 83 | * 84 | * @author Vova Feldman (@svovaf) 85 | * @since 2.1.0 86 | */ 87 | function unlock() { 88 | $this->_lock->unlock(); 89 | } 90 | } -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/gdpr-optin-js.php: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/managers/class-fs-license-manager.php: -------------------------------------------------------------------------------- 1 | get_slug() ); 24 | // 25 | // if ( ! isset( self::$_instances[ $slug ] ) ) { 26 | // self::$_instances[ $slug ] = new FS_License_Manager( $slug, $fs ); 27 | // } 28 | // 29 | // return self::$_instances[ $slug ]; 30 | // } 31 | // 32 | //// private function __construct($slug) { 33 | //// parent::__construct($slug); 34 | //// } 35 | // 36 | // function entry_id() { 37 | // return 'licenses'; 38 | // } 39 | // 40 | // function sync( $id ) { 41 | // 42 | // } 43 | // 44 | // /** 45 | // * @author Vova Feldman (@svovaf) 46 | // * @since 1.0.5 47 | // * @uses FS_Api 48 | // * 49 | // * @param number|bool $plugin_id 50 | // * 51 | // * @return FS_Plugin_License[]|stdClass Licenses or API error. 52 | // */ 53 | // function api_get_user_plugin_licenses( $plugin_id = false ) { 54 | // $api = $this->_fs->get_api_user_scope(); 55 | // 56 | // if ( ! is_numeric( $plugin_id ) ) { 57 | // $plugin_id = $this->_fs->get_id(); 58 | // } 59 | // 60 | // $result = $api->call( "/plugins/{$plugin_id}/licenses.json" ); 61 | // 62 | // if ( ! isset( $result->error ) ) { 63 | // for ( $i = 0, $len = count( $result->licenses ); $i < $len; $i ++ ) { 64 | // $result->licenses[ $i ] = new FS_Plugin_License( $result->licenses[ $i ] ); 65 | // } 66 | // 67 | // $result = $result->licenses; 68 | // } 69 | // 70 | // return $result; 71 | // } 72 | // 73 | // function api_get_many() { 74 | // 75 | // } 76 | // 77 | // function api_activate( $id ) { 78 | // 79 | // } 80 | // 81 | // function api_deactivate( $id ) { 82 | // 83 | // } 84 | 85 | /** 86 | * @param FS_Plugin_License[] $licenses 87 | * 88 | * @return bool 89 | */ 90 | static function has_premium_license( $licenses ) { 91 | if ( is_array( $licenses ) ) { 92 | foreach ( $licenses as $license ) { 93 | /** 94 | * @var FS_Plugin_License $license 95 | */ 96 | if ( ! $license->is_utilized() && $license->is_features_enabled() ) { 97 | return true; 98 | } 99 | } 100 | } 101 | 102 | return false; 103 | } 104 | } -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/class-fs-security.php: -------------------------------------------------------------------------------- 1 | id . 60 | $entity->secret_key . 61 | $entity->public_key . 62 | $action 63 | ); 64 | } 65 | 66 | /** 67 | * @param \FS_Scope_Entity $entity 68 | * @param int|bool $timestamp 69 | * @param string $action 70 | * 71 | * @return array 72 | */ 73 | function get_context_params( FS_Scope_Entity $entity, $timestamp = false, $action = '' ) { 74 | if ( false === $timestamp ) { 75 | $timestamp = time(); 76 | } 77 | 78 | return array( 79 | 's_ctx_type' => $entity->get_type(), 80 | 's_ctx_id' => $entity->id, 81 | 's_ctx_ts' => $timestamp, 82 | 's_ctx_secure' => $this->get_secure_token( $entity, $timestamp, $action ), 83 | ); 84 | } 85 | 86 | /** 87 | * Gets a sandbox trial token for a given plugin, plan, and trial timestamp. 88 | * 89 | * @param FS_Plugin $plugin 90 | * @param FS_Plugin_Plan $plan 91 | * @param int $trial_timestamp 92 | * 93 | * @return string 94 | */ 95 | function get_trial_token( FS_Plugin $plugin, FS_Plugin_Plan $plan, $trial_timestamp ) { 96 | return md5( 97 | $plugin->secret_key . $plugin->public_key . 98 | $plan->trial_period . 99 | $plan->id . 100 | $trial_timestamp 101 | ); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/connect/permissions-group.php: -------------------------------------------------------------------------------- 1 | get_text_x_inline( 'Opt Out', 'verb', 'opt-out' ); 32 | $opt_in_text = $fs->get_text_x_inline( 'Opt In', 'verb', 'opt-in' ); 33 | 34 | if ( empty( $permission_group[ 'prompt' ] ) ) { 35 | $is_enabled = false; 36 | 37 | foreach ( $permission_group[ 'permissions' ] as $permission ) { 38 | if ( true === $permission[ 'default' ] ) { 39 | // Even if one of the permissions is on, treat as if the entire group is on. 40 | $is_enabled = true; 41 | break; 42 | } 43 | } 44 | } else { 45 | $is_enabled = ( isset( $permission_group['is_enabled'] ) && true === $permission_group['is_enabled'] ); 46 | } 47 | ?> 48 |
    49 |
    50 |
    51 | 56 | 60 |
    61 |

    65 |
      66 | render_permission( $permission ); 69 | } 70 | ?> 71 |
    72 |
    -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/debug/plugins-themes-sync.php: -------------------------------------------------------------------------------- 1 | get_option( 'all_plugins' ); 15 | $all_themes = $fs_options->get_option( 'all_themes' ); 16 | 17 | /* translators: %s: time period (e.g. In "2 hours") */ 18 | $in_x_text = fs_text_inline( 'In %s', 'in-x' ); 19 | /* translators: %s: time period (e.g. "2 hours" ago) */ 20 | $x_ago_text = fs_text_inline( '%s ago', 'x-ago' ); 21 | $sec_text = fs_text_x_inline( 'sec', 'seconds' ); 22 | ?> 23 |

    24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 73 | 74 | 75 | 76 |
    plugins ) ?>timestamp ) && is_numeric( $all_plugins->timestamp ) ) { 39 | $diff = abs( WP_FS__SCRIPT_START_TIME - $all_plugins->timestamp ); 40 | $human_diff = ( $diff < MINUTE_IN_SECONDS ) ? 41 | $diff . ' ' . $sec_text : 42 | human_time_diff( WP_FS__SCRIPT_START_TIME, $all_plugins->timestamp ); 43 | 44 | echo esc_html( sprintf( 45 | ( ( WP_FS__SCRIPT_START_TIME < $all_plugins->timestamp ) ? 46 | $in_x_text : 47 | $x_ago_text ), 48 | $human_diff 49 | ) ); 50 | } 51 | ?>
    themes ) ?>timestamp ) && is_numeric( $all_themes->timestamp ) ) { 60 | $diff = abs( WP_FS__SCRIPT_START_TIME - $all_themes->timestamp ); 61 | $human_diff = ( $diff < MINUTE_IN_SECONDS ) ? 62 | $diff . ' ' . $sec_text : 63 | human_time_diff( WP_FS__SCRIPT_START_TIME, $all_themes->timestamp ); 64 | 65 | echo esc_html( sprintf( 66 | ( ( WP_FS__SCRIPT_START_TIME < $all_themes->timestamp ) ? 67 | $in_x_text : 68 | $x_ago_text ), 69 | $human_diff 70 | ) ); 71 | } 72 | ?>
    77 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | # Git Updater 2 | 3 | Contributors: afragen 4 | Donate link: https://thefragens.com/git-updater-donate 5 | Tags: packages, language pack, updater 6 | Requires at least: 5.9 7 | Requires PHP: 8.0 8 | Tested up to: 6.9 9 | Stable tag: master 10 | License: GPL-3.0-or-later 11 | 12 | ## Description 13 | 14 | This plugin was originally designed to simply update any GitHub hosted WordPress plugin or theme. Currently, plugins or themes hosted on Bitbucket, GitLab, Gitea, or Gist are also supported via additional API plugins. Additionally, self-hosted git servers are supported. 15 | 16 | Your plugin or theme **must** contain a header in the style.css header or in the plugin's header denoting the location on GitHub. The format is as follows. 17 | 18 | GitHub Plugin URI: https://github.com/afragen/git-updater 19 | 20 | or 21 | 22 | GitHub Theme URI: https://github.com/afragen/test-child 23 | 24 | ...where the above URI leads to the __owner/repository__ of your theme or plugin. The URI format is `https://github.com//`. You **must not** include any extensions like `.git`. 25 | 26 | ### API Plugins 27 | 28 | API plugins for Bitbucket, GitLab, Gitea, and Gist are available. API plugins are available for a one-click install from the **Add-Ons** tab. 29 | 30 | * [Git Updater - Bitbucket](https://github.com/afragen/git-updater-bitbucket/releases/latest) 31 | * [Git Updater - GitLab](https://github.com/afragen/git-updater-gitlab/releases/latest) 32 | * [Git Updater - Gitea](https://github.com/afragen/git-updater-gitea/releases/latest) 33 | * [Git Updater - Gist](https://github.com/afragen/git-updater-gist/releases/latest) 34 | 35 | ### Sponsor 36 | 37 | Purchase a license at the [Git Updater Store](https://git-updater.com/store/). An unlimited yearly license is very reasonable and allows for authenticated API requests. There is an initial free trial period. After the trial period Git Updater will not be able to make authenticated API requests. 38 | 39 | You can [sponsor me on GitHub](https://github.com/sponsors/afragen) to help with continued development and support. 40 | 41 | ### Headers 42 | 43 | The following headers are available for use depending upon your hosting source. 44 | 45 | #### GitHub 46 | * GitHub Plugin URI 47 | * GitHub Theme URI 48 | * GitHub Languages 49 | 50 | ## Frequently Asked Questions 51 | 52 | #### Knowledge Base 53 | 54 | [Comprehensive information regarding Git Updater is available in the Knowledge Base.](https://git-updater.com/knowledge-base) 55 | 56 | #### Slack 57 | 58 | We now have a [Slack team for Git Updater](https://git-updater.slack.com). Please [click here for an invite](https://join.slack.com/t/git-updater/shared_invite/zt-1extq97hy-FjA1QAhjGNDzmFjjlRv3rg). You will be automatically added to the _#general_ and _#support_ channels. Please take a look at other channels too. 59 | 60 | #### Translations 61 | 62 | If you are a polyglot I would greatly appreciate translation contributions to [GlotPress for Git Updater](https://translate.git-updater.com). 63 | 64 | ## Installation 65 | 66 | Go to [git-updater.com](https://git-updater.com) to download and install the latest version. 67 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/customizer/class-fs-customizer-support-section.php: -------------------------------------------------------------------------------- 1 | register_section_type( 'FS_Customizer_Support_Section' ); 23 | 24 | parent::__construct( $manager, $id, $args ); 25 | } 26 | 27 | /** 28 | * The type of customize section being rendered. 29 | * 30 | * @since 1.0.0 31 | * @access public 32 | * @var string 33 | */ 34 | public $type = 'freemius-support-section'; 35 | 36 | /** 37 | * @var Freemius 38 | */ 39 | public $fs = null; 40 | 41 | /** 42 | * Add custom parameters to pass to the JS via JSON. 43 | * 44 | * @since 1.0.0 45 | */ 46 | public function json() { 47 | $json = parent::json(); 48 | 49 | $is_contact_visible = $this->fs->is_page_visible( 'contact' ); 50 | $is_support_visible = $this->fs->is_page_visible( 'support' ); 51 | 52 | $json['theme_title'] = $this->fs->get_plugin_name(); 53 | 54 | if ( $is_contact_visible && $is_support_visible ) { 55 | $json['theme_title'] .= ' ' . $this->fs->get_text_inline( 'Support', 'support' ); 56 | } 57 | 58 | if ( $is_contact_visible ) { 59 | $json['contact'] = array( 60 | 'label' => $this->fs->get_text_inline( 'Contact Us', 'contact-us' ), 61 | 'url' => $this->fs->contact_url(), 62 | ); 63 | } 64 | 65 | if ( $is_support_visible ) { 66 | $json['support'] = array( 67 | 'label' => $this->fs->get_text_inline( 'Support Forum', 'support-forum' ), 68 | 'url' => $this->fs->get_support_forum_url() 69 | ); 70 | } 71 | 72 | return $json; 73 | } 74 | 75 | /** 76 | * Outputs the Underscore.js template. 77 | * 78 | * @since 1.0.0 79 | */ 80 | protected function render_template() { 81 | ?> 82 |
  • 84 |

    85 | {{ data.theme_title }} 86 | <# if ( data.contact && data.support ) { #> 87 |
    88 | <# } #> 89 | <# if ( data.contact ) { #> 90 | {{ data.contact.label }} 91 | <# } #> 92 | <# if ( data.support ) { #> 93 | {{ data.support.label }} 94 | <# } #> 95 | <# if ( data.contact && data.support ) { #> 96 |
    97 | <# } #> 98 |

    99 |
  • 100 | load_options(); 45 | $this->base = Singleton::get_instance( 'Base', $this ); 46 | } 47 | 48 | /** 49 | * Let's get going. 50 | */ 51 | public function run() { 52 | if ( ! static::is_heartbeat() ) { 53 | $this->load_hooks(); 54 | } 55 | 56 | if ( static::is_wp_cli() ) { 57 | include_once __DIR__ . '/WP_CLI/CLI.php'; 58 | include_once __DIR__ . '/WP_CLI/CLI_Integration.php'; 59 | 60 | Singleton::get_instance( 'Plugin', $this )->get_remote_plugin_meta(); 61 | add_filter( 'site_transient_update_plugins', [ Singleton::get_instance( 'Plugin', $this ), 'update_site_transient' ], 15, 1 ); 62 | 63 | Singleton::get_instance( 'Theme', $this )->get_remote_theme_meta(); 64 | add_filter( 'site_transient_update_themes', [ Singleton::get_instance( 'Theme', $this ), 'update_site_transient' ], 15, 1 ); 65 | } 66 | } 67 | 68 | /** 69 | * Load relevant action/filter hooks. 70 | * Use 'init' hook for user capabilities. 71 | */ 72 | protected function load_hooks() { 73 | add_action( 'init', [ $this->base, 'load' ] ); 74 | add_action( 'init', [ $this->base, 'background_update' ] ); 75 | add_action( 'init', [ $this->base, 'set_options_filter' ] ); 76 | 77 | // Load hook for adding authentication headers for download packages. 78 | add_filter( 79 | 'upgrader_pre_download', 80 | function () { 81 | add_filter( 'http_request_args', [ $this, 'download_package' ], 15, 2 ); 82 | return false; // upgrader_pre_download filter default return value. 83 | } 84 | ); 85 | add_filter( 'upgrader_source_selection', [ $this->base, 'upgrader_source_selection' ], 10, 4 ); 86 | 87 | // Add git host icons. 88 | add_filter( 'plugin_row_meta', [ $this->base, 'row_meta_icons' ], 15, 2 ); 89 | add_filter( 'theme_row_meta', [ $this->base, 'row_meta_icons' ], 15, 2 ); 90 | 91 | // Check for deletion of cron event. 92 | add_filter( 'pre_unschedule_event', [ Singleton::get_instance( 'GU_Upgrade', $this ), 'pre_unschedule_event' ], 10, 3 ); 93 | } 94 | 95 | /** 96 | * Checks current user capabilities. 97 | * 98 | * @return bool 99 | */ 100 | public function can_update() { 101 | // WP-CLI access has full capabilities. 102 | if ( static::is_wp_cli() ) { 103 | return true; 104 | } 105 | 106 | $can_user_update = current_user_can( 'manage_options' ); 107 | 108 | return $can_user_update; 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Git Updater 2 | 3 | ![downloads](https://img.shields.io/github/downloads/afragen/git-updater/total) ![downloads@latest](https://img.shields.io/github/downloads/afragen/git-updater/latest/total) 4 | 5 | ![WordPress Tests](https://github.com/afragen/git-updater/workflows/WordPress%20Tests/badge.svg) 6 | 7 | * Contributors: [Andy Fragen](https://github.com/afragen), [contributors](https://github.com/afragen/git-updater/graphs/contributors) 8 | * Tags: packages, update, github, language pack 9 | * Requires at least: 5.9 10 | * Requires PHP: 8.0 11 | * Stable tag: [master](https://github.com/afragen/git-updater/releases/latest) 12 | * Donate link: 13 | * License: GPL-3.0-or-later 14 | 15 | A simple plugin to enable automatic updates to your GitHub hosted WordPress plugins, themes, and language packs. Additional API plugins available for Bitbucket, GitLab, Gitea, and Gist. 16 | 17 | [Comprehensive information regarding Git Updater is available in the Knowledge Base.](https://git-updater.com/knowledge-base) 18 | 19 | [Install the latest version here.](https://github.com/afragen/git-updater/releases/latest) 20 | 21 | ## Description 22 | 23 | This plugin was originally designed to simply update any GitHub hosted WordPress plugin or theme. Your plugin or theme **must** contain a header in the style.css header or in the plugin's header denoting the location on GitHub. The format is as follows. 24 | 25 | GitHub Plugin URI: https://github.com/afragen/git-updater 26 | 27 | or 28 | 29 | GitHub Theme URI: https://github.com/afragen/test-child 30 | 31 | ...where the above URI leads to the __owner/repository__ of your theme or plugin. The URI format is `https://github.com//`. You **should not** include any extensions like `.git`. 32 | 33 | ### API Plugins 34 | 35 | API plugins for Bitbucket, GitLab, Gitea, and Gist are available. API plugins are available for a one-click install from the **Add-Ons** tab. 36 | 37 | * [Git Updater - Bitbucket](https://github.com/afragen/git-updater-bitbucket/releases/latest) 38 | * [Git Updater - GitLab](https://github.com/afragen/git-updater-gitlab/releases/latest) 39 | * [Git Updater - Gitea](https://github.com/afragen/git-updater-gitea/releases/latest) 40 | * [Git Updater - Gist](https://github.com/afragen/git-updater-gist/releases/latest) 41 | 42 | ### Sponsor 43 | 44 | Purchase a license at the [Git Updater Store](https://git-updater.com/store/). An unlimited yearly license is very reasonable and allows for authenticated API requests. There is an initial free trial period. After the trial period Git Updater will not be able to make authenticated API requests. 45 | 46 | You can [sponsor me on GitHub](https://github.com/sponsors/afragen) to help with continued development and support. 47 | 48 | ## Slack 49 | 50 | We now have a [Slack team for Git Updater](https://git-updater.slack.com). Please [click here for an invite](https://join.slack.com/t/git-updater/shared_invite/zt-1extq97hy-FjA1QAhjGNDzmFjjlRv3rg). You will be automatically added to the _#general_ and _#support_ channels. Please take a look at other channels too. 51 | 52 | ## Translations 53 | 54 | If you are a polyglot I would greatly appreciate translation contributions to [GlotPress for Git Updater](https://translate.git-updater.com). 55 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/admin-notice.php: -------------------------------------------------------------------------------- 1 | 91 |
    > 92 | 93 | 96 | 97 | 98 | 99 |
    100 | 101 | 102 |
    103 | 104 | 105 |
    106 | 107 | 108 | 109 | 110 | 111 |
    112 |
    113 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/class-fs-lock.php: -------------------------------------------------------------------------------- 1 | _lock_id = $lock_id; 38 | 39 | if ( ! isset( self::$_thread_id ) ) { 40 | self::$_thread_id = mt_rand( 0, 32000 ); 41 | } 42 | } 43 | 44 | /** 45 | * Try to acquire lock. If the lock is already set or is being acquired by another locker, don't do anything. 46 | * 47 | * @param int $expiration 48 | * 49 | * @return bool TRUE if successfully acquired lock. 50 | */ 51 | function try_lock( $expiration = 0 ) { 52 | if ( $this->is_locked() ) { 53 | // Already locked. 54 | return false; 55 | } 56 | 57 | set_site_transient( $this->_lock_id, self::$_thread_id, $expiration ); 58 | 59 | if ( $this->has_lock() ) { 60 | $this->lock($expiration); 61 | 62 | return true; 63 | } 64 | 65 | return false; 66 | } 67 | 68 | /** 69 | * Acquire lock regardless if it's already acquired by another locker or not. 70 | * 71 | * @author Vova Feldman (@svovaf) 72 | * @since 2.1.0 73 | * 74 | * @param int $expiration 75 | */ 76 | function lock( $expiration = 0 ) { 77 | set_site_transient( $this->_lock_id, true, $expiration ); 78 | } 79 | 80 | /** 81 | * Checks if lock is currently acquired. 82 | * 83 | * @author Vova Feldman (@svovaf) 84 | * @since 2.1.0 85 | * 86 | * @return bool 87 | */ 88 | function is_locked() { 89 | return ( false !== get_site_transient( $this->_lock_id ) ); 90 | } 91 | 92 | /** 93 | * Unlock the lock. 94 | * 95 | * @author Vova Feldman (@svovaf) 96 | * @since 2.1.0 97 | */ 98 | function unlock() { 99 | delete_site_transient( $this->_lock_id ); 100 | } 101 | 102 | /** 103 | * Checks if lock is currently acquired by the current locker. 104 | * 105 | * @return bool 106 | */ 107 | protected function has_lock() { 108 | return ( self::$_thread_id == get_site_transient( $this->_lock_id ) ); 109 | } 110 | } -------------------------------------------------------------------------------- /vendor/afragen/singleton/Singleton.php: -------------------------------------------------------------------------------- 1 | getNamespaceName(); 62 | $namespace_parts = explode( '\\', $namespace ); 63 | $count = count( $namespace_parts ); 64 | $classes[-1] = null; 65 | 66 | for ( $i = 0; $i < $count; $i++ ) { 67 | $classes[ $i ] = ltrim( $classes[ $i - 1 ] . '\\' . $namespace_parts[ $i ], '\\' ); 68 | } 69 | 70 | $classes = array_reverse( $classes ); 71 | foreach ( $classes as $namespace ) { 72 | $namespaced_class = $namespace . '\\' . $class_name; 73 | if ( class_exists( $namespaced_class ) ) { 74 | return ltrim( $namespaced_class, '\\' ); 75 | } 76 | } 77 | 78 | try { 79 | throw new \Exception( "Undefined class '{$class_name}'" ); 80 | } catch ( \Exception $e ) { 81 | $message = "PHP Fatal error: {$e->getMessage()}\nPHP Stack trace:\n"; 82 | $trace = $e->getTraceAsString(); 83 | error_log( $message . $trace ); 84 | // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 85 | die( "
    {$message}{$trace}
    " ); 86 | } 87 | } 88 | 89 | /** 90 | * Get ReflectionClass of passed class name. 91 | * 92 | * @param string $class Class name. 93 | * 94 | * @return \ReflectionClass $reflection 95 | */ 96 | private static function get_reflection( $class ) { 97 | try { 98 | $reflection = new \ReflectionClass( $class ); 99 | } catch ( \ReflectionException $Exception ) { 100 | // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 101 | die( '' . $Exception->xdebug_message . '
    ' ); 102 | } 103 | 104 | return $reflection; 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/Git_Updater/API/Zipfile_API.php: -------------------------------------------------------------------------------- 1 | 'Zipfile' ] ); 51 | } 52 | 53 | /** 54 | * Add API data to $installed_apis. 55 | * 56 | * @param array $installed_apis Array of installed APIs. 57 | * 58 | * @return array 59 | */ 60 | public function set_installed_apis( $installed_apis ) { 61 | return array_merge( $installed_apis, [ 'zipfile_api' => true ] ); 62 | } 63 | 64 | /** 65 | * Set remote installation data for specific API. 66 | * 67 | * @param array $install Array of remote installation data. 68 | * @param array $headers Array of repository header data. 69 | * 70 | * @return array 71 | */ 72 | public function set_remote_install_data( $install, $headers ) { 73 | if ( 'zipfile' === $install['git_updater_api'] ) { 74 | $install = ( new Zipfile_API() )->remote_install( $headers, $install ); 75 | } 76 | 77 | return $install; 78 | } 79 | 80 | /** 81 | * Add remote install settings fields. 82 | * 83 | * @param string $type plugin|theme. 84 | */ 85 | public function add_install_settings_fields( $type ) { 86 | add_settings_field( 87 | 'zipfile_slug', 88 | esc_html__( 'Zipfile Slug', 'git-updater' ), 89 | [ $this, 'zipfile_slug' ], 90 | 'git_updater_install_' . $type, 91 | $type 92 | ); 93 | } 94 | 95 | /** 96 | * Set repo slug for remote install. 97 | */ 98 | public function zipfile_slug() { 99 | ?> 100 | 107 | get_id(); 23 | } 24 | 25 | $plan_id = fs_request_get( 'plan_id' ); 26 | $licenses = fs_request_get( 'licenses' ); 27 | 28 | $query_params = $fs_checkout->get_query_params( 29 | $fs, 30 | $plugin_id, 31 | $plan_id, 32 | $licenses 33 | ); 34 | 35 | // The return URL is a special page which will process the result. 36 | $return_url = $fs_checkout->get_checkout_redirect_return_url( $fs ); 37 | $query_params['return_url'] = $return_url; 38 | 39 | // Add the cancel URL to the same pricing page the request originated from. 40 | $query_params['cancel_url'] = $fs->pricing_url( 41 | fs_request_get( 'billing_cycle', 'annual' ), 42 | fs_request_get_bool( 'trial' ) 43 | ); 44 | 45 | if ( has_site_icon() ) { 46 | $query_params['cancel_icon'] = get_site_icon_url(); 47 | } 48 | 49 | // If the user didn't connect his account with Freemius, 50 | // once he accepts the Terms of Service and Privacy Policy, 51 | // and then click the purchase button, the context information 52 | // of the user will be shared with Freemius in order to complete the 53 | // purchase workflow and activate the license for the right user. 54 | $install_data = array_merge( 55 | $fs->get_opt_in_params(), 56 | array( 57 | 'activation_url' => fs_nonce_url( 58 | $fs->_get_admin_page_url( 59 | '', 60 | array( 61 | 'fs_action' => $fs->get_unique_affix() . '_activate_new', 62 | 'plugin_id' => $plugin_id, 63 | ) 64 | ), 65 | $fs->get_unique_affix() . '_activate_new' 66 | ), 67 | ) 68 | ); 69 | $query_params['install_data'] = json_encode( $install_data ); 70 | 71 | $query_params['_fs_dashboard_independent'] = true; 72 | 73 | $redirect_url = $fs_checkout->get_full_checkout_url( $query_params ); 74 | 75 | if ( ! fs_redirect( $redirect_url ) ) { 76 | // The Header was sent, so the server redirect failed. Rely on JS instead. 77 | ?> 78 |
    79 |
    80 | 81 |
    82 | 83 |
    84 |

    85 | click here if you\'re stuck...' ), 88 | esc_url( $redirect_url ) 89 | ), 90 | array( 'a' => array( 'href' => true ) ) 91 | ); ?> 92 |

    93 |
    94 |
    95 | 101 | languages ) { 52 | return; 53 | } 54 | 55 | $this->repo = $repo; 56 | $this->repo_api = $api; 57 | } 58 | 59 | /** 60 | * Do the Language Pack integration. 61 | */ 62 | public function run() { 63 | if ( null === $this->repo ) { 64 | return false; 65 | } 66 | 67 | $headers = $this->parse_header_uri( $this->repo->languages ); 68 | $this->repo_api->get_language_pack( $headers ); 69 | 70 | add_filter( 'site_transient_update_plugins', [ $this, 'update_site_transient' ] ); 71 | add_filter( 'site_transient_update_themes', [ $this, 'update_site_transient' ] ); 72 | } 73 | 74 | /** 75 | * Add language translations to update_plugins or update_themes transients. 76 | * 77 | * @param mixed $transient Update transient. 78 | * 79 | * @return mixed 80 | */ 81 | public function update_site_transient( $transient ) { 82 | $locales = get_available_languages(); 83 | $locales = ! empty( $locales ) ? $locales : [ get_locale() ]; 84 | $repos = []; 85 | 86 | if ( ! isset( $transient->translations ) ) { 87 | return $transient; 88 | } 89 | 90 | if ( 'site_transient_update_plugins' === current_filter() ) { 91 | $repos = Singleton::get_instance( 'Plugin', $this )->get_plugin_configs(); 92 | $translations = wp_get_installed_translations( 'plugins' ); 93 | } 94 | if ( 'site_transient_update_themes' === current_filter() ) { 95 | $repos = Singleton::get_instance( 'Theme', $this )->get_theme_configs(); 96 | $translations = wp_get_installed_translations( 'themes' ); 97 | } 98 | 99 | $repos = array_filter( 100 | $repos, 101 | function ( $e ) { 102 | return isset( $e->language_packs ); 103 | } 104 | ); 105 | 106 | foreach ( $repos as $repo ) { 107 | if ( ! str_contains( current_filter(), $repo->type ) ) { 108 | continue; 109 | } 110 | foreach ( $locales as $locale ) { 111 | $lang_pack_mod = isset( $repo->language_packs->$locale ) 112 | ? strtotime( $repo->language_packs->$locale->updated ) 113 | : 0; 114 | $translation_mod = isset( $translations[ $repo->slug ][ $locale ] ) 115 | ? strtotime( $translations[ $repo->slug ][ $locale ]['PO-Revision-Date'] ) 116 | : 0; 117 | if ( $lang_pack_mod > $translation_mod ) { 118 | $transient->translations[] = (array) $repo->language_packs->$locale; 119 | } 120 | } 121 | } 122 | 123 | $transient->translations = array_unique( $transient->translations, SORT_REGULAR ); 124 | 125 | return $transient; 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/assets/css/admin/optout.css: -------------------------------------------------------------------------------- 1 | .fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none!important}.fs-tooltip-trigger .fs-tooltip{background:rgba(0,0,0,.8);border-radius:5px;bottom:100%;box-shadow:1px 1px 1px rgba(0,0,0,.2);color:#fff!important;font-family:arial,serif;font-size:12px;font-weight:700;left:-17px;line-height:1.3em;margin-bottom:5px;opacity:0;padding:10px;position:absolute;right:0;text-align:left;text-transform:none!important;transition:opacity .3s ease-in-out;visibility:hidden;z-index:999999}.rtl .fs-tooltip-trigger .fs-tooltip{left:auto;right:-17px;text-align:right}.fs-tooltip-trigger .fs-tooltip:after{border-color:rgba(0,0,0,.8) transparent transparent;border-style:solid;border-width:5px 5px 0;content:" ";display:block;height:0;left:21px;position:absolute;top:100%;width:0}.rtl .fs-tooltip-trigger .fs-tooltip:after{left:auto;right:21px}.fs-tooltip-trigger:hover .fs-tooltip{opacity:1;visibility:visible}.fs-permissions .fs-permission.fs-disabled,.fs-permissions .fs-permission.fs-disabled .fs-permission-description span{color:#aaa}.fs-permissions .fs-permission .fs-switch-feedback{position:absolute;right:15px;top:52px}.fs-permissions ul{height:0;margin:0;overflow:hidden}.fs-permissions ul li{margin:0;padding:17px 15px;position:relative}.fs-permissions ul li>i.dashicons{float:left;font-size:30px;height:30px;padding:5px;width:30px}.fs-permissions ul li .fs-switch{float:right}.fs-permissions ul li .fs-permission-description{margin-left:55px}.fs-permissions ul li .fs-permission-description span{color:#23282d;font-size:14px;font-weight:500}.fs-permissions ul li .fs-permission-description .fs-tooltip{font-size:13px;font-weight:700}.fs-permissions ul li .fs-permission-description .fs-tooltip-trigger .dashicons{margin:-1px 2px 0}.fs-permissions ul li .fs-permission-description p{margin:2px 0 0}.fs-permissions.fs-open{background:#fff}.fs-permissions.fs-open ul{height:auto;margin:20px 0 10px;overflow:initial}.fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-right:10px}.fs-permissions .fs-switch-feedback.success{color:#71ae00}.rtl .fs-permissions .fs-switch-feedback{left:15px;right:auto}.rtl .fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-left:10px;margin-right:0}.rtl .fs-permissions ul li .fs-permission-description{margin-left:0;margin-right:55px}.rtl .fs-permissions ul li .fs-switch{float:left}.rtl .fs-permissions ul li i.dashicons{float:right}.fs-modal-opt-out .fs-modal-footer .fs-opt-out-button{line-height:30px;margin-right:10px}.fs-modal-opt-out .fs-permissions{margin-top:0!important}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-group-opt-out-button{float:right;line-height:1.1em}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-switch-feedback{float:right;line-height:1.1em;margin-right:10px}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-switch-feedback .fs-ajax-spinner{margin:-2px 0 0}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header-title{display:block;font-size:1.1em;font-weight:600;line-height:1.1em;margin:.5em 0;text-transform:uppercase}.fs-modal-opt-out .fs-permissions .fs-permissions-section--desc{margin-top:0}.fs-modal-opt-out .fs-permissions hr{border:0;border-top:1px solid #eee;margin:25px 0 20px}.fs-modal-opt-out .fs-permissions ul{border:1px solid #c3c4c7;border-radius:3px;box-shadow:0 1px 1px rgba(0,0,0,.04);margin:10px 0 0}.fs-modal-opt-out .fs-permissions ul li{border-bottom:1px solid #d7dde1;border-left:4px solid #72aee6}.rtl .fs-modal-opt-out .fs-permissions ul li{border-left:none;border-right:4px solid #72aee6}.fs-modal-opt-out .fs-permissions ul li.fs-disabled{border-left-color:rgba(114,174,230,0)}.fs-modal-opt-out .fs-permissions ul li:last-child{border-bottom:none} -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-plan.php: -------------------------------------------------------------------------------- 1 | name = strtolower( $plan->name ); 115 | } 116 | } 117 | 118 | static function get_type() { 119 | return 'plan'; 120 | } 121 | 122 | /** 123 | * @author Vova Feldman (@svovaf) 124 | * @since 1.0.9 125 | * 126 | * @return bool 127 | */ 128 | function is_free() { 129 | return ( 'free' === $this->name ); 130 | } 131 | 132 | /** 133 | * Checks if this plan supports "Technical Support". 134 | * 135 | * @author Leo Fajardo (leorw) 136 | * @since 1.2.0 137 | * 138 | * @return bool 139 | */ 140 | function has_technical_support() { 141 | return ( ! empty( $this->support_email ) || 142 | ! empty( $this->support_phone ) || 143 | ! empty( $this->is_success_manager ) 144 | ); 145 | } 146 | 147 | /** 148 | * @author Vova Feldman (@svovaf) 149 | * @since 1.0.9 150 | * 151 | * @return bool 152 | */ 153 | function has_trial() { 154 | return ! $this->is_free() && 155 | is_numeric( $this->trial_period ) && ( $this->trial_period > 0 ); 156 | } 157 | } -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/require.php: -------------------------------------------------------------------------------- 1 | monthly_price ) && $this->monthly_price > 0 ); 66 | } 67 | 68 | /** 69 | * @author Vova Feldman (@svovaf) 70 | * @since 1.1.8 71 | * 72 | * @return bool 73 | */ 74 | function has_annual() { 75 | return ( is_numeric( $this->annual_price ) && $this->annual_price > 0 ); 76 | } 77 | 78 | /** 79 | * @author Vova Feldman (@svovaf) 80 | * @since 1.1.8 81 | * 82 | * @return bool 83 | */ 84 | function has_lifetime() { 85 | return ( is_numeric( $this->lifetime_price ) && $this->lifetime_price > 0 ); 86 | } 87 | 88 | /** 89 | * Check if unlimited licenses pricing. 90 | * 91 | * @author Vova Feldman (@svovaf) 92 | * @since 1.1.8 93 | * 94 | * @return bool 95 | */ 96 | function is_unlimited() { 97 | return is_null( $this->licenses ); 98 | } 99 | 100 | 101 | /** 102 | * Check if pricing has more than one billing cycle. 103 | * 104 | * @author Vova Feldman (@svovaf) 105 | * @since 1.1.8 106 | * 107 | * @return bool 108 | */ 109 | function is_multi_cycle() { 110 | $cycles = 0; 111 | if ( $this->has_monthly() ) { 112 | $cycles ++; 113 | } 114 | if ( $this->has_annual() ) { 115 | $cycles ++; 116 | } 117 | if ( $this->has_lifetime() ) { 118 | $cycles ++; 119 | } 120 | 121 | return $cycles > 1; 122 | } 123 | 124 | /** 125 | * Get annual over monthly discount. 126 | * 127 | * @author Vova Feldman (@svovaf) 128 | * @since 1.1.8 129 | * 130 | * @return int 131 | */ 132 | function annual_discount_percentage() { 133 | return floor( $this->annual_savings() / ( $this->monthly_price * 12 * ( $this->is_unlimited() ? 1 : $this->licenses ) ) * 100 ); 134 | } 135 | 136 | /** 137 | * Get annual over monthly savings. 138 | * 139 | * @author Vova Feldman (@svovaf) 140 | * @since 1.1.8 141 | * 142 | * @return float 143 | */ 144 | function annual_savings() { 145 | return ( $this->monthly_price * 12 - $this->annual_price ) * ( $this->is_unlimited() ? 1 : $this->licenses ); 146 | } 147 | 148 | /** 149 | * @author Leo Fajardo (@leorw) 150 | * @since 2.3.1 151 | * 152 | * @return bool 153 | */ 154 | function is_usd() { 155 | return ( 'usd' === $this->currency ); 156 | } 157 | } -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/includes/entities/class-fs-entity.php: -------------------------------------------------------------------------------- 1 | $def_value ) { 52 | $this->{$key} = isset( $entity->{$key} ) ? 53 | $entity->{$key} : 54 | $def_value; 55 | } 56 | } 57 | 58 | static function get_type() { 59 | return 'type'; 60 | } 61 | 62 | /** 63 | * @author Vova Feldman (@svovaf) 64 | * @since 1.0.6 65 | * 66 | * @param FS_Entity $entity1 67 | * @param FS_Entity $entity2 68 | * 69 | * @return bool 70 | */ 71 | static function equals( $entity1, $entity2 ) { 72 | if ( is_null( $entity1 ) && is_null( $entity2 ) ) { 73 | return true; 74 | } else if ( is_object( $entity1 ) && is_object( $entity2 ) ) { 75 | return ( $entity1->id == $entity2->id ); 76 | } else if ( is_object( $entity1 ) ) { 77 | return is_null( $entity1->id ); 78 | } else { 79 | return is_null( $entity2->id ); 80 | } 81 | } 82 | 83 | private $_is_updated = false; 84 | 85 | /** 86 | * Update object property. 87 | * 88 | * @author Vova Feldman (@svovaf) 89 | * @since 1.0.9 90 | * 91 | * @param string|array[string]mixed $key 92 | * @param string|bool $val 93 | * 94 | * @return bool 95 | */ 96 | function update( $key, $val = false ) { 97 | if ( ! is_array( $key ) ) { 98 | $key = array( $key => $val ); 99 | } 100 | 101 | $is_updated = false; 102 | 103 | foreach ( $key as $k => $v ) { 104 | if ( $this->{$k} === $v ) { 105 | continue; 106 | } 107 | 108 | if ( ( is_string( $this->{$k} ) && is_numeric( $v ) || 109 | ( is_numeric( $this->{$k} ) && is_string( $v ) ) ) && 110 | $this->{$k} == $v 111 | ) { 112 | continue; 113 | } 114 | 115 | // Update value. 116 | $this->{$k} = $v; 117 | 118 | $is_updated = true; 119 | } 120 | 121 | $this->_is_updated = $is_updated; 122 | 123 | return $is_updated; 124 | } 125 | 126 | /** 127 | * Checks if entity was updated. 128 | * 129 | * @author Vova Feldman (@svovaf) 130 | * @since 1.0.9 131 | * 132 | * @return bool 133 | */ 134 | function is_updated() { 135 | return $this->_is_updated; 136 | } 137 | 138 | /** 139 | * @param $id 140 | * 141 | * @author Vova Feldman (@svovaf) 142 | * @since 1.1.2 143 | * 144 | * @return bool 145 | */ 146 | static function is_valid_id($id){ 147 | return is_numeric($id); 148 | } 149 | 150 | /** 151 | * @author Leo Fajardo (@leorw) 152 | * @since 2.3.1 153 | * 154 | * @return string 155 | */ 156 | public static function get_class_name() { 157 | return get_called_class(); 158 | } 159 | } -------------------------------------------------------------------------------- /js/gu-install-vanilla.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Vanilla Javascript to show and hide the API specific settings 3 | * for the remote install feature. 4 | * 5 | * @class Fragen\GitHub_Updater\Install 6 | * @since 8.5.0 7 | * @access public 8 | * @package git-updater 9 | */ 10 | 11 | (function () { 12 | 13 | // polyfill for NodeList.forEach browsers that supports ES5. 14 | if (window.NodeList && ! NodeList.prototype.forEach) { 15 | NodeList.prototype.forEach = function (callback, thisArg) { 16 | thisArg = thisArg || window; 17 | var length = this.length; 18 | for (var i = 0; i < length; i++) { 19 | callback.call( thisArg, this[i], i, this ); 20 | } 21 | }; 22 | } 23 | 24 | // polyfill for Element.matches and Element.closest in IE. 25 | if ( ! Element.prototype.matches) { 26 | Element.prototype.matches = Element.prototype.msMatchesSelector || 27 | Element.prototype.webkitMatchesSelector; 28 | } 29 | if ( ! Element.prototype.closest) { 30 | Element.prototype.closest = function(s) { 31 | var el = this; 32 | if ( ! document.documentElement.contains( el )) { 33 | return null; 34 | } 35 | do { 36 | if (el.matches( s )) { 37 | return el; 38 | } 39 | el = el.parentElement || el.parentNode; 40 | } while (el !== null && el.nodeType == 1); 41 | return null; 42 | }; 43 | } 44 | 45 | // Hide non-default (Bitbucket & GitLab) settings on page load. 46 | let nonDefault = ['bitbucket', 'gitlab', 'gitea', 'zipfile', 'gist']; 47 | 48 | nonDefault.forEach( 49 | function (item) { 50 | let parents = getParents( item, 'tr' ); 51 | displayNone( parents ); 52 | } 53 | ); 54 | 55 | // When the api selector changes. 56 | let selects = document.querySelector( 'select[ name="git_updater_api" ]' ); 57 | 58 | // Only run when on proper tab. 59 | if (selects !== null) { 60 | selects.addEventListener( 61 | 'change', 62 | function () { 63 | let defaults = ['github', 'bitbucket', 'gitlab', 'gitea', 'zipfile', 'gist']; 64 | 65 | // Create difference array. 66 | let hideMe = remove( defaults, this.value ); 67 | 68 | // Hide items with unselected api's classes. 69 | hideMe.forEach( 70 | function (item) { 71 | let parents = getParents( item, 'tr' ); 72 | displayNone( parents ); 73 | } 74 | ); 75 | 76 | // Show selected setting. 77 | [this.value].forEach( 78 | function (item) { 79 | let parents = getParents( item, 'tr' ); 80 | display( parents ); 81 | } 82 | ); 83 | 84 | console.log( 'selected', this.value ); 85 | console.log( 'hideMe', hideMe ); 86 | } 87 | ); 88 | } 89 | 90 | // Remove selected element from array and return array. 91 | function remove(array, element) { 92 | const index = array.indexOf( element ); 93 | if (index !== -1) { 94 | array.splice( index, 1 ); 95 | } 96 | return array; 97 | } 98 | 99 | // Hide element. 100 | function displayNone(array) { 101 | array.forEach( 102 | function (item) { 103 | item.style.display = 'none'; 104 | } 105 | ); 106 | } 107 | 108 | // Display element. 109 | function display(array) { 110 | array.forEach( 111 | function (item) { 112 | item.style.display = ''; 113 | } 114 | ); 115 | } 116 | 117 | // Return query and selector for `$(query).parents.(selector)`. 118 | function getParents(item, selector) { 119 | return vanillaParents( document.querySelectorAll( 'input.'.concat( item, '_setting' ) ), selector ); 120 | } 121 | 122 | // Vanilla JS version of jQuery `$(query).parents(selector)`. 123 | function vanillaParents(element, selector) { 124 | let parents = []; 125 | if (NodeList.prototype.isPrototypeOf( element )) { 126 | element.forEach( 127 | function (item) { 128 | element = item.parentElement.closest( selector ); 129 | parents.push( element ); 130 | } 131 | ); 132 | } else { 133 | element = item.parentElement.closest( selector ); 134 | parents.push( element ); 135 | } 136 | return parents; 137 | } 138 | 139 | })(); 140 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/clone-resolution-js.php: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /vendor/freemius/wordpress-sdk/templates/contact.php: -------------------------------------------------------------------------------- 1 | get_slug(); 58 | 59 | $query_params = FS_Contact_Form_Manager::instance()->get_query_params( $fs ); 60 | 61 | $view_params = array( 62 | 'id' => $VARS['id'], 63 | 'page' => strtolower( $fs->get_text_inline( 'Contact', 'contact' ) ), 64 | ); 65 | fs_require_once_template('secure-https-header.php', $view_params); 66 | 67 | $has_tabs = $fs->_add_tabs_before_content(); 68 | 69 | if ( $has_tabs ) { 70 | $query_params['tabs'] = 'true'; 71 | } 72 | ?> 73 |
    74 |
    75 | 100 |
    101 | _add_tabs_after_content(); 104 | } 105 | --------------------------------------------------------------------------------