Changeset 3430186
- Timestamp:
- 12/31/2025 03:47:14 PM (3 months ago)
- Location:
- surflink
- Files:
-
- 301 added
- 8 edited
-
tags/2.3.1 (added)
-
tags/2.3.1/assets (added)
-
tags/2.3.1/assets/css (added)
-
tags/2.3.1/assets/css/surfl-loginhider.css (added)
-
tags/2.3.1/assets/css/surfl.css (added)
-
tags/2.3.1/assets/fast-forward.php (added)
-
tags/2.3.1/assets/icon_logo_sm_20.png (added)
-
tags/2.3.1/assets/import_410_sample.csv (added)
-
tags/2.3.1/assets/import_redirect_sample.csv (added)
-
tags/2.3.1/assets/js (added)
-
tags/2.3.1/assets/js/redirects.js (added)
-
tags/2.3.1/assets/js/setting-scripts.js (added)
-
tags/2.3.1/assets/js/surfl-loginhider.js (added)
-
tags/2.3.1/assets/js/surfl.js (added)
-
tags/2.3.1/assets/surflink_white.png (added)
-
tags/2.3.1/includes (added)
-
tags/2.3.1/includes/class-filesystem-helper.php (added)
-
tags/2.3.1/includes/class-log-cleaner.php (added)
-
tags/2.3.1/includes/class-surfl-404.php (added)
-
tags/2.3.1/includes/class-surfl-410.php (added)
-
tags/2.3.1/includes/class-surfl-backup-cleanup.php (added)
-
tags/2.3.1/includes/class-surfl-backup-db.php (added)
-
tags/2.3.1/includes/class-surfl-backup-helper.php (added)
-
tags/2.3.1/includes/class-surfl-backup-settings.php (added)
-
tags/2.3.1/includes/class-surfl-br-loader.php (added)
-
tags/2.3.1/includes/class-surfl-fast-sr.php (added)
-
tags/2.3.1/includes/class-surfl-loader.php (added)
-
tags/2.3.1/includes/class-surfl-loginhider.php (added)
-
tags/2.3.1/includes/class-surfl-module-manager.php (added)
-
tags/2.3.1/includes/class-surfl-plugin-activation.php (added)
-
tags/2.3.1/includes/class-surfl-redirect.php (added)
-
tags/2.3.1/includes/class-surfl-restore-db.php (added)
-
tags/2.3.1/includes/class-surfl-restore-files.php (added)
-
tags/2.3.1/includes/uninstall.php (added)
-
tags/2.3.1/index.php (added)
-
tags/2.3.1/readme.txt (added)
-
tags/2.3.1/surf-link.php (added)
-
tags/2.3.1/templates (added)
-
tags/2.3.1/templates/question-tooltip.php (added)
-
tags/2.3.1/templates/surfl-404.php (added)
-
tags/2.3.1/templates/surfl-410-list.php (added)
-
tags/2.3.1/templates/surfl-410.php (added)
-
tags/2.3.1/templates/surfl-autolink-options.php (added)
-
tags/2.3.1/templates/surfl-backup-modals.php (added)
-
tags/2.3.1/templates/surfl-backup-options.php (added)
-
tags/2.3.1/templates/surfl-backup-table.php (added)
-
tags/2.3.1/templates/surfl-backup-warnings.php (added)
-
tags/2.3.1/templates/surfl-backup.php (added)
-
tags/2.3.1/templates/surfl-footer.php (added)
-
tags/2.3.1/templates/surfl-hard-unlink-report.php (added)
-
tags/2.3.1/templates/surfl-hard-unlink.php (added)
-
tags/2.3.1/templates/surfl-hardlink-history.php (added)
-
tags/2.3.1/templates/surfl-hardlink-report.php (added)
-
tags/2.3.1/templates/surfl-hardlink.php (added)
-
tags/2.3.1/templates/surfl-loginhider-failed-attempts.php (added)
-
tags/2.3.1/templates/surfl-loginhider-setting.php (added)
-
tags/2.3.1/templates/surfl-primary-nav.php (added)
-
tags/2.3.1/templates/surfl-pro-ad.php (added)
-
tags/2.3.1/templates/surfl-redirect-html.php (added)
-
tags/2.3.1/templates/surfl-redirect-list-html.php (added)
-
tags/2.3.1/templates/surfl-redirection-rules.php (added)
-
tags/2.3.1/templates/surfl-restore-backup-html.php (added)
-
tags/2.3.1/templates/surfl-restore-status.php (added)
-
tags/2.3.1/templates/surfl-restore-upload-status.php (added)
-
tags/2.3.1/templates/surfl-rules-info-modal.php (added)
-
tags/2.3.1/templates/surfl-saved-autolinks.php (added)
-
tags/2.3.1/templates/surfl-shortlink-form-html.php (added)
-
tags/2.3.1/templates/surfl-shortlink-list-html.php (added)
-
tags/2.3.1/templates/surfl-shortlink-options.php (added)
-
tags/2.3.1/templates/surfl-softlink.php (added)
-
tags/2.3.1/templates/surfl-sr-html.php (added)
-
tags/2.3.1/templates/surfl-sr-report.php (added)
-
tags/2.3.1/templates/surfl-srh.php (added)
-
tags/2.3.1/templates/surfl-text-tooltip.php (added)
-
tags/2.3.1/templates/surfl-url-replace-html.php (added)
-
tags/2.3.1/vendor (added)
-
tags/2.3.1/vendor/freemius (added)
-
tags/2.3.1/vendor/freemius/LICENSE.txt (added)
-
tags/2.3.1/vendor/freemius/assets (added)
-
tags/2.3.1/vendor/freemius/assets/css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/account.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/add-ons.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/affiliation.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/checkout.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/clone-resolution.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/common.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/connect.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/debug.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/dialog-boxes.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/gdpr-optin-notice.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/index.php (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/optout.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/admin/plugins.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/customizer.css (added)
-
tags/2.3.1/vendor/freemius/assets/css/index.php (added)
-
tags/2.3.1/vendor/freemius/assets/img (added)
-
tags/2.3.1/vendor/freemius/assets/img/index.php (added)
-
tags/2.3.1/vendor/freemius/assets/img/plugin-icon.png (added)
-
tags/2.3.1/vendor/freemius/assets/img/slt-surflink.png (added)
-
tags/2.3.1/vendor/freemius/assets/img/surf-link.png (added)
-
tags/2.3.1/vendor/freemius/assets/img/surflink.png (added)
-
tags/2.3.1/vendor/freemius/assets/img/theme-icon.png (added)
-
tags/2.3.1/vendor/freemius/assets/index.php (added)
-
tags/2.3.1/vendor/freemius/assets/js (added)
-
tags/2.3.1/vendor/freemius/assets/js/index.php (added)
-
tags/2.3.1/vendor/freemius/assets/js/jquery.form.js (added)
-
tags/2.3.1/vendor/freemius/assets/js/nojquery.ba-postmessage.js (added)
-
tags/2.3.1/vendor/freemius/assets/js/postmessage.js (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/14fb1bd5b7c41648488b06147f50a0dc.svg (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/178afa6030e76635dbe835e111d2c507.png (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/27b5a722a5553d9de0170325267fccec.png (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/45da596e2b512ffc3bb638baaf0fdc4e.png (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/a34e046aee1702a5690679750a7f4d0f.svg (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/b09d0b38b627c2fa564d050f79f2f064.svg (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/c03f665db27af43971565560adfba594.png (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/d65812c447b4523b42d59018e1c0bb53.png (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/f3aac72a8e63997d6bb888f816457e9b.png (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/fde48e4609a6ddc11d639fc2421f2afd.png (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/freemius-pricing.js (added)
-
tags/2.3.1/vendor/freemius/assets/js/pricing/freemius-pricing.js.LICENSE.txt (added)
-
tags/2.3.1/vendor/freemius/config.php (added)
-
tags/2.3.1/vendor/freemius/includes (added)
-
tags/2.3.1/vendor/freemius/includes/class-freemius-abstract.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-freemius.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-admin-notices.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-api.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-garbage-collector.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-hook-snapshot.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-lock.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-logger.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-options.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-plugin-updater.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-security.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-storage.php (added)
-
tags/2.3.1/vendor/freemius/includes/class-fs-user-lock.php (added)
-
tags/2.3.1/vendor/freemius/includes/customizer (added)
-
tags/2.3.1/vendor/freemius/includes/customizer/class-fs-customizer-support-section.php (added)
-
tags/2.3.1/vendor/freemius/includes/customizer/class-fs-customizer-upsell-control.php (added)
-
tags/2.3.1/vendor/freemius/includes/customizer/index.php (added)
-
tags/2.3.1/vendor/freemius/includes/debug (added)
-
tags/2.3.1/vendor/freemius/includes/debug/class-fs-debug-bar-panel.php (added)
-
tags/2.3.1/vendor/freemius/includes/debug/debug-bar-start.php (added)
-
tags/2.3.1/vendor/freemius/includes/debug/index.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-affiliate-terms.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-affiliate.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-billing.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-entity.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-payment.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-plugin-info.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-plugin-license.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-plugin-plan.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-plugin-tag.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-plugin.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-pricing.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-scope-entity.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-site.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-subscription.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/class-fs-user.php (added)
-
tags/2.3.1/vendor/freemius/includes/entities/index.php (added)
-
tags/2.3.1/vendor/freemius/includes/fs-core-functions.php (added)
-
tags/2.3.1/vendor/freemius/includes/fs-essential-functions.php (added)
-
tags/2.3.1/vendor/freemius/includes/fs-html-escaping-functions.php (added)
-
tags/2.3.1/vendor/freemius/includes/fs-plugin-info-dialog.php (added)
-
tags/2.3.1/vendor/freemius/includes/index.php (added)
-
tags/2.3.1/vendor/freemius/includes/l10n.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-admin-notice-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-cache-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-checkout-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-clone-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-contact-form-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-debug-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-gdpr-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-key-value-storage.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-license-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-option-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-permission-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-plan-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/class-fs-plugin-manager.php (added)
-
tags/2.3.1/vendor/freemius/includes/managers/index.php (added)
-
tags/2.3.1/vendor/freemius/includes/sdk (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/Exceptions (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/Exceptions/ArgumentNotExistException.php (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/Exceptions/EmptyArgumentException.php (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/Exceptions/Exception.php (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/Exceptions/InvalidArgumentException.php (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/Exceptions/OAuthException.php (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/Exceptions/index.php (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/FreemiusBase.php (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/FreemiusWordPress.php (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/LICENSE.txt (added)
-
tags/2.3.1/vendor/freemius/includes/sdk/index.php (added)
-
tags/2.3.1/vendor/freemius/includes/supplements (added)
-
tags/2.3.1/vendor/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php (added)
-
tags/2.3.1/vendor/freemius/includes/supplements/fs-essential-functions-2.2.1.php (added)
-
tags/2.3.1/vendor/freemius/includes/supplements/fs-migration-2.5.1.php (added)
-
tags/2.3.1/vendor/freemius/includes/supplements/index.php (added)
-
tags/2.3.1/vendor/freemius/index.php (added)
-
tags/2.3.1/vendor/freemius/languages (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-cs_CZ.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-da_DK.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-de_DE.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-es_ES.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-fr_FR.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-he_IL.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-hu_HU.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-it_IT.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-ja.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-nl_NL.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-ru_RU.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-ta.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius-zh_CN.mo (added)
-
tags/2.3.1/vendor/freemius/languages/freemius.pot (added)
-
tags/2.3.1/vendor/freemius/languages/index.php (added)
-
tags/2.3.1/vendor/freemius/require.php (added)
-
tags/2.3.1/vendor/freemius/start.php (added)
-
tags/2.3.1/vendor/freemius/templates (added)
-
tags/2.3.1/vendor/freemius/templates/account (added)
-
tags/2.3.1/vendor/freemius/templates/account.php (added)
-
tags/2.3.1/vendor/freemius/templates/account/billing.php (added)
-
tags/2.3.1/vendor/freemius/templates/account/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/account/partials (added)
-
tags/2.3.1/vendor/freemius/templates/account/partials/activate-license-button.php (added)
-
tags/2.3.1/vendor/freemius/templates/account/partials/addon.php (added)
-
tags/2.3.1/vendor/freemius/templates/account/partials/deactivate-license-button.php (added)
-
tags/2.3.1/vendor/freemius/templates/account/partials/disconnect-button.php (added)
-
tags/2.3.1/vendor/freemius/templates/account/partials/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/account/partials/site.php (added)
-
tags/2.3.1/vendor/freemius/templates/account/payments.php (added)
-
tags/2.3.1/vendor/freemius/templates/add-ons.php (added)
-
tags/2.3.1/vendor/freemius/templates/add-trial-to-pricing.php (added)
-
tags/2.3.1/vendor/freemius/templates/admin-notice.php (added)
-
tags/2.3.1/vendor/freemius/templates/ajax-loader.php (added)
-
tags/2.3.1/vendor/freemius/templates/api-connectivity-message-js.php (added)
-
tags/2.3.1/vendor/freemius/templates/auto-installation.php (added)
-
tags/2.3.1/vendor/freemius/templates/checkout (added)
-
tags/2.3.1/vendor/freemius/templates/checkout.php (added)
-
tags/2.3.1/vendor/freemius/templates/checkout/frame.php (added)
-
tags/2.3.1/vendor/freemius/templates/checkout/process-redirect.php (added)
-
tags/2.3.1/vendor/freemius/templates/checkout/redirect.php (added)
-
tags/2.3.1/vendor/freemius/templates/clone-resolution-js.php (added)
-
tags/2.3.1/vendor/freemius/templates/connect (added)
-
tags/2.3.1/vendor/freemius/templates/connect.php (added)
-
tags/2.3.1/vendor/freemius/templates/connect/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/connect/permission.php (added)
-
tags/2.3.1/vendor/freemius/templates/connect/permissions-group.php (added)
-
tags/2.3.1/vendor/freemius/templates/contact.php (added)
-
tags/2.3.1/vendor/freemius/templates/debug (added)
-
tags/2.3.1/vendor/freemius/templates/debug.php (added)
-
tags/2.3.1/vendor/freemius/templates/debug/api-calls.php (added)
-
tags/2.3.1/vendor/freemius/templates/debug/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/debug/logger.php (added)
-
tags/2.3.1/vendor/freemius/templates/debug/plugins-themes-sync.php (added)
-
tags/2.3.1/vendor/freemius/templates/debug/scheduled-crons.php (added)
-
tags/2.3.1/vendor/freemius/templates/email.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms (added)
-
tags/2.3.1/vendor/freemius/templates/forms/affiliation.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/data-debug-mode.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/deactivation (added)
-
tags/2.3.1/vendor/freemius/templates/forms/deactivation/contact.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/deactivation/form.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/deactivation/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/deactivation/retry-skip.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/email-address-update.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/license-activation.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/optout.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/premium-versions-upgrade-handler.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/premium-versions-upgrade-metadata.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/resend-key.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/subscription-cancellation.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/trial-start.php (added)
-
tags/2.3.1/vendor/freemius/templates/forms/user-change.php (added)
-
tags/2.3.1/vendor/freemius/templates/gdpr-optin-js.php (added)
-
tags/2.3.1/vendor/freemius/templates/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/js (added)
-
tags/2.3.1/vendor/freemius/templates/js/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/js/jquery.content-change.php (added)
-
tags/2.3.1/vendor/freemius/templates/js/open-license-activation.php (added)
-
tags/2.3.1/vendor/freemius/templates/js/permissions.php (added)
-
tags/2.3.1/vendor/freemius/templates/js/style-premium-theme.php (added)
-
tags/2.3.1/vendor/freemius/templates/partials (added)
-
tags/2.3.1/vendor/freemius/templates/partials/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/partials/network-activation.php (added)
-
tags/2.3.1/vendor/freemius/templates/plugin-icon.php (added)
-
tags/2.3.1/vendor/freemius/templates/plugin-info (added)
-
tags/2.3.1/vendor/freemius/templates/plugin-info/description.php (added)
-
tags/2.3.1/vendor/freemius/templates/plugin-info/features.php (added)
-
tags/2.3.1/vendor/freemius/templates/plugin-info/index.php (added)
-
tags/2.3.1/vendor/freemius/templates/plugin-info/screenshots.php (added)
-
tags/2.3.1/vendor/freemius/templates/pricing.php (added)
-
tags/2.3.1/vendor/freemius/templates/secure-https-header.php (added)
-
tags/2.3.1/vendor/freemius/templates/sticky-admin-notice-js.php (added)
-
tags/2.3.1/vendor/freemius/templates/tabs-capture-js.php (added)
-
tags/2.3.1/vendor/freemius/templates/tabs.php (added)
-
trunk/assets/js/redirects.js (modified) (25 diffs)
-
trunk/assets/js/surfl.js (modified) (1 diff)
-
trunk/includes/class-surfl-404.php (modified) (2 diffs)
-
trunk/includes/class-surfl-410.php (modified) (14 diffs)
-
trunk/includes/class-surfl-loader.php (modified) (1 diff)
-
trunk/includes/class-surfl-redirect.php (modified) (10 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/surf-link.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
surflink/trunk/assets/js/redirects.js
r3428366 r3430186 132 132 */ 133 133 134 function ob_redirect_list(res) { 135 const redirect_html = res.data.redirect_html || false; 136 137 if (redirect_html) { 138 $("#surfl-redirect-content").html(redirect_html); 139 } 140 } 141 134 142 // "Select all" checkbox to toggle all bulk checkboxes 135 143 $(document).on("change", "#surfl-redirect-bulk-select-all", function () { … … 186 194 return; 187 195 } 188 const btn = $(this); 189 const btnText = btn.text(); 190 191 changeBtnState(btn); 196 197 let btn; 198 let btnText; 199 if (action !== "empty_redirects") { 200 btn = $(this); 201 btnText = btn.text(); 202 changeBtnState(btn); 203 } 204 192 205 showCustomConfirm( 193 206 "Are you sure you want to delete the selected redirects?", … … 215 228 "#surfl-redirects-table-notification" 216 229 ); 217 setTimeout(() => location.reload(), 1500);230 ob_redirect_list(response); 218 231 } else { 219 232 showNotification( … … 266 279 function (confirmed) { 267 280 if (confirmed) { 268 var nonce = $("#surfl-redirect-bulk-action-apply").data("nonce");281 269 282 $.post(SURFL_AJAX_REDIRECTS.ajaxurl, { 270 283 action: "surfl_empty_redirects", 271 284 security: SURFL_AJAX_REDIRECTS.nonce, 272 285 }).done(function (response) { 273 changeBtnState(btn, btnText);274 286 if (response.success) { 275 location.reload(); // Reload the page to reflect changes287 ob_redirect_list(response); 276 288 } else { 277 289 showNotification( … … 337 349 "#surfl-redirect-form-notice" 338 350 ); 339 location.reload();351 ob_redirect_list(response); 340 352 } else { 341 353 showNotification( … … 407 419 ); 408 420 409 location.reload();421 ob_redirect_list(response); 410 422 } else { 411 423 showNotification( … … 520 532 "#surfl-edit-redirect-modal-message" 521 533 ); 522 location.reload(); // or dynamically update the table if you prefer 534 changeBtnState(btn, btnText); 535 ob_redirect_list(response); 523 536 }, 524 537 error: function () { … … 555 568 "#surfl-edit-redirect-modal-message" 556 569 ); 557 if (response.success) {558 location.reload();559 }560 570 changeBtnState(btn, btnText); 571 ob_redirect_list(response); 561 572 }); 562 573 } … … 593 604 } 594 605 }); 595 setTimeout(() => location.reload(), 1500);596 606 } else { 597 607 showNotification( … … 674 684 processData: false, 675 685 }).done(function (res) { 686 687 changeBtnState(btn, btnText); 676 688 if (res.success) { 689 690 691 ob_redirect_list(res); 677 692 showNotification( 678 693 "info", … … 680 695 "#surfl-imp-ex-notice" 681 696 ); 682 683 setTimeout(function () {684 location.reload();685 }, 1000);686 697 } else { 687 698 showNotification("error", res.data.message, "#surfl-imp-ex-notice"); 688 699 } 689 700 690 changeBtnState(btn, btnText);701 691 702 }); 692 703 }); … … 858 869 */ 859 870 jQuery(document).ready(function ($) { 871 872 873 874 function ob_gone_list(res) { 875 const gone_html = res.data.gone_html || false; 876 877 if (gone_html) { 878 $("#surfl-gone-content").html(gone_html); 879 } 880 } 860 881 //handle single 410 882 883 884 861 885 862 886 $(document).on("submit", "#surfl-410-form", function (e) { … … 879 903 }, 880 904 success: function (response) { 905 906 changeBtnState(btn, btnText); 881 907 if (response.success) { 908 882 909 showNotification( 883 910 "success", … … 885 912 "#surfl-410-response-msg" 886 913 ); 887 location.reload();914 ob_gone_list(response); 888 915 } else { 889 916 showNotification( … … 893 920 ); 894 921 } 895 changeBtnState(btn, btnText);922 896 923 }, 897 924 error: function (xhr, status, error) { … … 959 986 } 960 987 961 const btn = $(this); 962 const btnText = btn.text(); 963 964 changeBtnState(btn); 988 let btn ; 989 let btnText ; 990 991 if (action != "surfl_empty_410") 992 { 993 btn = $(this); 994 btnText = btn.text(); 995 changeBtnState(btn); 996 } 997 998 999 965 1000 showCustomConfirm( 966 1001 "Are you sure you want to delete the selected 410s? This action cannot be undone.", … … 990 1025 ); 991 1026 992 setTimeout(() => location.reload(), 1500);1027 setTimeout(() => ob_gone_list(response), 1500); 993 1028 } else { 994 1029 showNotification( … … 1012 1047 _wpnonce: nonce, 1013 1048 }).done(function (response) { 1014 changeBtnState(btn, btnText);1049 1015 1050 if (response.success) { 1016 location.reload(); // Reload the page to reflect changes1051 ob_gone_list(response); 1017 1052 } else { 1018 1053 showNotification( … … 1083 1118 processData: false, 1084 1119 }).done(function (res) { 1120 changeBtnState(btn, btnText); 1085 1121 if (res.success) { 1086 1122 showNotification( … … 1091 1127 1092 1128 setTimeout(function () { 1093 location.reload();1129 ob_gone_list(res); 1094 1130 }, 1000); 1095 1131 } else { … … 1097 1133 } 1098 1134 1099 changeBtnState(btn, btnText);1135 1100 1136 }); 1101 1137 }); … … 1169 1205 "#surfl-410-edit-msg" 1170 1206 ); 1171 location.reload(); // or dynamically update the table if you prefer 1207 changeBtnState(btn, btnText); 1208 ob_gone_list(response); 1172 1209 }, 1173 1210 error: function () { … … 1183 1220 $(document).on("click", "#surfl-delete-410-edit", function () { 1184 1221 showCustomConfirm( 1185 "Are you sure you want to delete this redirect?",1222 "Are you sure you want to delete this 410?", 1186 1223 function (confirmed) { 1187 1224 if (confirmed) { … … 1197 1234 "#surfl-410-edit-msg" 1198 1235 ); 1199 if (response.success) { 1200 location.reload(); 1201 } 1236 ob_gone_list(response); 1202 1237 }); 1203 1238 } … … 1233 1268 }); 1234 1269 1235 setTimeout(() => location.reload(), 1500);1270 setTimeout(() => ob_gone_list(response), 1500); 1236 1271 } 1237 1272 }); -
surflink/trunk/assets/js/surfl.js
r3429290 r3430186 325 325 } catch (error) { 326 326 console.error(error); 327 // alert("Error loading tab content. Please try again.");327 328 328 } 329 329 } -
surflink/trunk/includes/class-surfl-404.php
r3428732 r3430186 132 132 : ''; 133 133 } 134 135 public function create_match_path($source) 136 { 137 138 139 140 // 1. Remove Query Parameters (e.g. /path?foo=bar -> /path) 141 $path_part = strtok($source, '?'); 142 143 // 2. Trim BOTH slashes (e.g. /path/ -> path) 144 $path_part = trim($path_part, '/'); 145 146 // 3. Lowercase (Valid format for consistent matching) 147 $clean_path = strtolower($path_part); 148 149 150 return $clean_path; 151 } 134 152 public function ajax_bulk_make_410() 135 153 { … … 162 180 163 181 if (!$exists) { 182 183 $match_path = $this->create_match_path($normalized_url); 164 184 $inserted = $wpdb->insert($table_410, [ 165 185 'url' => $normalized_url, 186 'match_path' => $match_path, 166 187 'time' => current_time('mysql') 167 188 ]); -
surflink/trunk/includes/class-surfl-410.php
r3428732 r3430186 8 8 private $table_name; 9 9 10 const GONE_DB_VERSION = '1.0.1'; 11 12 const GONE_DB_VERSION_NAME = 'surfl_410_db_version'; 13 10 14 public function __construct() { 11 15 global $wpdb; 12 16 $this->table_name = $wpdb->prefix . 'surflink_410'; 13 $this->activate(); 17 $installed_ver = get_option( self::GONE_DB_VERSION_NAME, '1.0.0' ); 18 if ( version_compare( $installed_ver, self::GONE_DB_VERSION, '<' ) ) { 19 $this->activate(); 20 $this->migrate_data_for_optimization(); 21 // <--- CRITICAL STEP 22 update_option( self::GONE_DB_VERSION_NAME, self::GONE_DB_VERSION ); 23 } 14 24 // Front-end hook: before the 404 logger runs, check if URL must send a 410. 15 25 add_action( 'template_redirect', [$this, 'maybe_send_410'], 1 ); … … 29 39 global $wpdb; 30 40 $table_name = $this->table_name; 31 if ( $wpdb->get_var( "SHOW TABLES LIKE '{$table_name}'" ) != $table_name ) { 32 $charset_collate = $wpdb->get_charset_collate(); 33 $sql = "CREATE TABLE {$table_name} (\r\n id mediumint(9) NOT NULL AUTO_INCREMENT,\r\n url varchar(255) NOT NULL,\r\n time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,\r\n ignore_trailing_slash TINYINT(1) DEFAULT 1,\r\n ignore_case TINYINT(1) DEFAULT 1,\r\n ignore_params TINYINT(1) DEFAULT 1,\r\n is_regex TINYINT(1) DEFAULT 0,\r\n PRIMARY KEY (id)\r\n ) {$charset_collate};"; 34 require_once ABSPATH . 'wp-admin/includes/upgrade.php'; 35 dbDelta( $sql ); 36 } 41 $charset_collate = $wpdb->get_charset_collate(); 42 $sql = "CREATE TABLE {$table_name} (\r\n id mediumint(9) NOT NULL AUTO_INCREMENT,\r\n url TEXT NOT NULL,\r\n match_path VARCHAR(191) NOT NULL,\r\n time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,\r\n ignore_trailing_slash TINYINT(1) DEFAULT 1,\r\n ignore_case TINYINT(1) DEFAULT 1,\r\n ignore_params TINYINT(1) DEFAULT 1,\r\n is_regex TINYINT(1) DEFAULT 0,\r\n PRIMARY KEY (id),\r\n KEY match_path (match_path)\r\n ) {$charset_collate};"; 43 require_once ABSPATH . 'wp-admin/includes/upgrade.php'; 44 dbDelta( $sql ); 45 } 46 47 private function migrate_data_for_optimization() { 48 global $wpdb; 49 // Select ID, Source, and Type for ALL rows 50 // We process everything to ensure the column isn't NULL 51 $rows = $wpdb->get_results( "SELECT id, url FROM {$this->table_name}" ); 52 if ( empty( $rows ) ) { 53 return; 54 } 55 foreach ( $rows as $row ) { 56 $match_path = ''; 57 $match_path = $this->create_match_path( $row->url ); 58 // Update the database 59 $wpdb->update( 60 $this->table_name, 61 [ 62 'match_path' => $match_path, 63 ], 64 [ 65 'id' => $row->id, 66 ], 67 ['%s'], 68 ['%d'] 69 ); 70 } 71 } 72 73 public function create_match_path( $source ) { 74 // 1. Remove Query Parameters (e.g. /path?foo=bar -> /path) 75 $path_part = strtok( $source, '?' ); 76 // 2. Trim BOTH slashes (e.g. /path/ -> path) 77 $path_part = trim( $path_part, '/' ); 78 // 3. Lowercase (Valid format for consistent matching) 79 $clean_path = strtolower( $path_part ); 80 return $clean_path; 81 } 82 83 public function ob_gone_list() { 84 ob_start(); 85 $this->display_410_manager_page(); 86 return ob_get_clean(); 37 87 } 38 88 … … 44 94 global $wpdb; 45 95 $current_path = $this->normalize_path( $_SERVER['REQUEST_URI'] ); 46 $urls = $wpdb->get_results( "SELECT * FROM {$this->table_name}" ); 96 $match_path = $this->create_match_path( $current_path ); 97 $urls = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$this->table_name} WHERE match_path = %s", $match_path ) ); 47 98 foreach ( $urls as $url ) { 48 99 if ( $url->is_regex ) { … … 163 214 ] ); 164 215 } 216 $match_path = $this->create_match_path( $url ); 165 217 $inserted = $wpdb->insert( $table, [ 166 218 'url' => $url, … … 169 221 'ignore_params' => $ignore_params, 170 222 'is_regex' => $is_regex, 223 'match_path' => $match_path, 171 224 ] ); 172 225 if ( $inserted ) { 226 $gone_html = $this->ob_gone_list(); 173 227 wp_send_json_success( [ 174 'message' => 'Success !', 228 'gone_html' => $gone_html, 229 'message' => 'Success !', 175 230 ] ); 176 231 } else { … … 207 262 } 208 263 global $wpdb; 264 $match_path = $this->create_match_path( $url ); 209 265 $updated = $wpdb->update( $this->table_name, [ 210 266 'url' => $url, … … 213 269 'ignore_params' => $ignore_params, 214 270 'is_regex' => $is_regex, 271 'match_path' => $match_path, 215 272 ], [ 216 273 'id' => $id, … … 221 278 ] ); 222 279 } 280 $gone_html = $this->ob_gone_list(); 223 281 wp_send_json_success( [ 224 'message' => '410 updated successfully.', 282 'gone_html' => $gone_html, 283 'message' => '410 updated successfully.', 225 284 ] ); 226 285 } … … 326 385 ] ); 327 386 if ( $deleted ) { 387 $gone_html = $this->ob_gone_list(); 328 388 wp_send_json_success( [ 329 'message' => esc_html__( '410 deleted successfully', 'surflink' ), 389 'gone_html' => $gone_html, 390 'message' => esc_html__( '410 deleted successfully', 'surflink' ), 330 391 ] ); 331 392 } else { … … 372 433 ] ); 373 434 } else { 435 $gone_html = $this->ob_gone_list(); 374 436 wp_send_json_success( [ 375 'message' => sprintf( _n( 437 'gone_html' => $gone_html, 438 'message' => sprintf( _n( 376 439 '%d redirect deleted successfully', 377 440 '%d redirects deleted successfully', … … 397 460 $result = $wpdb->query( $query ); 398 461 if ( $result !== false ) { 462 $gone_html = $this->ob_gone_list(); 399 463 wp_send_json_success( [ 400 'message' => esc_html__( 'Success', 'surflink' ), 464 'gone_html' => $gone_html, 465 'message' => esc_html__( 'Success', 'surflink' ), 401 466 ] ); 402 467 } else { … … 458 523 } 459 524 $csv = file_get_contents( $_FILES['file']['tmp_name'] ); 460 $lines = array_map( 'str_getcsv', preg_split( '/\\r\\n|\\r|\\n/', $csv ) ); 525 $lines = array_map( function ( $line ) { 526 return str_getcsv( 527 $line, 528 ',', 529 '"', 530 '\\' 531 ); 532 }, preg_split( '/\\r\\n|\\r|\\n/', $csv ) ); 461 533 $lines = array_filter( $lines, function ( $line ) { 462 534 return is_array( $line ) && count( array_filter( $line ) ) > 0; … … 490 562 continue; 491 563 } 564 $match_path = $this->create_match_path( $url ); 492 565 $wpdb->insert( $this->table_name, [ 493 'url' => $url, 566 'url' => $url, 567 'match_path' => $match_path, 494 568 ] ); 495 569 if ( $wpdb->insert_id ) { … … 497 571 } 498 572 } 573 $gone_html = $this->ob_gone_list(); 499 574 wp_send_json_success( [ 575 'gone_html' => $gone_html, 500 576 'message' => esc_html__( 'Importing 410 completed', 'surflink' ), 501 577 'imported' => $inserted, -
surflink/trunk/includes/class-surfl-loader.php
r3429598 r3430186 401 401 require_once SURFL_PATH . 'templates/surfl-redirection-rules.php'; 402 402 } elseif ( $active_tab === 'surfl-red-li-tab' ) { 403 echo '<div id="surfl-redirect-content">'; 403 404 set_transient( $tab_transient, $active_tab, 5 * MINUTE_IN_SECONDS ); 404 405 $this->surfl_redirect->render_li_red_page(); 406 echo '</div>'; 405 407 } elseif ( $active_tab === 'surfl-red-410-tab' ) { 406 408 set_transient( $tab_transient, $active_tab, 5 * MINUTE_IN_SECONDS ); 407 409 $this->surfl_410->display_410_page(); 408 410 } elseif ( $active_tab === 'surfl-red-410-li-tab' ) { 411 echo '<div id="surfl-gone-content">'; 409 412 set_transient( $tab_transient, $active_tab, 5 * MINUTE_IN_SECONDS ); 410 413 $this->surfl_410->display_410_manager_page(); 414 echo '</div>'; 411 415 } elseif ( $active_tab === 'surfl-red-404l-tab' ) { 412 416 set_transient( $tab_transient, $active_tab, 5 * MINUTE_IN_SECONDS ); -
surflink/trunk/includes/class-surfl-redirect.php
r3429799 r3430186 235 235 ] ); 236 236 if ( $wpdb->insert_id ) { 237 $redirect_html = $this->ob_redirect_list(); 237 238 wp_send_json_success( [ 238 239 'id' => $wpdb->insert_id, … … 322 323 $message .= '<br>' . implode( '<br>', $errors ); 323 324 } 325 $redirect_html = $this->ob_redirect_list(); 324 326 wp_send_json_success( [ 325 'message' => $message, 327 'redirect_html' => $redirect_html, 328 'message' => $message, 326 329 ] ); 327 330 } else { … … 350 353 ] ); 351 354 if ( $deleted ) { 355 $redirect_html = $this->ob_redirect_list(); 352 356 wp_send_json_success( [ 353 'message' => esc_html__( 'Redirect deleted successfully', 'surflink' ), 357 'redirect_html' => $redirect_html, 358 'message' => esc_html__( 'Redirect deleted successfully', 'surflink' ), 354 359 ] ); 355 360 } else { … … 526 531 $result = $wpdb->query( $query ); 527 532 if ( $result !== false ) { 533 $redirect_html = $this->ob_redirect_list(); 528 534 wp_send_json_success( [ 529 'message' => esc_html__( 'Selected redirects deleted successfully', 'surflink' ), 535 'redirect_html' => $redirect_html, 536 'message' => esc_html__( 'Selected redirects deleted successfully', 'surflink' ), 530 537 ] ); 531 538 } else { … … 571 578 ] ); 572 579 } else { 580 $redirect_html = $this->ob_redirect_list(); 573 581 wp_send_json_success( [ 574 'message' => sprintf( _n( 582 'redirect_html' => $redirect_html, 583 'message' => sprintf( _n( 575 584 '%d redirect updated.', 576 585 '%d redirects updated.', … … 594 603 $result = $wpdb->query( $query ); 595 604 if ( $result !== false ) { 605 $redirect_html = $this->ob_redirect_list(); 596 606 wp_send_json_success( [ 597 'message' => esc_html__( 'Success', 'surflink' ), 607 'redirect_html' => $redirect_html, 608 'message' => esc_html__( 'Success', 'surflink' ), 598 609 ] ); 599 610 } else { … … 661 672 } 662 673 $csv = file_get_contents( $_FILES['file']['tmp_name'] ); 663 $lines = array_map( 'str_getcsv', preg_split( '/\\r\\n|\\r|\\n/', $csv ) ); 674 $lines = array_map( function ( $line ) { 675 return str_getcsv( 676 $line, 677 ',', 678 '"', 679 '\\' 680 ); 681 }, preg_split( '/\\r\\n|\\r|\\n/', $csv ) ); 664 682 $lines = array_filter( $lines, function ( $line ) { 665 683 return is_array( $line ) && count( array_filter( $line ) ) > 0; … … 715 733 } 716 734 } 735 $redirect_html = $this->ob_redirect_list(); 717 736 wp_send_json_success( [ 718 'message' => esc_html__( 'Importing Redirects completed', 'surflink' ), 719 'imported' => $inserted, 720 'duplication' => $duplication, 721 'error' => $error, 737 'redirect_html' => $redirect_html, 738 'message' => esc_html__( 'Importing Redirects completed', 'surflink' ), 739 'imported' => $inserted, 740 'duplication' => $duplication, 741 'error' => $error, 722 742 ] ); 723 743 } … … 793 813 ] ); 794 814 } 815 $redirect_html = $this->ob_redirect_list(); 795 816 wp_send_json_success( [ 796 'message' => "Redirect rules updated successfully.", 817 'message' => "Redirect rules updated successfully.", 818 'redirect_html' => $redirect_html, 797 819 ] ); 798 820 } … … 830 852 } 831 853 854 public function ob_redirect_list() { 855 ob_start(); 856 $this->render_li_red_page(); 857 return ob_get_clean(); 858 } 859 832 860 public function halt_bg( $slug = 'surfl-redirects' ) { 833 861 if ( !$this->is_module_enabled( $slug ) && $this->is_background_disabled( $slug ) ) { -
surflink/trunk/readme.txt
r3429799 r3430186 6 6 **Requires PHP:** 7.4 7 7 **Tested up to:** 6.9 8 **Stable tag:** 2.3. 08 **Stable tag:** 2.3.1 9 9 **License:** GPLv3 or later 10 10 **License URI:** https://opensource.org/licenses/GPL-3.0 … … 141 141 == Changelog == 142 142 143 = 2.3.1 = 144 * Improved: UX is improved in Redirects module. And some minor fixes. 145 143 146 = 2.3.0 = 144 147 * Performance: More optimized query in case of redirection is optimized for better and faster performance. -
surflink/trunk/surf-link.php
r3429799 r3430186 7 7 * Author: SurfLab 8 8 * Author URI: https://surflabtech.com 9 * Version: 2.3. 09 * Version: 2.3.1 10 10 * Text Domain: surflink 11 11 * License: GPL-3.0-or-later … … 67 67 } 68 68 if ( !defined( 'SURFL_VERSION' ) ) { 69 define( 'SURFL_VERSION', '2.3. 0' );69 define( 'SURFL_VERSION', '2.3.1' ); 70 70 } 71 71 if ( !defined( 'SURFL_PLUGIN' ) ) { … … 99 99 } 100 100 if ( !defined( 'SURFL_VERSION' ) ) { 101 define( 'SURFL_VERSION', '2.3. 0' );101 define( 'SURFL_VERSION', '2.3.1' ); 102 102 } 103 103 if ( !defined( 'SURFL_SITE_URL' ) ) {
Note: See TracChangeset
for help on using the changeset viewer.