Changeset 3330879
- Timestamp:
- 07/20/2025 10:38:06 AM (7 months ago)
- Location:
- nexlifydesk
- Files:
-
- 546 added
- 8 edited
-
tags/1.0.2 (added)
-
tags/1.0.2/assets (added)
-
tags/1.0.2/assets/css (added)
-
tags/1.0.2/assets/css/nexlifydesk-admin.css (added)
-
tags/1.0.2/assets/css/nexlifydesk.css (added)
-
tags/1.0.2/assets/images (added)
-
tags/1.0.2/assets/images/dashboard-icon.png (added)
-
tags/1.0.2/assets/images/file-types (added)
-
tags/1.0.2/assets/images/file-types/document.png (added)
-
tags/1.0.2/assets/images/file-types/image.png (added)
-
tags/1.0.2/assets/images/file-types/pdf.png (added)
-
tags/1.0.2/assets/images/nexlifydesk-logo-small.png (added)
-
tags/1.0.2/assets/images/nexlifydesk-logo.png (added)
-
tags/1.0.2/assets/images/priority (added)
-
tags/1.0.2/assets/images/priority/high.png (added)
-
tags/1.0.2/assets/images/priority/low.png (added)
-
tags/1.0.2/assets/images/priority/medium.png (added)
-
tags/1.0.2/assets/images/status (added)
-
tags/1.0.2/assets/images/status/closed.png (added)
-
tags/1.0.2/assets/images/status/open.png (added)
-
tags/1.0.2/assets/images/status/pending.png (added)
-
tags/1.0.2/assets/images/status/resolved.png (added)
-
tags/1.0.2/assets/images/support-icon.png (added)
-
tags/1.0.2/assets/images/ticket-icon.png (added)
-
tags/1.0.2/assets/js (added)
-
tags/1.0.2/assets/js/admin-ticket-list.js (added)
-
tags/1.0.2/assets/js/nexlifydesk.js (added)
-
tags/1.0.2/email-source (added)
-
tags/1.0.2/email-source/nexlifydesk-email-pipe.php (added)
-
tags/1.0.2/email-source/providers (added)
-
tags/1.0.2/email-source/providers/aws-ses (added)
-
tags/1.0.2/email-source/providers/aws-ses/aws-handler.php (added)
-
tags/1.0.2/email-source/providers/google (added)
-
tags/1.0.2/email-source/providers/google/google-handler.php (added)
-
tags/1.0.2/email-source/providers/outlook (added)
-
tags/1.0.2/includes (added)
-
tags/1.0.2/includes/class-nexlifydesk-admin.php (added)
-
tags/1.0.2/includes/class-nexlifydesk-ajax.php (added)
-
tags/1.0.2/includes/class-nexlifydesk-database.php (added)
-
tags/1.0.2/includes/class-nexlifydesk-rate-limiter.php (added)
-
tags/1.0.2/includes/class-nexlifydesk-reports.php (added)
-
tags/1.0.2/includes/class-nexlifydesk-shortcodes.php (added)
-
tags/1.0.2/includes/class-nexlifydesk-tickets.php (added)
-
tags/1.0.2/includes/class-nexlifydesk-users.php (added)
-
tags/1.0.2/includes/class-support.php (added)
-
tags/1.0.2/includes/helpers.php (added)
-
tags/1.0.2/includes/nexlifydesk-functions.php (added)
-
tags/1.0.2/languages (added)
-
tags/1.0.2/languages/nexlifydesk-de_DE_formal.mo (added)
-
tags/1.0.2/languages/nexlifydesk-de_DE_formal.po (added)
-
tags/1.0.2/languages/nexlifydesk-es_ES.mo (added)
-
tags/1.0.2/languages/nexlifydesk-es_ES.po (added)
-
tags/1.0.2/languages/nexlifydesk-fr_FR.mo (added)
-
tags/1.0.2/languages/nexlifydesk-fr_FR.po (added)
-
tags/1.0.2/languages/nexlifydesk-it_IT.mo (added)
-
tags/1.0.2/languages/nexlifydesk-it_IT.po (added)
-
tags/1.0.2/languages/nexlifydesk-ja.mo (added)
-
tags/1.0.2/languages/nexlifydesk-ja.po (added)
-
tags/1.0.2/languages/nexlifydesk-pt_BR.mo (added)
-
tags/1.0.2/languages/nexlifydesk-pt_BR.po (added)
-
tags/1.0.2/languages/nexlifydesk-pt_PT.mo (added)
-
tags/1.0.2/languages/nexlifydesk-pt_PT.po (added)
-
tags/1.0.2/languages/nexlifydesk-ru_RU.mo (added)
-
tags/1.0.2/languages/nexlifydesk-ru_RU.po (added)
-
tags/1.0.2/languages/nexlifydesk-zh_CN.mo (added)
-
tags/1.0.2/languages/nexlifydesk-zh_CN.po (added)
-
tags/1.0.2/languages/nexlifydesk.pot (added)
-
tags/1.0.2/license.txt (added)
-
tags/1.0.2/nexlifydesk.php (added)
-
tags/1.0.2/readme.txt (added)
-
tags/1.0.2/templates (added)
-
tags/1.0.2/templates/admin (added)
-
tags/1.0.2/templates/admin/imap-auth.php (added)
-
tags/1.0.2/templates/admin/partials (added)
-
tags/1.0.2/templates/admin/partials/single-reply.php (added)
-
tags/1.0.2/templates/admin/reports.php (added)
-
tags/1.0.2/templates/admin/settings.php (added)
-
tags/1.0.2/templates/admin/ticket-single.php (added)
-
tags/1.0.2/templates/admin/tickets-list.php (added)
-
tags/1.0.2/templates/emails (added)
-
tags/1.0.2/templates/emails/new_reply.php (added)
-
tags/1.0.2/templates/emails/new_ticket.php (added)
-
tags/1.0.2/templates/emails/sla_breach.php (added)
-
tags/1.0.2/templates/emails/status_changed.php (added)
-
tags/1.0.2/templates/frontend (added)
-
tags/1.0.2/templates/frontend/partials (added)
-
tags/1.0.2/templates/frontend/partials/single-reply.php (added)
-
tags/1.0.2/templates/frontend/ticket-form.php (added)
-
tags/1.0.2/templates/frontend/ticket-list.php (added)
-
tags/1.0.2/templates/frontend/ticket-single.php (added)
-
tags/1.0.2/vendor (added)
-
tags/1.0.2/vendor/freemius (added)
-
tags/1.0.2/vendor/freemius/LICENSE.txt (added)
-
tags/1.0.2/vendor/freemius/README.md (added)
-
tags/1.0.2/vendor/freemius/assets (added)
-
tags/1.0.2/vendor/freemius/assets/css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/account.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/add-ons.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/affiliation.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/checkout.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/clone-resolution.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/common.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/connect.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/debug.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/dialog-boxes.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/gdpr-optin-notice.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/index.php (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/optout.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/admin/plugins.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/customizer.css (added)
-
tags/1.0.2/vendor/freemius/assets/css/index.php (added)
-
tags/1.0.2/vendor/freemius/assets/img (added)
-
tags/1.0.2/vendor/freemius/assets/img/index.php (added)
-
tags/1.0.2/vendor/freemius/assets/img/nexlifydesk.png (added)
-
tags/1.0.2/vendor/freemius/assets/img/plugin-icon.png (added)
-
tags/1.0.2/vendor/freemius/assets/img/theme-icon.png (added)
-
tags/1.0.2/vendor/freemius/assets/index.php (added)
-
tags/1.0.2/vendor/freemius/assets/js (added)
-
tags/1.0.2/vendor/freemius/assets/js/index.php (added)
-
tags/1.0.2/vendor/freemius/assets/js/jquery.form.js (added)
-
tags/1.0.2/vendor/freemius/assets/js/nojquery.ba-postmessage.js (added)
-
tags/1.0.2/vendor/freemius/assets/js/postmessage.js (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/14fb1bd5b7c41648488b06147f50a0dc.svg (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/178afa6030e76635dbe835e111d2c507.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/27b5a722a5553d9de0170325267fccec.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/4529cac82a2d1f300d3c4702b7b5e8f3.svg (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/5480ed23b199531a8cbc05924f26952b.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/b4f3b958f4a019862d81b15f3f8eee3a.svg (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/c03f665db27af43971565560adfba594.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/dd89563360f0272635c8f0ab7d7f1402.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/e366d70661d8ad2493bd6afbd779f125.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/f18006f6535a1a6e9c6bfbffafe6f18a.svg (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/f3aac72a8e63997d6bb888f816457e9b.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/f928f1be99776af83e8e6be4baf8ffe7.svg (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/fde48e4609a6ddc11d639fc2421f2afd.png (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/freemius-pricing.js (added)
-
tags/1.0.2/vendor/freemius/assets/js/pricing/freemius-pricing.js.LICENSE.txt (added)
-
tags/1.0.2/vendor/freemius/composer.json (added)
-
tags/1.0.2/vendor/freemius/config.php (added)
-
tags/1.0.2/vendor/freemius/includes (added)
-
tags/1.0.2/vendor/freemius/includes/class-freemius-abstract.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-freemius.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-admin-notices.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-api.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-garbage-collector.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-lock.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-logger.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-options.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-plugin-updater.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-security.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-storage.php (added)
-
tags/1.0.2/vendor/freemius/includes/class-fs-user-lock.php (added)
-
tags/1.0.2/vendor/freemius/includes/customizer (added)
-
tags/1.0.2/vendor/freemius/includes/customizer/class-fs-customizer-support-section.php (added)
-
tags/1.0.2/vendor/freemius/includes/customizer/class-fs-customizer-upsell-control.php (added)
-
tags/1.0.2/vendor/freemius/includes/customizer/index.php (added)
-
tags/1.0.2/vendor/freemius/includes/debug (added)
-
tags/1.0.2/vendor/freemius/includes/debug/class-fs-debug-bar-panel.php (added)
-
tags/1.0.2/vendor/freemius/includes/debug/debug-bar-start.php (added)
-
tags/1.0.2/vendor/freemius/includes/debug/index.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-affiliate-terms.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-affiliate.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-billing.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-entity.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-payment.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-plugin-info.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-plugin-license.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-plugin-plan.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-plugin-tag.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-plugin.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-pricing.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-scope-entity.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-site.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-subscription.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/class-fs-user.php (added)
-
tags/1.0.2/vendor/freemius/includes/entities/index.php (added)
-
tags/1.0.2/vendor/freemius/includes/fs-core-functions.php (added)
-
tags/1.0.2/vendor/freemius/includes/fs-essential-functions.php (added)
-
tags/1.0.2/vendor/freemius/includes/fs-html-escaping-functions.php (added)
-
tags/1.0.2/vendor/freemius/includes/fs-plugin-info-dialog.php (added)
-
tags/1.0.2/vendor/freemius/includes/index.php (added)
-
tags/1.0.2/vendor/freemius/includes/l10n.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-admin-notice-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-cache-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-checkout-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-clone-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-contact-form-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-debug-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-gdpr-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-key-value-storage.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-license-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-option-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-permission-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-plan-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/class-fs-plugin-manager.php (added)
-
tags/1.0.2/vendor/freemius/includes/managers/index.php (added)
-
tags/1.0.2/vendor/freemius/includes/sdk (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/Exceptions (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/Exceptions/ArgumentNotExistException.php (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/Exceptions/EmptyArgumentException.php (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/Exceptions/Exception.php (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/Exceptions/InvalidArgumentException.php (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/Exceptions/OAuthException.php (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/Exceptions/index.php (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/FreemiusBase.php (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/FreemiusWordPress.php (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/LICENSE.txt (added)
-
tags/1.0.2/vendor/freemius/includes/sdk/index.php (added)
-
tags/1.0.2/vendor/freemius/includes/supplements (added)
-
tags/1.0.2/vendor/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php (added)
-
tags/1.0.2/vendor/freemius/includes/supplements/fs-essential-functions-2.2.1.php (added)
-
tags/1.0.2/vendor/freemius/includes/supplements/fs-migration-2.5.1.php (added)
-
tags/1.0.2/vendor/freemius/includes/supplements/index.php (added)
-
tags/1.0.2/vendor/freemius/index.php (added)
-
tags/1.0.2/vendor/freemius/languages (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-cs_CZ.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-da_DK.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-de_DE.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-es_ES.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-fr_FR.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-he_IL.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-hu_HU.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-it_IT.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-ja.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-nl_NL.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-ru_RU.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-ta.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius-zh_CN.mo (added)
-
tags/1.0.2/vendor/freemius/languages/freemius.pot (added)
-
tags/1.0.2/vendor/freemius/languages/index.php (added)
-
tags/1.0.2/vendor/freemius/require.php (added)
-
tags/1.0.2/vendor/freemius/start.php (added)
-
tags/1.0.2/vendor/freemius/templates (added)
-
tags/1.0.2/vendor/freemius/templates/account (added)
-
tags/1.0.2/vendor/freemius/templates/account.php (added)
-
tags/1.0.2/vendor/freemius/templates/account/billing.php (added)
-
tags/1.0.2/vendor/freemius/templates/account/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/account/partials (added)
-
tags/1.0.2/vendor/freemius/templates/account/partials/activate-license-button.php (added)
-
tags/1.0.2/vendor/freemius/templates/account/partials/addon.php (added)
-
tags/1.0.2/vendor/freemius/templates/account/partials/deactivate-license-button.php (added)
-
tags/1.0.2/vendor/freemius/templates/account/partials/disconnect-button.php (added)
-
tags/1.0.2/vendor/freemius/templates/account/partials/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/account/partials/site.php (added)
-
tags/1.0.2/vendor/freemius/templates/account/payments.php (added)
-
tags/1.0.2/vendor/freemius/templates/add-ons.php (added)
-
tags/1.0.2/vendor/freemius/templates/add-trial-to-pricing.php (added)
-
tags/1.0.2/vendor/freemius/templates/admin-notice.php (added)
-
tags/1.0.2/vendor/freemius/templates/ajax-loader.php (added)
-
tags/1.0.2/vendor/freemius/templates/api-connectivity-message-js.php (added)
-
tags/1.0.2/vendor/freemius/templates/auto-installation.php (added)
-
tags/1.0.2/vendor/freemius/templates/checkout (added)
-
tags/1.0.2/vendor/freemius/templates/checkout.php (added)
-
tags/1.0.2/vendor/freemius/templates/checkout/frame.php (added)
-
tags/1.0.2/vendor/freemius/templates/checkout/process-redirect.php (added)
-
tags/1.0.2/vendor/freemius/templates/checkout/redirect.php (added)
-
tags/1.0.2/vendor/freemius/templates/clone-resolution-js.php (added)
-
tags/1.0.2/vendor/freemius/templates/connect (added)
-
tags/1.0.2/vendor/freemius/templates/connect.php (added)
-
tags/1.0.2/vendor/freemius/templates/connect/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/connect/permission.php (added)
-
tags/1.0.2/vendor/freemius/templates/connect/permissions-group.php (added)
-
tags/1.0.2/vendor/freemius/templates/contact.php (added)
-
tags/1.0.2/vendor/freemius/templates/debug (added)
-
tags/1.0.2/vendor/freemius/templates/debug.php (added)
-
tags/1.0.2/vendor/freemius/templates/debug/api-calls.php (added)
-
tags/1.0.2/vendor/freemius/templates/debug/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/debug/logger.php (added)
-
tags/1.0.2/vendor/freemius/templates/debug/plugins-themes-sync.php (added)
-
tags/1.0.2/vendor/freemius/templates/debug/scheduled-crons.php (added)
-
tags/1.0.2/vendor/freemius/templates/email.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms (added)
-
tags/1.0.2/vendor/freemius/templates/forms/affiliation.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/data-debug-mode.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/deactivation (added)
-
tags/1.0.2/vendor/freemius/templates/forms/deactivation/contact.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/deactivation/form.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/deactivation/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/deactivation/retry-skip.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/email-address-update.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/license-activation.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/optout.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/premium-versions-upgrade-handler.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/premium-versions-upgrade-metadata.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/resend-key.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/subscription-cancellation.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/trial-start.php (added)
-
tags/1.0.2/vendor/freemius/templates/forms/user-change.php (added)
-
tags/1.0.2/vendor/freemius/templates/gdpr-optin-js.php (added)
-
tags/1.0.2/vendor/freemius/templates/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/js (added)
-
tags/1.0.2/vendor/freemius/templates/js/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/js/jquery.content-change.php (added)
-
tags/1.0.2/vendor/freemius/templates/js/open-license-activation.php (added)
-
tags/1.0.2/vendor/freemius/templates/js/permissions.php (added)
-
tags/1.0.2/vendor/freemius/templates/js/style-premium-theme.php (added)
-
tags/1.0.2/vendor/freemius/templates/partials (added)
-
tags/1.0.2/vendor/freemius/templates/partials/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/partials/network-activation.php (added)
-
tags/1.0.2/vendor/freemius/templates/plugin-icon.php (added)
-
tags/1.0.2/vendor/freemius/templates/plugin-info (added)
-
tags/1.0.2/vendor/freemius/templates/plugin-info/description.php (added)
-
tags/1.0.2/vendor/freemius/templates/plugin-info/features.php (added)
-
tags/1.0.2/vendor/freemius/templates/plugin-info/index.php (added)
-
tags/1.0.2/vendor/freemius/templates/plugin-info/screenshots.php (added)
-
tags/1.0.2/vendor/freemius/templates/pricing.php (added)
-
tags/1.0.2/vendor/freemius/templates/secure-https-header.php (added)
-
tags/1.0.2/vendor/freemius/templates/sticky-admin-notice-js.php (added)
-
tags/1.0.2/vendor/freemius/templates/tabs-capture-js.php (added)
-
tags/1.0.2/vendor/freemius/templates/tabs.php (added)
-
trunk/email-source/nexlifydesk-email-pipe.php (modified) (2 diffs)
-
trunk/includes/class-nexlifydesk-admin.php (modified) (1 diff)
-
trunk/includes/class-nexlifydesk-ajax.php (modified) (1 diff)
-
trunk/includes/class-nexlifydesk-database.php (modified) (2 diffs)
-
trunk/includes/class-nexlifydesk-shortcodes.php (modified) (4 diffs)
-
trunk/includes/class-nexlifydesk-tickets.php (modified) (6 diffs)
-
trunk/nexlifydesk.php (modified) (4 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/vendor (added)
-
trunk/vendor/freemius (added)
-
trunk/vendor/freemius/LICENSE.txt (added)
-
trunk/vendor/freemius/README.md (added)
-
trunk/vendor/freemius/assets (added)
-
trunk/vendor/freemius/assets/css (added)
-
trunk/vendor/freemius/assets/css/admin (added)
-
trunk/vendor/freemius/assets/css/admin/account.css (added)
-
trunk/vendor/freemius/assets/css/admin/add-ons.css (added)
-
trunk/vendor/freemius/assets/css/admin/affiliation.css (added)
-
trunk/vendor/freemius/assets/css/admin/checkout.css (added)
-
trunk/vendor/freemius/assets/css/admin/clone-resolution.css (added)
-
trunk/vendor/freemius/assets/css/admin/common.css (added)
-
trunk/vendor/freemius/assets/css/admin/connect.css (added)
-
trunk/vendor/freemius/assets/css/admin/debug.css (added)
-
trunk/vendor/freemius/assets/css/admin/dialog-boxes.css (added)
-
trunk/vendor/freemius/assets/css/admin/gdpr-optin-notice.css (added)
-
trunk/vendor/freemius/assets/css/admin/index.php (added)
-
trunk/vendor/freemius/assets/css/admin/optout.css (added)
-
trunk/vendor/freemius/assets/css/admin/plugins.css (added)
-
trunk/vendor/freemius/assets/css/customizer.css (added)
-
trunk/vendor/freemius/assets/css/index.php (added)
-
trunk/vendor/freemius/assets/img (added)
-
trunk/vendor/freemius/assets/img/index.php (added)
-
trunk/vendor/freemius/assets/img/nexlifydesk.png (added)
-
trunk/vendor/freemius/assets/img/plugin-icon.png (added)
-
trunk/vendor/freemius/assets/img/theme-icon.png (added)
-
trunk/vendor/freemius/assets/index.php (added)
-
trunk/vendor/freemius/assets/js (added)
-
trunk/vendor/freemius/assets/js/index.php (added)
-
trunk/vendor/freemius/assets/js/jquery.form.js (added)
-
trunk/vendor/freemius/assets/js/nojquery.ba-postmessage.js (added)
-
trunk/vendor/freemius/assets/js/postmessage.js (added)
-
trunk/vendor/freemius/assets/js/pricing (added)
-
trunk/vendor/freemius/assets/js/pricing/14fb1bd5b7c41648488b06147f50a0dc.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/178afa6030e76635dbe835e111d2c507.png (added)
-
trunk/vendor/freemius/assets/js/pricing/27b5a722a5553d9de0170325267fccec.png (added)
-
trunk/vendor/freemius/assets/js/pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png (added)
-
trunk/vendor/freemius/assets/js/pricing/4529cac82a2d1f300d3c4702b7b5e8f3.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/5480ed23b199531a8cbc05924f26952b.png (added)
-
trunk/vendor/freemius/assets/js/pricing/b4f3b958f4a019862d81b15f3f8eee3a.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/c03f665db27af43971565560adfba594.png (added)
-
trunk/vendor/freemius/assets/js/pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png (added)
-
trunk/vendor/freemius/assets/js/pricing/dd89563360f0272635c8f0ab7d7f1402.png (added)
-
trunk/vendor/freemius/assets/js/pricing/e366d70661d8ad2493bd6afbd779f125.png (added)
-
trunk/vendor/freemius/assets/js/pricing/f18006f6535a1a6e9c6bfbffafe6f18a.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/f3aac72a8e63997d6bb888f816457e9b.png (added)
-
trunk/vendor/freemius/assets/js/pricing/f928f1be99776af83e8e6be4baf8ffe7.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/fde48e4609a6ddc11d639fc2421f2afd.png (added)
-
trunk/vendor/freemius/assets/js/pricing/freemius-pricing.js (added)
-
trunk/vendor/freemius/assets/js/pricing/freemius-pricing.js.LICENSE.txt (added)
-
trunk/vendor/freemius/composer.json (added)
-
trunk/vendor/freemius/config.php (added)
-
trunk/vendor/freemius/includes (added)
-
trunk/vendor/freemius/includes/class-freemius-abstract.php (added)
-
trunk/vendor/freemius/includes/class-freemius.php (added)
-
trunk/vendor/freemius/includes/class-fs-admin-notices.php (added)
-
trunk/vendor/freemius/includes/class-fs-api.php (added)
-
trunk/vendor/freemius/includes/class-fs-garbage-collector.php (added)
-
trunk/vendor/freemius/includes/class-fs-lock.php (added)
-
trunk/vendor/freemius/includes/class-fs-logger.php (added)
-
trunk/vendor/freemius/includes/class-fs-options.php (added)
-
trunk/vendor/freemius/includes/class-fs-plugin-updater.php (added)
-
trunk/vendor/freemius/includes/class-fs-security.php (added)
-
trunk/vendor/freemius/includes/class-fs-storage.php (added)
-
trunk/vendor/freemius/includes/class-fs-user-lock.php (added)
-
trunk/vendor/freemius/includes/customizer (added)
-
trunk/vendor/freemius/includes/customizer/class-fs-customizer-support-section.php (added)
-
trunk/vendor/freemius/includes/customizer/class-fs-customizer-upsell-control.php (added)
-
trunk/vendor/freemius/includes/customizer/index.php (added)
-
trunk/vendor/freemius/includes/debug (added)
-
trunk/vendor/freemius/includes/debug/class-fs-debug-bar-panel.php (added)
-
trunk/vendor/freemius/includes/debug/debug-bar-start.php (added)
-
trunk/vendor/freemius/includes/debug/index.php (added)
-
trunk/vendor/freemius/includes/entities (added)
-
trunk/vendor/freemius/includes/entities/class-fs-affiliate-terms.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-affiliate.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-billing.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-entity.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-payment.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin-info.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin-license.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin-plan.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin-tag.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-pricing.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-scope-entity.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-site.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-subscription.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-user.php (added)
-
trunk/vendor/freemius/includes/entities/index.php (added)
-
trunk/vendor/freemius/includes/fs-core-functions.php (added)
-
trunk/vendor/freemius/includes/fs-essential-functions.php (added)
-
trunk/vendor/freemius/includes/fs-html-escaping-functions.php (added)
-
trunk/vendor/freemius/includes/fs-plugin-info-dialog.php (added)
-
trunk/vendor/freemius/includes/index.php (added)
-
trunk/vendor/freemius/includes/l10n.php (added)
-
trunk/vendor/freemius/includes/managers (added)
-
trunk/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-admin-notice-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-cache-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-checkout-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-clone-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-contact-form-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-debug-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-gdpr-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-key-value-storage.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-license-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-option-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-permission-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-plan-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-plugin-manager.php (added)
-
trunk/vendor/freemius/includes/managers/index.php (added)
-
trunk/vendor/freemius/includes/sdk (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/ArgumentNotExistException.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/EmptyArgumentException.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/Exception.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/InvalidArgumentException.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/OAuthException.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/index.php (added)
-
trunk/vendor/freemius/includes/sdk/FreemiusBase.php (added)
-
trunk/vendor/freemius/includes/sdk/FreemiusWordPress.php (added)
-
trunk/vendor/freemius/includes/sdk/LICENSE.txt (added)
-
trunk/vendor/freemius/includes/sdk/index.php (added)
-
trunk/vendor/freemius/includes/supplements (added)
-
trunk/vendor/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php (added)
-
trunk/vendor/freemius/includes/supplements/fs-essential-functions-2.2.1.php (added)
-
trunk/vendor/freemius/includes/supplements/fs-migration-2.5.1.php (added)
-
trunk/vendor/freemius/includes/supplements/index.php (added)
-
trunk/vendor/freemius/index.php (added)
-
trunk/vendor/freemius/languages (added)
-
trunk/vendor/freemius/languages/freemius-cs_CZ.mo (added)
-
trunk/vendor/freemius/languages/freemius-da_DK.mo (added)
-
trunk/vendor/freemius/languages/freemius-de_DE.mo (added)
-
trunk/vendor/freemius/languages/freemius-es_ES.mo (added)
-
trunk/vendor/freemius/languages/freemius-fr_FR.mo (added)
-
trunk/vendor/freemius/languages/freemius-he_IL.mo (added)
-
trunk/vendor/freemius/languages/freemius-hu_HU.mo (added)
-
trunk/vendor/freemius/languages/freemius-it_IT.mo (added)
-
trunk/vendor/freemius/languages/freemius-ja.mo (added)
-
trunk/vendor/freemius/languages/freemius-nl_NL.mo (added)
-
trunk/vendor/freemius/languages/freemius-ru_RU.mo (added)
-
trunk/vendor/freemius/languages/freemius-ta.mo (added)
-
trunk/vendor/freemius/languages/freemius-zh_CN.mo (added)
-
trunk/vendor/freemius/languages/freemius.pot (added)
-
trunk/vendor/freemius/languages/index.php (added)
-
trunk/vendor/freemius/require.php (added)
-
trunk/vendor/freemius/start.php (added)
-
trunk/vendor/freemius/templates (added)
-
trunk/vendor/freemius/templates/account (added)
-
trunk/vendor/freemius/templates/account.php (added)
-
trunk/vendor/freemius/templates/account/billing.php (added)
-
trunk/vendor/freemius/templates/account/index.php (added)
-
trunk/vendor/freemius/templates/account/partials (added)
-
trunk/vendor/freemius/templates/account/partials/activate-license-button.php (added)
-
trunk/vendor/freemius/templates/account/partials/addon.php (added)
-
trunk/vendor/freemius/templates/account/partials/deactivate-license-button.php (added)
-
trunk/vendor/freemius/templates/account/partials/disconnect-button.php (added)
-
trunk/vendor/freemius/templates/account/partials/index.php (added)
-
trunk/vendor/freemius/templates/account/partials/site.php (added)
-
trunk/vendor/freemius/templates/account/payments.php (added)
-
trunk/vendor/freemius/templates/add-ons.php (added)
-
trunk/vendor/freemius/templates/add-trial-to-pricing.php (added)
-
trunk/vendor/freemius/templates/admin-notice.php (added)
-
trunk/vendor/freemius/templates/ajax-loader.php (added)
-
trunk/vendor/freemius/templates/api-connectivity-message-js.php (added)
-
trunk/vendor/freemius/templates/auto-installation.php (added)
-
trunk/vendor/freemius/templates/checkout (added)
-
trunk/vendor/freemius/templates/checkout.php (added)
-
trunk/vendor/freemius/templates/checkout/frame.php (added)
-
trunk/vendor/freemius/templates/checkout/process-redirect.php (added)
-
trunk/vendor/freemius/templates/checkout/redirect.php (added)
-
trunk/vendor/freemius/templates/clone-resolution-js.php (added)
-
trunk/vendor/freemius/templates/connect (added)
-
trunk/vendor/freemius/templates/connect.php (added)
-
trunk/vendor/freemius/templates/connect/index.php (added)
-
trunk/vendor/freemius/templates/connect/permission.php (added)
-
trunk/vendor/freemius/templates/connect/permissions-group.php (added)
-
trunk/vendor/freemius/templates/contact.php (added)
-
trunk/vendor/freemius/templates/debug (added)
-
trunk/vendor/freemius/templates/debug.php (added)
-
trunk/vendor/freemius/templates/debug/api-calls.php (added)
-
trunk/vendor/freemius/templates/debug/index.php (added)
-
trunk/vendor/freemius/templates/debug/logger.php (added)
-
trunk/vendor/freemius/templates/debug/plugins-themes-sync.php (added)
-
trunk/vendor/freemius/templates/debug/scheduled-crons.php (added)
-
trunk/vendor/freemius/templates/email.php (added)
-
trunk/vendor/freemius/templates/forms (added)
-
trunk/vendor/freemius/templates/forms/affiliation.php (added)
-
trunk/vendor/freemius/templates/forms/data-debug-mode.php (added)
-
trunk/vendor/freemius/templates/forms/deactivation (added)
-
trunk/vendor/freemius/templates/forms/deactivation/contact.php (added)
-
trunk/vendor/freemius/templates/forms/deactivation/form.php (added)
-
trunk/vendor/freemius/templates/forms/deactivation/index.php (added)
-
trunk/vendor/freemius/templates/forms/deactivation/retry-skip.php (added)
-
trunk/vendor/freemius/templates/forms/email-address-update.php (added)
-
trunk/vendor/freemius/templates/forms/index.php (added)
-
trunk/vendor/freemius/templates/forms/license-activation.php (added)
-
trunk/vendor/freemius/templates/forms/optout.php (added)
-
trunk/vendor/freemius/templates/forms/premium-versions-upgrade-handler.php (added)
-
trunk/vendor/freemius/templates/forms/premium-versions-upgrade-metadata.php (added)
-
trunk/vendor/freemius/templates/forms/resend-key.php (added)
-
trunk/vendor/freemius/templates/forms/subscription-cancellation.php (added)
-
trunk/vendor/freemius/templates/forms/trial-start.php (added)
-
trunk/vendor/freemius/templates/forms/user-change.php (added)
-
trunk/vendor/freemius/templates/gdpr-optin-js.php (added)
-
trunk/vendor/freemius/templates/index.php (added)
-
trunk/vendor/freemius/templates/js (added)
-
trunk/vendor/freemius/templates/js/index.php (added)
-
trunk/vendor/freemius/templates/js/jquery.content-change.php (added)
-
trunk/vendor/freemius/templates/js/open-license-activation.php (added)
-
trunk/vendor/freemius/templates/js/permissions.php (added)
-
trunk/vendor/freemius/templates/js/style-premium-theme.php (added)
-
trunk/vendor/freemius/templates/partials (added)
-
trunk/vendor/freemius/templates/partials/index.php (added)
-
trunk/vendor/freemius/templates/partials/network-activation.php (added)
-
trunk/vendor/freemius/templates/plugin-icon.php (added)
-
trunk/vendor/freemius/templates/plugin-info (added)
-
trunk/vendor/freemius/templates/plugin-info/description.php (added)
-
trunk/vendor/freemius/templates/plugin-info/features.php (added)
-
trunk/vendor/freemius/templates/plugin-info/index.php (added)
-
trunk/vendor/freemius/templates/plugin-info/screenshots.php (added)
-
trunk/vendor/freemius/templates/pricing.php (added)
-
trunk/vendor/freemius/templates/secure-https-header.php (added)
-
trunk/vendor/freemius/templates/sticky-admin-notice-js.php (added)
-
trunk/vendor/freemius/templates/tabs-capture-js.php (added)
-
trunk/vendor/freemius/templates/tabs.php (added)
Legend:
- Unmodified
- Added
- Removed
-
nexlifydesk/trunk/email-source/nexlifydesk-email-pipe.php
r3330751 r3330879 98 98 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Custom table requires direct query 99 99 $existing_ticket = $wpdb->get_row($wpdb->prepare( 100 // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name is constructed from $wpdb->prefix and is safe 100 101 // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name is constructed from $wpdb->prefix and is safe 101 102 " … … 151 152 $subject 152 153 )); 154 //phpcs:enable 153 155 154 156 if ($existing_ticket) { -
nexlifydesk/trunk/includes/class-nexlifydesk-admin.php
r3330741 r3330879 1709 1709 <?php 1710 1710 // Show default template as placeholder if empty 1711 $auto_response_content = $templates['email_auto_response'];1711 $auto_response_content = isset($templates['email_auto_response']) ? $templates['email_auto_response'] : ''; 1712 1712 if (empty($auto_response_content)) { 1713 $auto_response_content = "Hello {customer_name},\n\nThank you for contacting us. We have received your support request and have assigned it ticket ID #{ticket_id}.\n\nSubject: {subject}\n\nOur support team will review your request and get back to you as soon as possible. You can reference this ticket ID in any future correspondence.\n\nBest regards,\n{site_name} Support Team\n{site_url}"; 1713 // Default HTML formatted auto-response template 1714 $auto_response_content = '<p>Hello {customer_name},</p> 1715 1716 <p>Thank you for contacting us. We have received your support request and have assigned it ticket ID <strong>#{ticket_id}</strong>.</p> 1717 1718 <p><strong>Subject:</strong> {subject}</p> 1719 1720 <p>Our support team will review your request and get back to you as soon as possible. You can reference this ticket ID in any future correspondence.</p> 1721 1722 <p>Best regards,<br> 1723 {site_name} Support Team<br> 1724 <a href="{site_url}">{site_url}</a></p>'; 1714 1725 } 1715 1726 wp_editor( -
nexlifydesk/trunk/includes/class-nexlifydesk-ajax.php
r3330741 r3330879 36 36 37 37 if (isset($_FILES['attachments']) && isset($_FILES['attachments']['error']) && is_array($_FILES['attachments']['error'])) { 38 foreach ($_FILES['attachments']['error'] as $error) { 39 $error = absint($error); 38 // Sanitize the error array by casting each value to integer 39 $attachment_errors = array_map('intval', $_FILES['attachments']['error']); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized via array_map with intval 40 41 foreach ($attachment_errors as $error) { 40 42 if ($error === UPLOAD_ERR_FORM_SIZE || $error === UPLOAD_ERR_INI_SIZE) { 41 43 wp_send_json_error(__('One or more files are too large. Please reduce file sizes and try again.', 'nexlifydesk')); -
nexlifydesk/trunk/includes/class-nexlifydesk-database.php
r3330741 r3330879 193 193 194 194 public static function check_and_run_migrations() { 195 $current_version = get_option('nexlifydesk_db_version', '1.0. 1');195 $current_version = get_option('nexlifydesk_db_version', '1.0.2'); 196 196 $plugin_version = NEXLIFYDESK_VERSION; 197 197 198 if (version_compare($current_version, '1.0. 1', '<')) {198 if (version_compare($current_version, '1.0.2', '<')) { 199 199 self::migrate_to_1_0_1(); 200 update_option('nexlifydesk_db_version', '1.0. 1');200 update_option('nexlifydesk_db_version', '1.0.2'); 201 201 } 202 202 … … 289 289 global $wpdb; 290 290 291 $current_version = get_option('nexlifydesk_version', '1.0. 1');292 293 if ($current_version === '1.0. 1' && !get_option('nexlifydesk_db_version')) {291 $current_version = get_option('nexlifydesk_version', '1.0.2'); 292 293 if ($current_version === '1.0.2' && !get_option('nexlifydesk_db_version')) { 294 294 return; 295 295 } -
nexlifydesk/trunk/includes/class-nexlifydesk-shortcodes.php
r3326104 r3330879 13 13 public static function ticket_form($atts) { 14 14 $atts = shortcode_atts(array( 15 'demo' => 'no',16 15 'show_title' => 'yes' 17 16 ), $atts, 'nexlifydesk_ticket_form'); 18 17 19 if (self::is_documentation_page()) { 20 return '<code>[nexlifydesk_ticket_form]</code>'; 18 // Return shortcode placeholder ONLY for documentation pages that are specifically about documentation 19 // NOT for actual support ticket submission pages 20 if (self::is_documentation_page() && !self::is_actual_support_page()) { 21 return '<div class="nexlifydesk-shortcode-placeholder" style="background: #f0f0f0; padding: 15px; border: 1px dashed #ccc; border-radius: 4px; margin: 10px 0; text-align: center; color: #666;"><strong>Shortcode:</strong> <code>[nexlifydesk_ticket_form]</code><br><small>This shortcode displays the ticket submission form for customers.</small></div>'; 21 22 } 22 23 23 24 ob_start(); 24 25 25 if ($atts['demo'] === 'yes') { 26 echo '<div class="nexlifydesk-shortcode-demo">'; 27 echo '<h4>' . esc_html__('Ticket Submission Form Shortcode', 'nexlifydesk') . '</h4>'; 28 echo '<code>[nexlifydesk_ticket_form]</code>'; 29 echo '<p><strong>' . esc_html__('Optional Parameters:', 'nexlifydesk') . '</strong></p>'; 30 echo '<ul>'; 31 echo '<li><code>show_title="no"</code> - ' . esc_html__('Hides the default form title', 'nexlifydesk') . '</li>'; 32 echo '</ul>'; 33 echo '<p>' . esc_html__('This shortcode displays the customer ticket submission form with fields for subject, message, category, priority, and file attachments.', 'nexlifydesk') . '</p>'; 34 echo '</div>'; 35 } else { 36 $template_path = NEXLIFYDESK_PLUGIN_DIR . 'templates/frontend/ticket-form.php'; 37 if (file_exists($template_path) && is_readable($template_path)) { 38 include $template_path; 39 } 26 $template_path = NEXLIFYDESK_PLUGIN_DIR . 'templates/frontend/ticket-form.php'; 27 if (file_exists($template_path) && is_readable($template_path)) { 28 include $template_path; 40 29 } 41 30 … … 48 37 'per_page' => 10, 49 38 'show_closed' => 'no', 50 'title' => '', 51 'demo' => 'no' 39 'title' => '' 52 40 ), $atts, 'nexlifydesk_ticket_list'); 53 41 54 if (self::is_documentation_page()) { 55 return '<code>[nexlifydesk_ticket_list]</code>'; 42 // Return shortcode placeholder ONLY for documentation pages that are specifically about documentation 43 // NOT for actual support ticket list pages 44 if (self::is_documentation_page() && !self::is_actual_support_page()) { 45 return '<div class="nexlifydesk-shortcode-placeholder" style="background: #f0f0f0; padding: 15px; border: 1px dashed #ccc; border-radius: 4px; margin: 10px 0; text-align: center; color: #666;"><strong>Shortcode:</strong> <code>[nexlifydesk_ticket_list]</code><br><small>This shortcode displays the user\'s ticket history and allows them to view their support tickets.</small></div>'; 56 46 } 57 47 58 48 ob_start(); 59 49 60 if ($atts['demo'] === 'yes') { 61 echo '<div class="nexlifydesk-shortcode-demo">'; 62 echo '<h4>' . esc_html__('Ticket List Shortcode', 'nexlifydesk') . '</h4>'; 63 echo '<code>[nexlifydesk_ticket_list]</code>'; 64 echo '<p><strong>' . esc_html__('Optional Parameters:', 'nexlifydesk') . '</strong></p>'; 65 echo '<ul>'; 66 echo '<li><code>show_title="no"</code> - ' . esc_html__('Hides the default page title', 'nexlifydesk') . '</li>'; 67 echo '<li><code>per_page="10"</code> - ' . esc_html__('Number of tickets to display per page', 'nexlifydesk') . '</li>'; 68 echo '<li><code>show_closed="no"</code> - ' . esc_html__('Whether to show closed tickets', 'nexlifydesk') . '</li>'; 69 echo '</ul>'; 70 echo '<p>' . esc_html__('This shortcode displays the user\'s ticket history. Logged-in users see their own tickets, while agents see their assigned tickets.', 'nexlifydesk') . '</p>'; 71 echo '</div>'; 72 } else { 73 if ($atts['show_title'] === 'no') { 74 echo '<h3 class="nexlifydesk-list-title">' . esc_html($atts['title']) . '</h3>'; 75 } 76 77 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- GET parameter for read-only ticket viewing, no nonce needed 78 if (isset($_GET['ticket_id']) && !empty($_GET['ticket_id'])) { 79 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Viewing tickets is read-only, no nonce needed 80 $ticket_id_param = sanitize_text_field(wp_unslash($_GET['ticket_id'])); 81 if (self::can_user_view_ticket($ticket_id_param)) { 82 $template_path = NEXLIFYDESK_PLUGIN_DIR . 'templates/frontend/ticket-single.php'; 83 if (file_exists($template_path) && is_readable($template_path)) { 84 include $template_path; 85 } else { 86 echo '<p>' . esc_html__('Single ticket template not found.', 'nexlifydesk') . '</p>'; 87 } 88 } 89 90 } else { 91 $template_path = NEXLIFYDESK_PLUGIN_DIR . 'templates/frontend/ticket-list.php'; 50 if ($atts['show_title'] === 'no') { 51 echo '<h3 class="nexlifydesk-list-title">' . esc_html($atts['title']) . '</h3>'; 52 } 53 54 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- GET parameter for read-only ticket viewing, no nonce needed 55 if (isset($_GET['ticket_id']) && !empty($_GET['ticket_id'])) { 56 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Viewing tickets is read-only, no nonce needed 57 $ticket_id_param = sanitize_text_field(wp_unslash($_GET['ticket_id'])); 58 if (self::can_user_view_ticket($ticket_id_param)) { 59 $template_path = NEXLIFYDESK_PLUGIN_DIR . 'templates/frontend/ticket-single.php'; 92 60 if (file_exists($template_path) && is_readable($template_path)) { 93 $shortcode_atts = $atts;94 61 include $template_path; 95 62 } else { 96 echo '<p>' . esc_html__('Ticket list template not found.', 'nexlifydesk') . '</p>'; 97 } 63 echo '<p>' . esc_html__('Single ticket template not found.', 'nexlifydesk') . '</p>'; 64 } 65 } 66 67 } else { 68 $template_path = NEXLIFYDESK_PLUGIN_DIR . 'templates/frontend/ticket-list.php'; 69 if (file_exists($template_path) && is_readable($template_path)) { 70 $shortcode_atts = $atts; 71 include $template_path; 72 } else { 73 echo '<p>' . esc_html__('Ticket list template not found.', 'nexlifydesk') . '</p>'; 98 74 } 99 75 } … … 195 171 $page_slug = $post->post_name; 196 172 $page_title = $post->post_title; 197 198 $doc_keywords = array('doc', 'documentation', 'guide', 'help', 'manual', 'nexlifydesk-documentation'); 173 $doc_keywords = array( 174 'doc', 175 'documentation', 176 'guide', 177 'help', 178 'manual', 179 'nexlifydesk-documentation', 180 'nexlifydesk-guide', 181 'nexlifydesk-help', 182 'nexlifydesk-manual', 183 'knowledge-base', 184 'kb', 185 'faq', 186 'getting-started', 187 'configuration', 188 'features-guide', 189 'shortcodes-integration', 190 'security-performance' 191 ); 199 192 200 193 foreach ($doc_keywords as $keyword) { … … 206 199 } 207 200 201 if ($post->post_content) { 202 $doc_shortcode_count = substr_count($post->post_content, 'nexlifydesk-shortcode-placeholder'); 203 $actual_shortcode_count = substr_count($post->post_content, '[nexlifydesk_'); 204 205 if ($doc_shortcode_count > 0 && $doc_shortcode_count >= $actual_shortcode_count) { 206 return true; 207 } 208 } 209 208 210 return false; 209 211 } 212 213 /** 214 * Check if this is an actual support page (form or list) that users interact with 215 * 216 * @return bool 217 */ 218 private static function is_actual_support_page() { 219 $settings = get_option('nexlifydesk_settings', array()); 220 $ticket_form_page_id = isset($settings['ticket_form_page_id']) ? (int)$settings['ticket_form_page_id'] : 0; 221 $ticket_page_id = isset($settings['ticket_page_id']) ? (int)$settings['ticket_page_id'] : 0; 222 223 global $post; 224 if (!$post) { 225 return false; 226 } 227 228 $current_page_id = $post->ID; 229 230 // Check if this is the configured support pages 231 if ($current_page_id === $ticket_form_page_id || $current_page_id === $ticket_page_id) { 232 return true; 233 } 234 235 // Check if page title or slug indicates it's for actual support (ticket submission/viewing) 236 $page_title = strtolower($post->post_title); 237 $page_slug = strtolower($post->post_name); 238 239 $support_keywords = array( 240 'submit', 241 'ticket', 242 'support', 243 'contact', 244 'help-desk', 245 'helpdesk', 246 'create-ticket', 247 'new-ticket', 248 'support-form', 249 'ticket-form', 250 'my-tickets', 251 'view-tickets' 252 ); 253 254 foreach ($support_keywords as $keyword) { 255 if (strpos($page_title, $keyword) !== false || strpos($page_slug, $keyword) !== false) { 256 // But exclude documentation-specific terms 257 if (strpos($page_title, 'documentation') === false && 258 strpos($page_title, 'guide') === false && 259 strpos($page_slug, 'documentation') === false && 260 strpos($page_slug, 'guide') === false) { 261 return true; 262 } 263 } 264 } 265 266 return false; 267 } 210 268 } -
nexlifydesk/trunk/includes/class-nexlifydesk-tickets.php
r3330741 r3330879 69 69 } 70 70 71 // Add email to data array for duplicate checking72 71 $data['email'] = $email_address; 73 72 … … 686 685 $customer_email = $user ? $user->user_email : ($customer_details['email'] ?: null); 687 686 688 $headers = array( 689 'Content-Type: text/html; charset=UTF-8', 690 'From: ' . get_bloginfo('name') . ' <' . $admin_email . '>', 691 'Message-ID: <ticket-' . $ticket->ticket_id . '-' . time() . '@' . wp_parse_url(home_url(), PHP_URL_HOST) . '>', 692 'In-Reply-To: <ticket-' . $ticket->ticket_id . '@' . wp_parse_url(home_url(), PHP_URL_HOST) . '>', 693 'References: <ticket-' . $ticket->ticket_id . '@' . wp_parse_url(home_url(), PHP_URL_HOST) . '>' 694 ); 687 $headers = self::get_email_headers($ticket); 695 688 696 689 $ticket_url = add_query_arg( … … 955 948 956 949 /** 950 * 951 * This function detects common SMTP plugins and avoids adding Message-ID, 952 * In-Reply-To, and References headers if an SMTP plugin is active, preventing 953 * the "multiple Message-ID headers" error that causes emails to be blocked 954 * by Gmail and other providers. 955 * 956 * @param object $ticket The ticket object 957 * @return array Email headers array 958 */ 959 private static function get_email_headers($ticket) { 960 $admin_email = get_option('admin_email'); 961 $headers = array( 962 'Content-Type: text/html; charset=UTF-8', 963 'From: ' . get_bloginfo('name') . ' <' . $admin_email . '>' 964 ); 965 966 // Check if SMTP plugins are active that might add their own Message-ID headers 967 $smtp_plugins_active = ( 968 is_plugin_active('wp-mail-smtp/wp_mail_smtp.php') || 969 is_plugin_active('easy-wp-smtp/easy-wp-smtp.php') || 970 is_plugin_active('gmail-smtp/main.php') || 971 is_plugin_active('wp-smtp/wp-smtp.php') || 972 function_exists('wp_mail_smtp') || 973 class_exists('WPMailSMTP') || 974 class_exists('Easy_WP_SMTP') 975 ); 976 977 // Only add Message-ID and threading headers if no SMTP plugin is detected 978 if (!$smtp_plugins_active) { 979 $domain = wp_parse_url(home_url(), PHP_URL_HOST); 980 $headers[] = 'Message-ID: <ticket-' . $ticket->ticket_id . '-' . time() . '@' . $domain . '>'; 981 $headers[] = 'In-Reply-To: <ticket-' . $ticket->ticket_id . '@' . $domain . '>'; 982 $headers[] = 'References: <ticket-' . $ticket->ticket_id . '@' . $domain . '>'; 983 } 984 985 return $headers; 986 } 987 988 /** 957 989 * Send email notifications for tickets created via email channel 958 990 * Simple auto-response for new tickets, raw email replies for ongoing conversation … … 979 1011 } 980 1012 981 $headers = array( 982 'Content-Type: text/html; charset=UTF-8', 983 'From: ' . get_bloginfo('name') . ' <' . $admin_email . '>', 984 'Message-ID: <ticket-' . $ticket->ticket_id . '-' . time() . '@' . wp_parse_url(home_url(), PHP_URL_HOST) . '>', 985 'In-Reply-To: <ticket-' . $ticket->ticket_id . '@' . wp_parse_url(home_url(), PHP_URL_HOST) . '>', 986 'References: <ticket-' . $ticket->ticket_id . '@' . wp_parse_url(home_url(), PHP_URL_HOST) . '>' 987 ); 1013 $headers = self::get_email_headers($ticket); 988 1014 989 1015 switch ($type) { … … 1079 1105 $from_name = $reply_user->display_name ?: get_bloginfo('name'); 1080 1106 $from_email = $reply_user->user_email ?: get_option('admin_email'); 1081 $headers[1] = 'From: ' . $from_name . ' <' . $from_email . '>'; 1107 1108 // Create fresh headers to avoid conflicts with SMTP plugins 1109 $reply_headers = self::get_email_headers($ticket); 1110 // Override the From header with the reply user's details 1111 $reply_headers[1] = 'From: ' . $from_name . ' <' . $from_email . '>'; 1112 1082 1113 // translators: 1: Ticket ID, 2: Ticket subject. 1083 1114 $subject = sprintf(__('[#%1$s] %2$s', 'nexlifydesk'), $ticket->ticket_id, $ticket->subject); 1084 1115 1085 wp_mail($customer_email, $subject, $clean_message, $ headers);1116 wp_mail($customer_email, $subject, $clean_message, $reply_headers); 1086 1117 } 1087 1118 … … 1294 1325 1295 1326 /** 1296 * Get default auto-response message 1327 * Get default auto-response message with HTML formatting 1297 1328 */ 1298 1329 private static function get_default_auto_response() { 1299 return "Hello {customer_name},\n\n" .1300 "Thank you for contacting us. We have received your support request and have assigned it ticket ID #{ticket_id}.\n\n" .1301 "Subject: {subject}\n\n" .1302 "Our support team will review your request and get back to you as soon as possible. You can reference this ticket ID in any future correspondence.\n\n" .1303 "Best regards,\n" .1304 "{site_name} Support Team\n" .1305 "{site_url}";1330 return '<p>Hello {customer_name},</p>' . "\n\n" . 1331 '<p>Thank you for contacting us. We have received your support request and have assigned it ticket ID <strong>#{ticket_id}</strong>.</p>' . "\n\n" . 1332 '<p><strong>Subject:</strong> {subject}</p>' . "\n\n" . 1333 '<p>Our support team will review your request and get back to you as soon as possible. You can reference this ticket ID in any future correspondence.</p>' . "\n\n" . 1334 '<p>Best regards,<br>' . "\n" . 1335 '{site_name} Support Team<br>' . "\n" . 1336 '<a href="{site_url}">{site_url}</a></p>'; 1306 1337 } 1307 1338 -
nexlifydesk/trunk/nexlifydesk.php
r3330741 r3330879 3 3 * Plugin Name: NexlifyDesk 4 4 * Description: A modern, user-friendly support ticket system for WordPress with ticket submission, threaded replies, file attachments, agent assignment, and customizable. 5 * Version: 1.0.1 5 * Version: 1.0.2 6 * Author URI: https://nexlifylabs.com 6 7 * Supported Versions: 6.2+ 7 8 * Tested up to: 6.2 < 6.8. 8 9 * Author: NexlifyLabs 9 * Author URI: https://nexlifylabs.com10 10 * License: GPL-2.0+ 11 11 * Text Domain: nexlifydesk … … 17 17 } 18 18 19 if ( ! function_exists( 'nexlifydesk' ) ) { 20 // Create a helper function for easy SDK access. 21 function nexlifydesk() { 22 global $nexlifydesk; 23 24 if ( ! isset( $nexlifydesk ) ) { 25 // Include Freemius SDK. 26 require_once dirname( __FILE__ ) . '/vendor/freemius/start.php'; 27 $nexlifydesk = fs_dynamic_init( array( 28 'id' => '19551', 29 'slug' => 'nexlifydesk', 30 'type' => 'plugin', 31 'public_key' => 'pk_cbbd298a238d22db2fed1cc83307e', 32 'is_premium' => false, 33 'has_addons' => false, 34 'has_paid_plans' => false, 35 'menu' => array( 36 'slug' => 'nexlifydesk_tickets', 37 'account' => false, 38 'contact' => false, 39 ), 40 ) ); 41 } 42 43 return $nexlifydesk; 44 } 45 46 // Init Freemius. 47 nexlifydesk(); 48 // Signal that SDK was initiated. 49 do_action( 'nexlifydesk_loaded' ); 50 } 51 19 52 define('NEXLIFYDESK_PLUGIN_DIR', plugin_dir_path(__FILE__)); 20 53 define('NEXLIFYDESK_PLUGIN_URL', plugin_dir_url(__FILE__)); 21 define('NEXLIFYDESK_VERSION', '1.0. 1');54 define('NEXLIFYDESK_VERSION', '1.0.2'); 22 55 define('NEXLIFYDESK_TABLE_PREFIX', 'nexlifydesk_'); 23 56 define('NEXLIFYDESK_CAP_VIEW_ALL_TICKETS', 'nexlifydesk_view_all_tickets'); … … 406 439 407 440 //Custom table maintenance requires direct queries without caching 441 // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table name is constructed from $wpdb->prefix and is safe 408 442 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Custom table maintenance requires direct queries without caching 409 443 $old_ticket_ids = $wpdb->get_col( … … 430 464 $purged[] = __('Purged orphaned attachments.', 'nexlifydesk'); 431 465 wp_send_json_success(implode('<br>', $purged)); 466 467 // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared 432 468 }); 433 469 -
nexlifydesk/trunk/readme.txt
r3330741 r3330879 4 4 Requires at least: 6.2 5 5 Tested up to: 6.8 6 Stable tag: 1.0. 16 Stable tag: 1.0.2 7 7 License: GPLv2 or later 8 8 License URI: https://www.gnu.org/licenses/gpl-2.0.html 9 9 Requires PHP: 7.4 10 10 11 Complete WordPress support ticketing system with agent management, internal notes, workflows, SLA monitoring, and WooCommerce integration. 11 Hey there! NexlifyDesk is my awesome WordPress support ticketing system that turns your site into a pro customer service hub. It’s built for scalability and efficiency, giving you everything you need to wow your customers while keeping full control of their data. 12 13 **Documentation**: Check out the [Full Documentation & Setup Guide](https://nexlifylabs.com/nexlifydesk-documentation/getting-started/) 12 14 13 15 == Description == 14 16 15 NexlifyDesk is a comprehensive, enterprise-grade support ticketing system for WordPress that transforms your website into a professional customer service hub. Built with scalability and efficiency in mind, it provides everything you need to deliver exceptional support experiences while maintaining complete control over your customer data. 16 17 **Documentation**: [Full Documentation & Setup Guide](https://nexlifylabs.com/nexlifydesk-documentation/getting-started/) 17 NexlifyDesk is my go-to, enterprise-grade ticketing solution for WordPress. I designed it to make customer support a breeze while keeping things organized and secure. Here’s what I’ve packed into it: 18 19 - A complete system to manage tickets, agents, and workflows 20 - Internal notes for team chats 21 - SLA monitoring to keep things on track 22 - Seamless WooCommerce integration 23 24 It’s all about delivering top-notch support experiences—trust me, you’ll love it! 18 25 19 26 == Key Features == 20 27 21 28 **Frontend Customer Experience** 22 * **Ticket Submission & Management**: Clean, user-friendly interface for customers to submit tickets, view their history, and track progress 23 * **Real-time Updates**: AJAX-powered interface with live status updates and instant reply notifications 24 * **File Attachments**: Support for multiple file types with configurable size limits and security validation 25 * **Responsive Design**: Optimized for desktop, tablet, and mobile devices 29 - Ticket Submission & Management: I’ve added a clean, user-friendly interface where customers can submit tickets, check their history, and track progress. Super easy! 30 - Real-time Updates: An AJAX-powered setup with live status updates and instant reply notifications—keeps everything snappy! 31 - File Attachments: Supports multiple file types with configurable size limits and security checks. Safety first! 32 - Responsive Design: Works like a charm on desktop, tablet, or mobile—optimized for all! 26 33 27 34 **Advanced Admin Dashboard** 28 * **Centralized Ticket Management**: Comprehensive admin interface with filtering, search, and bulk actions 29 * **Real-time Statistics**: Live dashboard with ticket counts, response times, and performance metrics 30 * **Agent Assignment**: Intelligent auto-assignment or manual assignment with load balancing 31 * **Status Management**: Five ticket statuses (Open, In Progress, Pending, Resolved, Closed) with automatic workflows 35 - Centralized Ticket Management: A comprehensive admin interface with filtering, search, and bulk actions. I made it powerful yet simple! 36 - Real-time Statistics: A live dashboard showing ticket counts, response times, and performance metrics. Love the insights! 37 - Agent Assignment: Intelligent auto-assignment or manual options with load balancing—keeps the workload fair! 38 - Status Management: Five ticket statuses (Open, In Progress, Pending, Resolved, Closed) with automatic workflows. Smooth sailing! 32 39 33 40 **Agent Roles & Permissions System** 34 * **Custom Agent Positions**: Create unlimited agent roles with granular permission control 35 * **Capability Management**: Fine-tune what each agent can do (view all tickets, assign tickets, manage categories, etc.) 36 * **Agent Performance Tracking**: Monitor response times, resolution rates, and workload distribution 37 * **Orphaned Ticket Management**: Automatic reassignment when agents are removed or deactivated 41 - Custom Agent Positions: I let you create unlimited agent roles with granular permission control—total flexibility! 42 - Capability Management: Fine-tune what each agent can do (view all tickets, assign them, manage categories, etc.). You’re in charge! 43 - Agent Performance Tracking: Monitor response times, resolution rates, and workload distribution. Great for team management! 44 - Orphaned Ticket Management: Automatically reassigns tickets if an agent leaves—handled it for you! 38 45 39 46 **Professional Communication Tools** 40 * **Internal Notes**: Private agent-to-agent communication within tickets (invisible to customers) 41 * **Email Notifications**: Fully customizable templates with dynamic placeholders for all scenarios 42 * **Notification Control**: Granular settings for when and how notifications are sent 43 * **Professional Templates**: Pre-designed email templates for new tickets, replies, status changes, and SLA breaches 47 - Internal Notes: Private agent-to-agent chats within tickets (customers won’t see them—shh!). Perfect for teamwork! 48 - Email Notifications: Fully customizable templates with dynamic placeholders for every scenario. I made it fun to tweak! 49 - Notification Control: Granular settings for when and how notifications go out—your call! 50 - Professional Templates: Pre-designed email templates for new tickets, replies, status changes, and SLA breaches. Ready to go! 44 51 45 52 **Intelligent Automation** 46 * **Enhanced Duplicate Detection**: Advanced multi-layer algorithms detect similar tickets and merge conversations automatically with improved accuracy 47 * **Auto-Assignment**: Smart distribution of tickets to available agents based on workload 48 * **SLA Monitoring**: Automatic tracking and breach notifications to maintain service standards 49 * **Auto-Closure**: Resolved tickets automatically close after 48 hours of inactivity with system notifications 53 - Enhanced Duplicate Detection: My advanced multi-layer algorithms spot similar tickets and merge them automatically—way more accurate now! 54 - Auto-Assignment: Smartly distributes tickets to available agents based on workload. Hands-off genius! 55 - SLA Monitoring: Tracks and notifies on breaches to maintain service standards—keeps you on your toes! 56 - Auto-Closure: Resolved tickets close after 48 hours of inactivity with system notifications. Neat, right? 50 57 51 58 **Email Piping & Integration** 52 * **Multi-Provider Support**: Convert emails to tickets with support for Custom IMAP/POP3, AWS WorkMail, and Google Workspace/Gmail 53 * **Flexible Email Management**: Option to keep or delete emails from inbox after ticket creation 54 * **Advanced Spam Protection**: Built-in spam filtering, email blocking, and rate limiting to prevent abuse 55 * **Intelligent Email Processing**: Automatic sender detection, thread management, and duplicate prevention 59 - Multi-Provider Support: Turns emails into tickets with Custom IMAP/POP3, AWS WorkMail, and Google Workspace/Gmail. I’ve got you covered! 60 - Flexible Email Management: Option to keep or delete emails after ticket creation—your choice! 61 - Advanced Spam Protection: Built-in filtering, blocking, and rate limiting to stop abuse. Security’s my thing! 62 - Intelligent Email Processing: Auto sender detection, thread management, and duplicate prevention. Smart stuff! 56 63 57 64 **Enhanced Admin Experience** 58 * **Real-time Ticket List**: Live-updating ticket interface with read/unread status indicators 59 * **Smart Sorting**: Automatic prioritization with unread tickets displayed first 60 * **Instant Notifications**: Real-time updates without page refresh 61 * **Bulk Operations**: Enhanced bulk actions for efficient ticket management 65 - Real-time Ticket List: Live-updating interface with read/unread status indicators. I love the flow! 66 - Smart Sorting: Unread tickets show up first—prioritizes what matters! 67 - Instant Notifications: Real-time updates without refreshing—smooth as butter! 68 - Bulk Operations: Enhanced bulk actions for quick ticket management. Saves time! 62 69 63 70 **Categories & Organization** 64 * **Unlimited Categories**: Organize tickets with custom categories and descriptions 65 * **Priority Levels**: Four priority levels (Low, Medium, High, Urgent) with visual indicators 66 * **Search & Filtering**: Advanced search across all ticket fields with multiple filter options 67 * **Bulk Operations**: Manage multiple tickets simultaneously 71 - Unlimited Categories: Organize tickets with custom categories and descriptions. Go wild! 72 - Priority Levels: Four levels (Low, Medium, High, Urgent) with visual indicators. Easy to spot! 73 - Search & Filtering: Advanced search across all fields with multiple filter options. Find anything! 74 - Bulk Operations: Manage multiple tickets at once—efficiency boost! 68 75 69 76 **WooCommerce Integration** 70 * **Order History**: Built-in order lookup for WooCommerce stores 71 * **Customer Context**: Access customer order information directly from tickets 72 * **Order-based Duplicate Detection**: Automatically link tickets to existing order-related conversations 77 - Order History: Built-in order lookup for WooCommerce stores. Handy! 78 - Customer Context: Access order info directly from tickets—context is king! 79 - Order-based Duplicate Detection: Links tickets to existing order conversations automatically. Clever, huh? 73 80 74 81 **Reporting & Analytics** 75 * **Performance Metrics**: Comprehensive reporting on ticket volume, response times, and agent performance 76 * **Visual Charts**: Interactive charts showing ticket trends, priority distribution, and monthly statistics 77 * **Recent Activity**: Real-time feed of all support activities across your team 82 - Performance Metrics: Reports on ticket volume, response times, and agent performance. Data nerd approved! 83 - Visual Charts: Interactive charts for ticket trends, priority distribution, and monthly stats. Pretty cool! 84 - Recent Activity: Real-time feed of all support activities across your team. Stay in the loop! 78 85 79 86 **Developer & Advanced Features** 80 * **Template Override System**: Customize any frontend template by copying to your theme 81 * **Shortcode System**: Flexible shortcodes with customizable attributes (`[nexlifydesk_ticket_form]` and `[nexlifydesk_ticket_list]`) 82 * **Data Management**: Configurable data retention with optional purge functionality 83 * **Rate Limiting**: Built-in protection against spam and abuse 84 * **Caching System**: Optimized performance with intelligent cache management 87 - Template Override System: Customize frontend templates by copying to your theme. I made it developer-friendly! 88 - Shortcode System: Flexible shortcodes like `[nexlifydesk_ticket_form]` and `[nexlifydesk_ticket_list]` with customizable attributes. 89 - Data Management: Configurable retention with optional purge functionality. Your data, your rules! 90 - Rate Limiting: Built-in protection against spam and abuse. Safety first! 91 - Caching System: Optimized performance with smart cache management. Fast and reliable! 85 92 86 93 == Duplicate Ticket Detection == 87 94 88 NexlifyDesk includes a sophisticated three-layer duplicate detection system to maintain clean, organized support queues: 89 90 **1. Exact Subject Matching** 91 - Detects identical subjects from the same user within the last 30 days 92 - Automatically adds new messages as replies to the existing conversation 93 - Prevents ticket fragmentation for ongoing issues 94 95 **2. Order Number Pattern Recognition** 96 - Intelligently recognizes order/invoice numbers in subjects and messages 97 - Patterns include: "Order #12345", "Invoice ID: 67890", "#ABC123", etc. 98 - Links all order-related communications to a single ticket thread 99 100 **3. Content Similarity Analysis** 101 - Advanced keyword comparison between new tickets and recent submissions from the same user 102 - Configurable similarity threshold (default: 80%) for fine-tuned control 103 - Smart filtering of common stop words for accurate matching 95 I’ve built a slick three-layer system to keep your support queues tidy: 96 97 - **Exact Subject Matching**: Spots identical subjects from the same user in the last 30 days and adds new messages as replies. No fragmentation! 98 - **Order Number Pattern Recognition**: Recognizes order/invoice numbers (like "Order #12345" or "#ABC123") and links all related chats to one thread. Smart! 99 - **Content Similarity Analysis**: Compares keywords between new and recent tickets from the same user, with a configurable 80% similarity threshold. Filters out stop words too! 104 100 105 101 **User Experience** 106 When a duplicate is detected, users receive clear notification that their message has been added to an existing conversation, maintaining context while preventing scattered tickets.102 When a duplicate pops up, users get a clear note that their message joined an existing convo—keeps things contextual! 107 103 108 104 **Administrative Control** 109 - Enable/disable duplicate detection fromNexlifyDesk > Settings110 - Adjust sensitivity threshold to match your supportworkflow111 - View duplicate detectionstats in the reports dashboard105 - Turn duplicate detection on/off in NexlifyDesk > Settings 106 - Tweak the sensitivity threshold to fit your workflow 107 - Check duplicate stats in the reports dashboard 112 108 113 109 == Installation == 114 110 115 1. **Upload the Plugin**: Upload the `nexlifydesk` folder to `/wp-content/plugins/` via FTP, or install directly through WordPress admin by uploading the ZIP file. 116 117 2. **Activate**: Activate the plugin through the 'Plugins' menu in WordPress. 118 119 3. **Initial Configuration**: Navigate to NexlifyDesk > Settings to configure: 120 * Email notification preferences 121 * File upload limits and allowed types 122 * Default ticket priority and category 123 * SLA response time targets 124 * Auto-assignment rules 125 126 4. **Create Frontend Pages**: Set up user-facing pages: 127 * **Ticket Submission Page**: Create a page and add `[nexlifydesk_ticket_form]` 128 * **Ticket History Page**: Create another page and add `[nexlifydesk_ticket_list]` 129 * Link these pages in NexlifyDesk > Settings for proper navigation 130 131 5. **Email Piping Setup** (Optional): Configure email-to-ticket conversion: 132 * Choose your email provider (Custom IMAP/POP3, AWS WorkMail, or Google Workspace) 133 * Configure connection settings and authentication 134 * Set up spam protection and email filtering rules 135 * Choose whether to keep or delete emails from inbox after processing 136 137 6. **Agent Setup** (Optional): Configure your support team: 138 * Create user accounts for support agents 139 * Assign the "NexlifyDesk Agent" role 140 * Define custom agent positions with specific capabilities 141 * Set up auto-assignment rules 111 Here’s how I suggest you get started: 112 113 1. **Upload the Plugin**: Pop the `nexlifydesk` folder into `/wp-content/plugins/` via FTP, or upload the ZIP directly in WordPress admin. 114 2. **Activate**: Turn it on via the 'Plugins' menu in WordPress. 115 3. **Initial Configuration**: Head to NexlifyDesk > Settings to set up: 116 - Email notification prefs 117 - File upload limits and types 118 - Default ticket priority and category 119 - SLA response time targets 120 - Auto-assignment rules 121 4. **Create Frontend Pages**: Set up user pages: 122 - **Ticket Submission Page**: Make a page and add `[nexlifydesk_ticket_form]` 123 - **Ticket History Page**: Add `[nexlifydesk_ticket_list]` to another page 124 - Link them in NexlifyDesk > Settings for navigation 125 5. **Email Piping Setup** (Optional): Configure email-to-ticket conversion: 126 - Pick your provider (Custom IMAP/POP3, AWS WorkMail, or Google Workspace) 127 - Enter connection details and auth 128 - Set spam protection and filtering rules 129 - Decide to keep or delete emails 130 6. **Agent Setup** (Optional): Get your team ready: 131 - Create user accounts for agents 132 - Assign the "NexlifyDesk Agent" role 133 - Define custom positions with capabilities 134 - Set auto-assignment rules 142 135 143 136 == Frequently Asked Questions == 144 137 145 138 = How do I create a support ticket submission form? = 146 147 Create a new WordPress page and add the shortcode `[nexlifydesk_ticket_form]`. You can customize it with optional attributes: 148 - `show_title="no"` - Hides the default form title 149 - The form includes fields for subject, message, category, priority, and file attachments 139 Create a new WordPress page and drop in `[nexlifydesk_ticket_form]`. Tweak it with: 140 - `show_title="no"` to hide the title 141 - Includes fields for subject, message, category, priority, and file attachments 150 142 151 143 = How can customers view their submitted tickets? = 152 153 Create a page with the shortcode `[nexlifydesk_ticket_list]`. Logged-in users will see their tickets, while agents with appropriate permissions will see their assigned tickets. Optional attributes: 154 - `s how_title="no"` - Hides the default page title144 Make a page with `[nexlifydesk_ticket_list]`. Logged-in users see their tickets, agents see assigned ones. Try: 145 - `show_title="no"` to hide the title 146 - `status="open"` to filter by status 155 147 156 148 = Can I customize the email notifications? = 157 158 Yes, completely! Go to NexlifyDesk > Email Templates to customize all notification emails: 159 - **New Ticket**: Sent when a ticket is created 160 - **New Reply**: Sent when someone replies to a ticket 161 - **Status Changed**: Sent when ticket status is updated 162 - **SLA Breach**: Sent when response time targets are missed 163 164 Available placeholders include `{ticket_id}`, `{subject}`, `{user_name}`, `{status}`, `{ticket_url}`, and many more. 149 Yep! Go to NexlifyDesk > Email Templates to tweak: 150 - New Ticket, New Reply, Status Changed, SLA Breach 151 Use placeholders like `{ticket_id}`, `{user_name}`, `{subject}`, and more! 165 152 166 153 = How do I set up support agents? = 167 168 154 **Basic Setup:** 169 1. Go to Users > Add New and create user accounts for your support team170 2. Assign the m the"NexlifyDesk Agent" role155 1. Go to Users > Add New for agent accounts 156 2. Assign the "NexlifyDesk Agent" role 171 157 172 158 **Advanced Setup:** 173 1. Go to NexlifyDesk > Agent Positions to createcustom roles174 2. Define specific capabilities for each position (e.g., "Level 1 Support", "Technical Lead")175 3. Assign agents to positions via their user profiles176 4. Configure auto-assignment rulesin Settings159 1. Visit NexlifyDesk > Agent Positions for custom roles 160 2. Set capabilities (e.g., "Level 1 Support") 161 3. Assign agents via their profiles 162 4. Configure auto-assignment in Settings 177 163 178 164 = What file types can be attached to tickets? = 179 180 By default: JPG, PNG, PDF, and common document types. You can customize: 181 - **Allowed file extensions**: Modify the list in NexlifyDesk > Settings 182 - **Maximum file size**: Set size limits per attachment 183 - **Security**: All uploads are validated and stored securely 165 Default: JPG, PNG, PDF, and common docs. Customize in NexlifyDesk > Settings: 166 - Allowed extensions 167 - Max file size 168 - Security validation 184 169 185 170 = How does the SLA monitoring work? = 186 187 Set your target response time in NexlifyDesk > Settings (in hours). The system: 188 - Automatically tracks when tickets approach or exceed SLA targets 189 - Sends breach notifications to administrators and assigned agents 190 - Displays SLA status in the admin dashboard 191 - Includes SLA metrics in performance reports 171 Set your response time in NexlifyDesk > Settings (in hours). It: 172 - Tracks when tickets hit or miss SLA targets 173 - Sends breach alerts to admins and agents 174 - Shows SLA status in the dashboard 175 - Includes metrics in reports 192 176 193 177 = Can I integrate with WooCommerce? = 194 195 Yes! NexlifyDesk includes built-in WooCommerce integration: 196 - **Order History page**: Look up customer orders directly from the admin 197 - **Order-based duplicate detection**: Links tickets mentioning order numbers 198 - **Customer context**: View order information when handling support requests 178 Absolutely! Built-in integration: 179 - Order History page for lookups 180 - Order-based duplicate detection 181 - Customer context in tickets 199 182 200 183 = How do I set up email piping? = 201 202 Email piping converts incoming emails into support tickets automatically. Setup varies by provider: 184 Turns emails into tickets. Setup varies: 203 185 204 186 **Custom IMAP/POP3:** 205 187 1. Go to NexlifyDesk > Settings > Email Piping 206 2. Select "Custom IMAP/POP3" as your provider207 3. Enter your mailserver details (host, port, username, password)208 4. Configure spam protection and email filtering settings209 5. Choose whether to delete emails from inbox after processing188 2. Pick "Custom IMAP/POP3" 189 3. Enter server details (host, port, username, password) 190 4. Set spam and filtering rules 191 5. Choose to delete emails or not 210 192 211 193 **AWS WorkMail:** 212 1. En sure your site has SSL enabled (required for AWS)213 2. Select "AWS WorkMail" as your provider214 3. Enter your AWS region, organization ID, and emailcredentials215 4. Optional ly configure AWS SES for enhanced email sending194 1. Enable SSL on your site 195 2. Pick "AWS WorkMail" 196 3. Enter region, org ID, and credentials 197 4. Optional SES setup 216 198 217 199 **Google Workspace/Gmail:** 218 1. Set up Google OAuth credentials in yourGoogle Cloud Console219 2. Select "Google Workspace" as your provider220 3. Complete the OAuth authentication process221 4. Configure email processing preferences200 1. Set up OAuth in Google Cloud Console 201 2. Pick "Google Workspace" 202 3. Authenticate via OAuth 203 4. Configure processing prefs 222 204 223 205 = How does automatic ticket assignment work? = 224 225 The smart assignment system: 226 1. **Finds available agents**: Checks users with the NexlifyDesk Agent role 227 2. **Balances workload**: Assigns to the agent with the fewest open tickets 228 3. **Fallback options**: Can assign to administrators if no agents are available 229 4. **Handles changes**: Automatically reassigns orphaned tickets when agents are removed 206 My smart system: 207 1. Finds available agents 208 2. Balances workload with fewest open tickets 209 3. Falls back to admins if needed 210 4. Reassigns orphaned tickets 230 211 231 212 = What happens to closed tickets? = 232 233 - **Manual closure**: Agents can close tickets at any time 234 - **Automatic closure**: Resolved tickets automatically close after 48 hours of inactivity 235 - **Reopening**: Closed tickets can be reopened by administrators 236 - **Customer interaction**: Customers cannot reply to closed tickets and are prompted to create new ones 213 - Agents can close manually 214 - Resolved tickets auto-close after 48 hours inactivity 215 - Admins can reopen 216 - Customers can’t reply to closed tickets—prompts new ones 237 217 238 218 = Is my data safe when uninstalling? = 239 240 By default, YES! NexlifyDesk preserves all data (tickets, replies, attachments, customer information) even after plugin deletion. You can change this behavior in NexlifyDesk > Settings if you prefer to remove all data during uninstall. 219 By default, YES! Keeps all data (tickets, attachments, etc.) unless you change it in Settings to remove everything. Backup first! 241 220 242 221 = How do internal notes work? = 243 244 Internal notes are private messages between support team members: 245 - Only visible to agents and administrators 246 - Never sent to customers via email 247 - Perfect for sharing context, escalation notes, or internal updates 248 - Added via the "Add Internal Note" tab in the admin ticket view 222 Private agent chats: 223 - Only for team, not customers 224 - Great for context or escalation 225 - Add via "Add Internal Note" in admin 249 226 250 227 = Can I customize the appearance? = 251 252 Yes, several ways: 253 - **CSS Styling**: Override the plugin's CSS in your theme 254 - **Template System**: Copy template files to your theme for structural changes 255 - **Settings Panel**: Customize colors, labels, and behavior options 256 - **Email Templates**: Full control over all notification email content and styling 228 Oh yes! 229 - CSS styling in your theme 230 - Template overrides 231 - Color and label tweaks in Settings 232 - Full email template control 257 233 258 234 == Screenshots == 259 235 260 1. **Frontend Ticket Submission Form**: Clean, professional form for customers to submit support requests with file attachments and priority selection. 261 262 2. **Customer Ticket Dashboard**: User-friendly interface showing ticket history, status, and progress tracking. 263 264 3. **Frontend Ticket Conversation**: Detailed ticket view with threaded conversation, attachments, and reply functionality. 265 266 4. **Admin Dashboard**: Comprehensive ticket management interface with real-time statistics, filtering, and bulk actions. 267 268 5. **Admin Ticket Details**: Professional single-ticket view with sidebar controls, internal notes, and conversation history. 269 270 6. **Category Management**: Easy-to-use interface for organizing tickets with custom categories and descriptions. 271 272 7. **Comprehensive Settings**: Extensive configuration options for email notifications, file uploads, SLA targets, and automation rules. 273 274 8. **Agent Positions & Permissions**: Granular control system for defining agent roles and capabilities. 275 276 9. **Email Template Editor**: Visual editor for customizing all notification emails with dynamic placeholders. 277 278 10. **Reports & Analytics**: Professional reporting dashboard with charts, metrics, and performance insights. 236 1. Frontend Ticket Submission Form: Clean form for customers with attachments and priority. 237 2. Customer Ticket Dashboard: Easy interface for ticket history. 238 3. Frontend Ticket Conversation: Threaded view with attachments. 239 4. Admin Dashboard: Ticket management with stats. 240 5. Admin Ticket Details: Single-ticket view with notes. 241 6. Category Management: Organize with custom categories. 242 7. Comprehensive Settings: Tons of config options. 243 8. Agent Positions & Permissions: Granular role control. 244 9. Email Template Editor: Customize notifications. 245 10. Reports & Analytics: Charts and metrics galore. 279 246 280 247 == Usage == … … 282 249 === Shortcodes === 283 250 284 **`[nexlifydesk_ticket_form]`** - Displays the ticket submissionform285 * `show_title="no"` - Hides the default "Submit a Ticket"title286 * `category="5"` - Pre-select a specific category ID 287 * `priority="high"` - Pre-select priority level 288 289 **`[nexlifydesk_ticket_list]`** - Displays user's ticket history290 * `show_title="no"` - Hides the defaulttitle291 * `status="open"` - Filter by specificstatus292 * `limit="10"` - Limit number of tickets displayed 251 **`[nexlifydesk_ticket_form]`** - Shows the ticket form 252 - `show_title="no"` - Hides title 253 - `category="5"` - Pre-select category 254 - `priority="high"` - Set default priority 255 256 **`[nexlifydesk_ticket_list]`** - Shows ticket history 257 - `show_title="no"` - Hides title 258 - `status="open"` - Filter by status 259 - `limit="10"` - Limit tickets 293 260 294 261 === Admin Menu Structure === 295 262 296 263 **NexlifyDesk** (Main Menu) 297 * **All Tickets**: Complete ticket management with advanced filtering and search 298 * **Categories**: Create and organize ticket categories with descriptions299 * **Settings**: Configure all plugin options, automation rules, and integrations300 * **Reports**: Performance analytics, charts, and team statistics 301 * **Agent Positions**: Define custom roles and assign capabilities to team members 302 * **Order History**: WooCommerce order lookup and customer information (requires WooCommerce) 303 * **Email Templates**: Customize all automated email notifications304 * **Support**: Contact NexlifyLabs for assistance and feature requests 264 - All Tickets: Full management with filters 265 - Categories: Custom ticket categories 266 - Settings: All config options 267 - Reports: Analytics and charts 268 - Agent Positions: Role and capability setup 269 - Order History: WooCommerce lookups 270 - Email Templates: Notification tweaks 271 - Support: Get help from me! 305 272 306 273 === Ticket Statuses === 307 274 308 The system uses five distinct statuses for comprehensive workflow management: 309 310 * **Open**: New tickets awaiting initial response 311 * **In Progress**: Actively being worked on by an agent 312 * **Pending**: Waiting for customer response or external action 313 * **Resolved**: Issue solved, awaiting customer confirmation 314 * **Closed**: Completed tickets (auto-closed after 48 hours resolved, or manually closed) 275 Five statuses for smooth workflows: 276 - Open: New tickets 277 - In Progress: Being worked on 278 - Pending: Waiting on customer 279 - Resolved: Solved, awaiting confirmation 280 - Closed: Done (auto or manual) 315 281 316 282 === Agent Capabilities === 317 283 318 Create custom agent positions with these granular permissions: 319 320 * **View All Tickets**: Access to organization-wide tickets vs. only assigned ones 321 * **Assign Tickets**: Ability to assign tickets to other agents 322 * **Manage Categories**: Create, edit, and organize ticket categories 323 * **View Reports**: Access to analytics and performance reporting 284 Custom roles with: 285 - View All Tickets: Org-wide access 286 - Assign Tickets: Delegate to others 287 - Manage Categories: Organize tickets 288 - View Reports: See analytics 324 289 325 290 == Customization == 326 291 327 NexlifyDesk offers extensive customization options for businesses of all sizes: 292 Lots of ways to make it yours! 328 293 329 294 **Settings Panel Configuration** 330 * **Email Notifications**: Control when and how notifications are sent 331 * **Default Values**: Set default priority, category, and assignment rules 332 * **File Upload Controls**: Manage allowed file types, sizes, and security settings 333 * **SLA Management**: Configure response time targets and breach notifications 334 * **Automation Rules**: Set up auto-assignment, duplicate detection, and closure policies 335 336 **Email Template Customization** 337 Complete control over all automated emails with a rich set of placeholders: 338 * Dynamic content insertion with `{ticket_id}`, `{user_name}`, `{subject}`, etc. 339 * HTML email support with visual preview 340 * Separate templates for different notification types 341 * Multi-language support with translation files 295 - Email Notifications: Control timing and delivery 296 - Default Values: Set priority, category, etc. 297 - File Upload Controls: Manage types and sizes 298 - SLA Management: Set response targets 299 - Automation Rules: Auto-assign, duplicates, closures 300 301 **Email Template Customization** 302 - Dynamic placeholders (e.g., `{ticket_id}`) 303 - HTML support with preview 304 - Separate templates per notification 305 - Multi-language ready 342 306 343 307 **Visual Customization** 344 * **CSS Override**: Use your theme's CSS to match your brand 345 * **Template System**: Copy plugin templates to your theme for structural changes 346 * **Responsive Design**: Built-in mobile optimization with customizable breakpoints308 - CSS override in your theme 309 - Template system for structural changes 310 - Responsive design tweaks 347 311 348 312 **Advanced Integration** 349 * **WooCommerce**: Automatic order context and customer history 350 * **Multisite Support**: Works seamlessly across WordPress networks 351 * **Developer Hooks**: Extensive action and filter hooks for custom functionality 352 * **REST API Ready**: Structured for future API integration 313 - WooCommerce support 314 - Multisite ready 315 - Developer hooks 316 - REST API future-proof 353 317 354 318 == Performance & Security == 355 319 356 320 **Optimized Performance** 357 * Intelligent caching system reduces database queries 358 * AJAX-powered interface for smooth user experience 359 * Optimized database schema with proper indexing 360 * Background processing for email notifications 321 - Smart caching 322 - AJAX interface 323 - Optimized database 324 - Background email processing 361 325 362 326 **Security Features** 363 * Nonce verification for all forms and AJAX requests 364 * Proper data sanitization and validation365 * File upload security with type and size validation 366 * Rate limiting to prevent spam and abuse 367 * Capability-based access control throughout 327 - Nonce verification 328 - Data sanitization 329 - File upload security 330 - Rate limiting 331 - Capability-based access 368 332 369 333 **Data Management** 370 * Configurable data retention policies 371 * Optional data purging for old tickets 372 * Database maintenance tools for administrators373 * Full export capabilities for data portability 334 - Configurable retention 335 - Optional purging 336 - Database tools 337 - Full export options 374 338 375 339 == Changelog == 376 340 341 = 1.0.2 = 342 - Fixed email delivery with SMTP plugins (RFC 5322 compliance). Update now if you use SMTP! 343 344 = 1.0.1 = 345 - Added email piping (IMAP/POP3, AWS, Google), better duplicate detection, real-time ticket list, and spam protection. Big update! 346 377 347 = 1.0.0 = 378 * **Initial Release**: Complete support ticketing system with comprehensive feature set 379 * **Core Features**: Ticket submission, management, replies, and status tracking 380 * **Agent System**: Role-based access control with custom agent positions 381 * **Email System**: Fully customizable email templates with dynamic placeholders 382 * **SLA Monitoring**: Automatic response time tracking and breach notifications 383 * **Automation**: Auto-assignment, auto-closure, and workflow management 384 * **Security**: Comprehensive security features with rate limiting and validation 385 * **Integration**: WooCommerce order history and customer lookup 386 * **Reporting**: Analytics dashboard with performance metrics and charts 387 * **Internationalization**: Translation-ready with multiple language packs included 388 * **Internal Notes feature**: Private agent-to-agent communication within tickets, invisible to customers 389 * **Duplicate Ticket Detection**: Advanced duplicate ticket detection with three-layer matching system 390 348 - Initial release with full ticketing, agent management, internal notes, WooCommerce, SLA, duplicate detection, emails, roles, categories, files, and shortcodes! 391 349 392 350 == Upgrade Notice == 393 351 352 = 1.0.2 = 353 Critical fix for email issues with SMTP plugins. Update ASAP if you’re using one! 354 394 355 = 1.0.1 = 395 Major update with email piping support! Convert emails to tickets automatically with support for Custom IMAP/POP3, AWS WorkMail, and Google Workspace. Enhanced duplicate detection, real-time ticket list with read/unread status, and advanced spam protection. Recommended for all users.356 Major update with email piping and enhancements. Highly recommended! 396 357 397 358 = 1.0.0 = 398 Initial release of NexlifyDesk. No upgrade steps necessary for new installations. 399 400 == Changelog == 401 402 = 1.0.1 = 403 **Major Features:** 404 * Added Email Piping support with multiple providers (Custom IMAP/POP3, AWS WorkMail, Google Workspace/Gmail) 405 * Enhanced duplicate ticket detection with improved accuracy and performance 406 * New real-time ticket list interface with read/unread status indicators 407 * Advanced spam protection with rate limiting and email blocking capabilities 408 409 **Email Piping Features:** 410 * Support for Custom IMAP/POP3 servers with SSL/TLS encryption 411 * AWS WorkMail integration with SSL requirement and SES support 412 * Google Workspace/Gmail integration with OAuth authentication 413 * Configurable option to keep or delete emails from inbox after processing 414 * Intelligent email thread detection and customer detail extraction 415 * Comprehensive spam filtering with customizable rules 416 417 **Enhanced Admin Experience:** 418 * Real-time ticket list updates without page refresh 419 * Smart sorting with unread tickets prioritized first 420 * Improved bulk operations for efficient ticket management 421 * Enhanced ticket grid with performance optimizations 422 423 **Security & Performance:** 424 * Built-in rate limiting to prevent spam and abuse 425 * Advanced email validation and sanitization 426 * Optimized database queries with proper caching 427 * Enhanced SSL detection for secure email processing 428 429 **Bug Fixes:** 430 * Improved WordPress coding standards compliance 431 * Fixed database query optimizations 432 * Enhanced error handling and logging 433 * Better mobile responsive design 434 435 = 1.0.0 = 436 * Initial release 437 * Core ticketing system with agent management 438 * Internal notes and professional communication tools 439 * WooCommerce integration 440 * SLA monitoring and reporting 441 * Duplicate detection system 442 * Email notification system 443 * Agent roles and permissions 444 * Categories and priority management 445 * File attachment support 446 * Shortcode system for frontend integration 359 First release—no upgrade needed. 447 360 448 361 == Support & Documentation == 449 362 450 363 **Getting Help** 451 * **Email Support**: [email protected]452 * **Website**: https://nexlifylabs.com453 * **Documentation**: Comprehensive guides available on our website454 * **Community**: WordPress.org supportforums364 - Email: [email protected] 365 - Website: https://nexlifylabs.com 366 - Docs: Full guides on the site 367 - Community: WordPress.org forums 455 368 456 369 **Premium Support** 457 Upgrade to NexlifyDesk Pro for priority email support, advanced features, and dedicated account management. 370 Go Pro for priority help and extra features! 458 371 459 372 **Feature Requests** 460 We actively develop NexlifyDesk based on user feedback. Submit feature requests through oursupport channels.373 I love feedback! Send ideas via support channels. 461 374 462 375 == Privacy & Data Protection == 463 376 464 377 **Data Storage** 465 * All ticket data is stored in your WordPress database 466 * No information is transmitted to external servers467 * Complete control over your customer data 378 - Stored in your WordPress DB 379 - No external servers 380 - Full control 468 381 469 382 **Email Handling** 470 * Notifications sent through your site's configured mail system 471 * No third-party email services required 472 * Full compliance with privacy regulations 383 - Uses your mail system 384 - No third-party services 385 - Privacy-compliant 473 386 474 387 **Data Portability** 475 * Built-in export capabilities for all ticketdata476 * Standard WordPress data formats for easy migration 477 * GDPR-compliant data handling and deletion options 388 - Export all data 389 - WordPress formats 390 - GDPR-ready 478 391 479 392 **Security Measures** 480 * Industry-standard encryption for sensitive data 481 * Regular security audits and updates482 * WordPress security best practices throughout 483 484 For complete privacy policy details, visit: https://nexlifylabs.com/privacy-policy 393 - Encryption 394 - Regular audits 395 - Best practices 396 397 See [Privacy Policy](https://nexlifylabs.com/privacy-policy) for details. 485 398 486 399 == Uninstall Process == 487 400 488 401 **Data Retention (Default)** 489 By default, NexlifyDesk preserves all your valuable support data when uninstalled: 490 * All tickets and customer conversations 491 * Agent responses and internal notes 492 * File attachments and customer data 493 * Categories and configuration settings 494 * Performance analytics and reports 402 - Keeps all data (tickets, attachments, etc.) on uninstall—your history stays safe! 495 403 496 404 **Complete Removal (Optional)** 497 To permanently delete all plugin data during uninstall:498 405 1. Go to NexlifyDesk > Settings 499 2. Uncheck "Keep all tickets and data when plugin is uninstalled" 500 3. Save settings before uninstalling 501 502 **Warning**: Complete removal permanently deletes ALL support history, customer data, and configurations. This action cannot be undone. Always backup your database before proceeding. 503 504 **What Gets Removed During Complete Uninstall** 505 * All support tickets and conversations 506 * Customer replies and agent responses 507 * File attachments and uploaded documents 508 * Ticket categories and custom settings 509 * Agent positions and permission configurations 510 * Email templates and notification settings 511 * All analytics data and performance reports 406 2. Uncheck "Keep all tickets and data" 407 3. Save and uninstall 408 409 **Warning**: Deletes EVERYTHING—backup first!
Note: See TracChangeset
for help on using the changeset viewer.