Version Description
Download this release
Release Info
Developer | Icegram |
Plugin | Email Subscribers & Newsletters |
Version | 4.4.5 |
Comparing to | |
See all releases |
Code changes from version 4.4.4 to 4.4.5
- email-subscribers.php +3 -3
- lite/admin/css/email-subscribers-admin.css +5 -1
- lite/admin/dist/main.css +1 -1
- lite/admin/images/es-captcha-2.png +0 -0
- lite/admin/images/es-smtp-label.png +0 -0
- lite/admin/images/smtp.png +0 -0
- lite/admin/js/email-subscribers-admin.js +1 -1
- lite/includes/class-email-subscribers.php +1 -1
- lite/includes/class-es-common.php +37 -3
- lite/includes/classes/class-es-admin-settings.php +44 -29
- lite/includes/classes/class-es-contact-background-process.php +135 -50
- lite/includes/classes/class-es-contacts-table.php +11 -4
- lite/includes/classes/class-es-export-subscribers.php +81 -67
- lite/includes/classes/class-es-forms-table.php +9 -1
- lite/includes/classes/class-es-ig-redirect.php +5 -3
- lite/includes/classes/class-es-import-subscribers.php +87 -78
- lite/includes/classes/class-es-lists-table.php +54 -46
- lite/includes/classes/class-es-post-notifications.php +9 -1
- lite/includes/feedback/class-ig-feedback.php +4 -4
- lite/includes/feedback/class-ig-tracker.php +58 -4
- lite/includes/notices/views/ig-es-offer.php +1 -4
- lite/includes/pro-features.php +188 -21
- lite/includes/workflows/admin/views/meta-box-trigger.php +33 -30
- lite/includes/workflows/class-es-workflows-table.php +19 -20
- lite/includes/workflows/db/class-es-db-workflows.php +9 -9
- lite/includes/workflows/triggers/class-es-trigger-user-deleted.php +1 -1
- lite/includes/workflows/triggers/class-es-trigger-user-registered.php +1 -1
- lite/includes/workflows/triggers/class-es-trigger-user-updated.php +1 -1
- readme.txt +11 -1
email-subscribers.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Email Subscribers & Newsletters
|
4 |
* Plugin URI: https://www.icegram.com/
|
5 |
* Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
|
6 |
-
* Version: 4.4.
|
7 |
* Author: Icegram
|
8 |
* Author URI: https://www.icegram.com/
|
9 |
* Requires at least: 3.9
|
@@ -67,7 +67,7 @@ if ( ! version_compare( PHP_VERSION, IG_ES_MIN_PHP_VER, '>=' ) ) {
|
|
67 |
* @since 4.3.0
|
68 |
*/
|
69 |
if ( ! defined( 'IG_ES_FEEDBACK_TRACKER_VERSION' ) ) {
|
70 |
-
define( 'IG_ES_FEEDBACK_TRACKER_VERSION', '1.2.
|
71 |
}
|
72 |
|
73 |
|
@@ -156,7 +156,7 @@ if ( $is_premium ) {
|
|
156 |
/* ***************************** Initial Compatibility Work (End) ******************* */
|
157 |
|
158 |
if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
|
159 |
-
define( 'ES_PLUGIN_VERSION', '4.4.
|
160 |
}
|
161 |
|
162 |
// Plugin Folder Path.
|
3 |
* Plugin Name: Email Subscribers & Newsletters
|
4 |
* Plugin URI: https://www.icegram.com/
|
5 |
* Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
|
6 |
+
* Version: 4.4.5
|
7 |
* Author: Icegram
|
8 |
* Author URI: https://www.icegram.com/
|
9 |
* Requires at least: 3.9
|
67 |
* @since 4.3.0
|
68 |
*/
|
69 |
if ( ! defined( 'IG_ES_FEEDBACK_TRACKER_VERSION' ) ) {
|
70 |
+
define( 'IG_ES_FEEDBACK_TRACKER_VERSION', '1.2.2' );
|
71 |
}
|
72 |
|
73 |
|
156 |
/* ***************************** Initial Compatibility Work (End) ******************* */
|
157 |
|
158 |
if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
|
159 |
+
define( 'ES_PLUGIN_VERSION', '4.4.5' );
|
160 |
}
|
161 |
|
162 |
// Plugin Folder Path.
|
lite/admin/css/email-subscribers-admin.css
CHANGED
@@ -3,6 +3,10 @@
|
|
3 |
color: #FFFFFF;
|
4 |
}
|
5 |
|
|
|
|
|
|
|
|
|
6 |
#email_tabs_form div#es-settings-tabs {
|
7 |
margin-top: 20px;
|
8 |
padding: 0;
|
@@ -1753,4 +1757,4 @@ body.email-subscribers_page_es_workflows #post-body .postbox .inside {
|
|
1753 |
li.menu-top div.wp-menu-image img {
|
1754 |
border-style: none !important;
|
1755 |
display: inline;
|
1756 |
-
}
|
3 |
color: #FFFFFF;
|
4 |
}
|
5 |
|
6 |
+
a:focus{
|
7 |
+
box-shadow: none;
|
8 |
+
}
|
9 |
+
|
10 |
#email_tabs_form div#es-settings-tabs {
|
11 |
margin-top: 20px;
|
12 |
padding: 0;
|
1757 |
li.menu-top div.wp-menu-image img {
|
1758 |
border-style: none !important;
|
1759 |
display: inline;
|
1760 |
+
}
|
lite/admin/dist/main.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none;padding:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box;border:0 solid #d2d6dc}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a0aec0}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}a{color:#1c64f2}img{border-width:0}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-input::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-input::-moz-placeholder{color:#9fa6b2;opacity:1}.form-input::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-input::placeholder{color:#9fa6b2;opacity:1}.form-input:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-textarea::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-moz-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::placeholder{color:#9fa6b2;opacity:1}.form-textarea:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-multiselect:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;background-repeat:no-repeat;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem 2.5rem .5rem .75rem;font-size:1rem;line-height:1.5;background-position:right .5rem center;background-size:1.5em 1.5em}.form-select::-ms-expand{color:#9fa6b2;border:none}@media not print{.form-select::-ms-expand{display:none}}@media print and (-ms-high-contrast:active),print and (-ms-high-contrast:none){.form-select{padding-right:.75rem}}.form-select:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.25rem}.form-checkbox:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-checkbox::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-checkbox:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox:checked:focus{border-color:transparent}.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;border-radius:100%;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px}.form-radio:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-radio::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-radio:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-radio:checked:focus{border-color:transparent}.ig-es-primary-button,.ig-es-send-queue-emails{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;border-color:transparent;padding:.5rem 1rem;background-color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:500;color:#fff;background-color:#5850ec;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-title-button,.wp-heading-inline+.page-title-action{font-size:.875rem;border-radius:.375rem;border-width:1px;border-color:#5850ec;line-height:1.25rem;font-weight:500}.wp-heading-inline+.page-title-action{color:#1c64f2;padding:.5rem;margin-left:.5rem;margin-right:.5rem}.ig-es-title-button:hover,.wp-heading-inline+.page-title-action:hover{border-color:#6875f5;background-color:#f4f5f7}.ig-es-primary-button:hover{background-color:#6875f5;color:#fff}.ig-es-primary-button:focus,.ig-es-title-button:focus,.wp-heading-inline+.page-title-action:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.ig-es-imp-button{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;border-radius:.375rem!important;border-width:1px!important;border-color:transparent!important;background-color:#fff!important;font-size:.875rem!important;line-height:1.25rem!important;font-weight:500!important;color:#fff!important;background-color:#0e9f6e!important;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform!important;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;-webkit-transition-duration:.15s!important;transition-duration:.15s!important}.ig-es-imp-button:hover{background-color:#31c48d!important;color:#fff!important}.ig-es-imp-button:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(132,225,188,.45)!important;box-shadow:0 0 0 3px rgba(132,225,188,.45)!important}.ig-es-link-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;border-color:transparent;background-color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:500;color:#fff;background-color:#ff5a1f;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-link-button:hover{background-color:#ff8a4c;color:#fff}.ig-es-link-button:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(253,186,140,.45);box-shadow:0 0 0 3px rgba(253,186,140,.45)}.ig-es-action.js-open .ig-es-action__header{background-color:#5850ec;color:#fff}.form-checkbox{content:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E")}.form-radio{content:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}.form-checkbox:checked,.form-radio:checked{color:#5850ec!important}.form-select{font-size:.875rem!important;border-color:#9fa6b2!important;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")!important}.form-select:focus,input[type=number]:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;border-color:#a4cafe!important}.es-check-toggle:checked~.es-mail-toggle-line{background-color:#5850ec}.es-check-toggle:checked~.es-mail-toggle-dot{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));--transform-translate-x:100%}[type=radio]:checked+.es-mailer-logo{-webkit-transition-property:all;transition-property:all;-webkit-transition-duration:.1s;transition-duration:.1s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));--transform-scale-x:1.1;--transform-scale-y:1.1;-webkit-box-shadow:0 0 3px 3px #5a67d8;box-shadow:0 0 3px 3px #5a67d8}.bg-white{background-color:#fff}.bg-gray-100{background-color:#f4f5f7}.bg-gray-200{background-color:#e5e7eb}.bg-gray-300{background-color:#d2d6dc}.bg-green-100{background-color:#def7ec}.bg-green-600{background-color:#057a55}.bg-indigo-500{background-color:#6875f5}.bg-indigo-600{background-color:#5850ec}.bg-indigo-800{background-color:#42389d}.hover\:bg-gray-50:hover{background-color:#f9fafb}.hover\:bg-gray-100:hover{background-color:#f4f5f7}.hover\:bg-green-500:hover{background-color:#0e9f6e}.hover\:bg-indigo-500:hover{background-color:#6875f5}.focus\:bg-gray-50:focus{background-color:#f9fafb}.focus\:bg-gray-100:focus{background-color:#f4f5f7}.border-collapse{border-collapse:collapse}.border-transparent{border-color:transparent}.border-gray-100{border-color:#f4f5f7}.border-gray-200{border-color:#e5e7eb}.border-gray-300{border-color:#d2d6dc}.border-gray-400{border-color:#9fa6b2}.border-indigo-600{border-color:#5850ec}.hover\:border-gray-200:hover{border-color:#e5e7eb}.hover\:border-indigo-500:hover{border-color:#6875f5}.focus\:border-blue-300:focus{border-color:#a4cafe}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-0{border-width:0}.border-2{border-width:2px}.border{border-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.cursor-pointer{cursor:pointer}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.grid{display:grid}.table{display:table}.table-cell{display:table-cell}.hidden{display:none}.flex-row{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-col,.flex-row{-webkit-box-direction:normal}.flex-col{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.h-0{height:0}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-10{height:2.5rem}.h-15{height:3.75rem}.h-20{height:5rem}.h-48{height:12rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-none{line-height:1}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.list-disc{list-style-type:disc}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-0{margin-top:0}.mb-0{margin-bottom:0}.mt-1{margin-top:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mr-10{margin-right:2.5rem}.mt-12{margin-top:3rem}.ml-12{margin-left:3rem}.ml-16{margin-left:4rem}.mr-1\.5{margin-right:.375rem}.-mr-1{margin-right:-.25rem}.max-h-full{max-height:100%}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-full{min-width:100%}.opacity-0{opacity:0}.opacity-100{opacity:1}.focus\:outline-none:focus{outline:0}.overflow-hidden{overflow:hidden}.p-2{padding:.5rem}.p-3{padding:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.pl-10{padding-left:2.5rem}.pr-12{padding-right:3rem}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-y-0{top:0;bottom:0}.right-0{right:0}.left-0{left:0}.shadow-xs{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.05);box-shadow:0 0 0 1px rgba(0,0,0,.05)}.shadow-sm{-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.shadow{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-md{-webkit-box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-lg{-webkit-box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.shadow-inner{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.focus\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45)}.focus\:shadow-outline-blue:focus{-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.text-left{text-align:left}.text-center{text-align:center}.text-white{color:#fff}.text-black{color:#000}.text-gray-400{color:#9fa6b2}.text-gray-500{color:#6b7280}.text-gray-600{color:#4b5563}.text-gray-700{color:#374151}.text-gray-800{color:#252f3f}.text-gray-900{color:#161e2e}.text-red-600{color:#e02424}.text-orange-400{color:#ff8a4c}.text-orange-500{color:#ff5a1f}.text-yellow-400{color:#e3a008}.text-green-400{color:#31c48d}.text-green-600{color:#057a55}.text-green-800{color:#03543f}.text-blue-500{color:#3f83f8}.text-blue-700{color:#1a56db}.text-indigo-100{color:#e5edff}.text-indigo-400{color:#8da2fb}.text-indigo-500{color:#6875f5}.text-indigo-600{color:#5850ec}.hover\:text-white:hover{color:#fff}.hover\:text-gray-800:hover{color:#252f3f}.hover\:text-gray-900:hover{color:#161e2e}.hover\:text-blue-700:hover{color:#1a56db}.focus\:text-white:focus{color:#fff}.active\:text-gray-900:active,.focus\:text-gray-900:focus{color:#161e2e}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.italic{font-style:italic}.uppercase{text-transform:uppercase}.underline{text-decoration:underline}.no-underline{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tracking-wider{letter-spacing:.05em}.align-middle{vertical-align:middle}.whitespace-no-wrap{white-space:nowrap}.w-0{width:0}.w-4{width:1rem}.w-5{width:1.25rem}.w-10{width:2.5rem}.w-40{width:10rem}.w-56{width:14rem}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-3\/12{width:25%}.w-4\/12{width:33.333333%}.w-9\/12{width:75%}.w-11\/12{width:91.666667%}.w-full{width:100%}.z-20{z-index:20}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.scale-100{--transform-scale-x:1;--transform-scale-y:1}.transition-all{-webkit-transition-property:all;transition-property:all}.transition{-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform}.ease-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{-webkit-transition-duration:75ms;transition-duration:75ms}.duration-100{-webkit-transition-duration:.1s;transition-duration:.1s}.duration-150{-webkit-transition-duration:.15s;transition-duration:.15s}.duration-300{-webkit-transition-duration:.3s;transition-duration:.3s}@media (min-width:640px){.sm\:rounded-md{border-radius:.375rem}.sm\:grid{display:grid}.sm\:justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sm\:leading-5{line-height:1.25rem}.sm\:leading-9{line-height:2.25rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-sm{font-size:.875rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.md\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.md\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.md\:justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.md\:justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mt-0{margin-top:0}.md\:ml-4{margin-left:1rem}.md\:py-0{padding-top:0;padding-bottom:0}.md\:pb-2{padding-bottom:.5rem}.md\:pr-4{padding-right:1rem}.md\:pt-6{padding-top:1.5rem}.md\:text-base{font-size:1rem}}@media (min-width:1024px){.lg\:bg-transparent{background-color:transparent}.lg\:border-transparent{border-color:transparent}.lg\:rounded-full{border-radius:9999px}.lg\:block{display:block}.lg\:inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.lg\:grid{display:grid}.lg\:my-0{margin-top:0;margin-bottom:0}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pt-2{padding-top:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:shadow-none{-webkit-box-shadow:none;box-shadow:none}.lg\:text-sm{font-size:.875rem}.lg\:text-lg{font-size:1.125rem}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1280px){.xl\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.xl\:pb-4{padding-bottom:1rem}}
|
1 |
+
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none;padding:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box;border:0 solid #d2d6dc}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a0aec0}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}a{color:#1c64f2}img{border-width:0}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-input::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-input::-moz-placeholder{color:#9fa6b2;opacity:1}.form-input::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-input::placeholder{color:#9fa6b2;opacity:1}.form-input:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-textarea::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-moz-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::placeholder{color:#9fa6b2;opacity:1}.form-textarea:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-multiselect:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;background-repeat:no-repeat;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem 2.5rem .5rem .75rem;font-size:1rem;line-height:1.5;background-position:right .5rem center;background-size:1.5em 1.5em}.form-select::-ms-expand{color:#9fa6b2;border:none}@media not print{.form-select::-ms-expand{display:none}}@media print and (-ms-high-contrast:active),print and (-ms-high-contrast:none){.form-select{padding-right:.75rem}}.form-select:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.25rem}.form-checkbox:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-checkbox::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-checkbox:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox:checked:focus{border-color:transparent}.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;border-radius:100%;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px}.form-radio:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-radio::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-radio:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-radio:checked:focus{border-color:transparent}.ig-es-primary-button,.ig-es-send-queue-emails{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;border-color:transparent;padding:.5rem 1rem;background-color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:500;color:#fff;background-color:#5850ec;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-title-button,.wp-heading-inline+.page-title-action{font-size:.875rem;border-radius:.375rem;border-width:1px;border-color:#5850ec;line-height:1.25rem;font-weight:500}.wp-heading-inline+.page-title-action{color:#1c64f2;padding:.5rem;margin-left:.5rem;margin-right:.5rem}.ig-es-title-button:hover,.wp-heading-inline+.page-title-action:hover{border-color:#6875f5;background-color:#f4f5f7}.ig-es-primary-button:hover{background-color:#6875f5;color:#fff}.ig-es-primary-button:focus,.ig-es-title-button:focus,.wp-heading-inline+.page-title-action:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.ig-es-imp-button{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;border-radius:.375rem!important;border-width:1px!important;border-color:transparent!important;background-color:#fff!important;font-size:.875rem!important;line-height:1.25rem!important;font-weight:500!important;color:#fff!important;background-color:#0e9f6e!important;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform!important;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;-webkit-transition-duration:.15s!important;transition-duration:.15s!important}.ig-es-imp-button:hover{background-color:#31c48d!important;color:#fff!important}.ig-es-imp-button:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(132,225,188,.45)!important;box-shadow:0 0 0 3px rgba(132,225,188,.45)!important}.ig-es-link-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;border-color:transparent;background-color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:500;color:#fff;background-color:#ff5a1f;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-link-button:hover{background-color:#ff8a4c;color:#fff}.ig-es-link-button:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(253,186,140,.45);box-shadow:0 0 0 3px rgba(253,186,140,.45)}.ig-es-action.js-open .ig-es-action__header{background-color:#5850ec;color:#fff}.form-checkbox{content:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E")}.form-radio{content:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}.form-checkbox:checked,.form-radio:checked{color:#5850ec!important}.form-select{font-size:.875rem!important;border-color:#9fa6b2!important;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")!important}.form-select:focus,input[type=number]:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;border-color:#a4cafe!important}.es-check-toggle:checked~.es-mail-toggle-line{background-color:#5850ec}.es-check-toggle:checked~.es-mail-toggle-dot{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));--transform-translate-x:100%}[type=radio]:checked+.es-mailer-logo{-webkit-transition-property:all;transition-property:all;-webkit-transition-duration:.1s;transition-duration:.1s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));--transform-scale-x:1.1;--transform-scale-y:1.1;-webkit-box-shadow:0 0 3px 3px #5a67d8;box-shadow:0 0 3px 3px #5a67d8}.bg-white{background-color:#fff}.bg-gray-100{background-color:#f4f5f7}.bg-gray-200{background-color:#e5e7eb}.bg-gray-300{background-color:#d2d6dc}.bg-green-100{background-color:#def7ec}.bg-green-600{background-color:#057a55}.bg-indigo-500{background-color:#6875f5}.bg-indigo-600{background-color:#5850ec}.bg-indigo-800{background-color:#42389d}.hover\:bg-gray-50:hover{background-color:#f9fafb}.hover\:bg-gray-100:hover{background-color:#f4f5f7}.hover\:bg-green-500:hover{background-color:#0e9f6e}.hover\:bg-indigo-500:hover{background-color:#6875f5}.focus\:bg-gray-50:focus{background-color:#f9fafb}.focus\:bg-gray-100:focus{background-color:#f4f5f7}.border-collapse{border-collapse:collapse}.border-transparent{border-color:transparent}.border-gray-100{border-color:#f4f5f7}.border-gray-200{border-color:#e5e7eb}.border-gray-300{border-color:#d2d6dc}.border-gray-400{border-color:#9fa6b2}.border-indigo-600{border-color:#5850ec}.hover\:border-gray-200:hover{border-color:#e5e7eb}.hover\:border-indigo-500:hover{border-color:#6875f5}.focus\:border-blue-300:focus{border-color:#a4cafe}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-0{border-width:0}.border-2{border-width:2px}.border{border-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.cursor-pointer{cursor:pointer}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.grid{display:grid}.table{display:table}.table-cell{display:table-cell}.hidden{display:none}.flex-row{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-col,.flex-row{-webkit-box-direction:normal}.flex-col{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.h-0{height:0}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-10{height:2.5rem}.h-15{height:3.75rem}.h-20{height:5rem}.h-48{height:12rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-none{line-height:1}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.list-disc{list-style-type:disc}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-0{margin-top:0}.mb-0{margin-bottom:0}.mt-1{margin-top:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mr-10{margin-right:2.5rem}.mt-12{margin-top:3rem}.ml-12{margin-left:3rem}.ml-16{margin-left:4rem}.mr-1\.5{margin-right:.375rem}.-mr-1{margin-right:-.25rem}.max-h-full{max-height:100%}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-full{min-width:100%}.opacity-0{opacity:0}.opacity-100{opacity:1}.focus\:outline-none:focus{outline:0}.overflow-hidden{overflow:hidden}.p-2{padding:.5rem}.p-3{padding:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.pl-10{padding-left:2.5rem}.pr-12{padding-right:3rem}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-y-0{top:0;bottom:0}.right-0{right:0}.left-0{left:0}.shadow-xs{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.05);box-shadow:0 0 0 1px rgba(0,0,0,.05)}.shadow-sm{-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.shadow{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-md{-webkit-box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-lg{-webkit-box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.shadow-inner{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.hover\:shadow-md:hover{-webkit-box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.focus\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45)}.focus\:shadow-outline-blue:focus{-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.focus\:shadow-outline-indigo:focus{-webkit-box-shadow:0 0 0 3px rgba(180,198,252,.45);box-shadow:0 0 0 3px rgba(180,198,252,.45)}.text-left{text-align:left}.text-center{text-align:center}.text-white{color:#fff}.text-black{color:#000}.text-gray-400{color:#9fa6b2}.text-gray-500{color:#6b7280}.text-gray-600{color:#4b5563}.text-gray-700{color:#374151}.text-gray-800{color:#252f3f}.text-gray-900{color:#161e2e}.text-red-600{color:#e02424}.text-orange-400{color:#ff8a4c}.text-orange-500{color:#ff5a1f}.text-yellow-400{color:#e3a008}.text-green-400{color:#31c48d}.text-green-600{color:#057a55}.text-green-800{color:#03543f}.text-blue-500{color:#3f83f8}.text-blue-700{color:#1a56db}.text-indigo-100{color:#e5edff}.text-indigo-400{color:#8da2fb}.text-indigo-500{color:#6875f5}.text-indigo-600{color:#5850ec}.hover\:text-white:hover{color:#fff}.hover\:text-gray-800:hover{color:#252f3f}.hover\:text-gray-900:hover{color:#161e2e}.hover\:text-blue-700:hover{color:#1a56db}.hover\:text-indigo-500:hover{color:#6875f5}.focus\:text-white:focus{color:#fff}.active\:text-gray-900:active,.focus\:text-gray-900:focus{color:#161e2e}.active\:text-indigo-600:active{color:#5850ec}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.italic{font-style:italic}.uppercase{text-transform:uppercase}.underline{text-decoration:underline}.no-underline{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tracking-wider{letter-spacing:.05em}.align-middle{vertical-align:middle}.whitespace-no-wrap{white-space:nowrap}.w-0{width:0}.w-4{width:1rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-40{width:10rem}.w-56{width:14rem}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-3\/12{width:25%}.w-4\/12{width:33.333333%}.w-9\/12{width:75%}.w-11\/12{width:91.666667%}.w-full{width:100%}.z-20{z-index:20}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.scale-100{--transform-scale-x:1;--transform-scale-y:1}.transition-all{-webkit-transition-property:all;transition-property:all}.transition{-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform}.ease-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{-webkit-transition-duration:75ms;transition-duration:75ms}.duration-100{-webkit-transition-duration:.1s;transition-duration:.1s}.duration-150{-webkit-transition-duration:.15s;transition-duration:.15s}.duration-300{-webkit-transition-duration:.3s;transition-duration:.3s}@media (min-width:640px){.sm\:rounded-md{border-radius:.375rem}.sm\:grid{display:grid}.sm\:justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sm\:leading-5{line-height:1.25rem}.sm\:leading-9{line-height:2.25rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-sm{font-size:.875rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.md\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.md\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.md\:justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.md\:justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mt-0{margin-top:0}.md\:ml-4{margin-left:1rem}.md\:py-0{padding-top:0;padding-bottom:0}.md\:pb-2{padding-bottom:.5rem}.md\:pr-4{padding-right:1rem}.md\:pt-6{padding-top:1.5rem}.md\:text-base{font-size:1rem}}@media (min-width:1024px){.lg\:bg-transparent{background-color:transparent}.lg\:border-transparent{border-color:transparent}.lg\:rounded-full{border-radius:9999px}.lg\:block{display:block}.lg\:inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.lg\:grid{display:grid}.lg\:my-0{margin-top:0;margin-bottom:0}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pt-2{padding-top:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:shadow-none{-webkit-box-shadow:none;box-shadow:none}.lg\:text-sm{font-size:.875rem}.lg\:text-lg{font-size:1.125rem}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1280px){.xl\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.xl\:pb-4{padding-bottom:1rem}}
|
lite/admin/images/es-captcha-2.png
DELETED
Binary file
|
lite/admin/images/es-smtp-label.png
DELETED
Binary file
|
lite/admin/images/smtp.png
ADDED
Binary file
|
lite/admin/js/email-subscribers-admin.js
CHANGED
@@ -24,7 +24,7 @@
|
|
24 |
$(this).addClass('text-white').removeClass('text-gray-700').parent('li').addClass('bg-indigo-600').siblings().find('a').addClass('text-gray-700').removeClass('text-white').parent('li').removeClass('bg-indigo-600');
|
25 |
$('.setting-content').hide();
|
26 |
var target = $(this).attr('href');
|
27 |
-
$('.setting-content' + target).
|
28 |
return false;
|
29 |
});
|
30 |
|
24 |
$(this).addClass('text-white').removeClass('text-gray-700').parent('li').addClass('bg-indigo-600').siblings().find('a').addClass('text-gray-700').removeClass('text-white').parent('li').removeClass('bg-indigo-600');
|
25 |
$('.setting-content').hide();
|
26 |
var target = $(this).attr('href');
|
27 |
+
$('.setting-content' + target).show();
|
28 |
return false;
|
29 |
});
|
30 |
|
lite/includes/class-email-subscribers.php
CHANGED
@@ -897,7 +897,7 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
|
|
897 |
* @since 4.4.4
|
898 |
*/
|
899 |
public function is_premium() {
|
900 |
-
return ES()->
|
901 |
}
|
902 |
|
903 |
/**
|
897 |
* @since 4.4.4
|
898 |
*/
|
899 |
public function is_premium() {
|
900 |
+
return ES()->is_starter() || ES()->is_pro();
|
901 |
}
|
902 |
|
903 |
/**
|
lite/includes/class-es-common.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
// Exit if accessed directly
|
4 |
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
exit;
|
6 |
-
}
|
7 |
|
8 |
/**
|
9 |
* Class Email_General.
|
@@ -339,7 +339,8 @@ Class ES_Common {
|
|
339 |
$category_names = array();
|
340 |
}
|
341 |
$checked_selected = ! in_array( 'All', $category_names ) ? "checked='checked'" : '';
|
342 |
-
$category_html = '<tr><td style="padding-top:4px;padding-bottom:4px;padding-right:10px;" ><span class="block ml-6 pr-4 text-sm font-normal text-gray-600 pb-1"><input class="es-note-category-parent form-radio text-indigo-600" type="radio" ' . $checked_selected . ' value="selected_cat" name="es_note_cat_parent">' . __( 'Select Categories',
|
|
|
343 |
foreach ( $categories as $category ) {
|
344 |
|
345 |
if ( in_array( $category->term_id, $category_names ) ) {
|
@@ -351,7 +352,8 @@ Class ES_Common {
|
|
351 |
$category_html .= '<tr class="es-note-child-category"><td style="padding-top:4px;padding-bottom:4px;padding-right:10px;"><span class="block ml-6 pr-4 text-sm font-normal text-gray-600 pb-1"><input type="checkbox" class="form-checkbox" ' . $checked . ' value="' . $category->term_id . '" id="es_note_cat[]" name="es_note_cat[]">' . $category->name . '</td></tr>';
|
352 |
}
|
353 |
$checked_all = in_array( 'All', $category_names ) ? "checked='checked'" : '';
|
354 |
-
$all_html = '<tr><td style="padding-top:4px;padding-bottom:4px;padding-right:10px;"><span class="block ml-6 pr-4 text-sm font-normal text-gray-600 pb-1"><input type="radio" class="form-radio text-indigo-600 es-note-category-parent" ' . $checked_all . ' value="{a}All{a}" name="es_note_cat_parent">' . __( 'All Categories (Also include all categories which will create later)',
|
|
|
355 |
|
356 |
return $all_html . $category_html;
|
357 |
}
|
@@ -1256,4 +1258,36 @@ Class ES_Common {
|
|
1256 |
|
1257 |
}
|
1258 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1259 |
}
|
3 |
// Exit if accessed directly
|
4 |
if ( ! defined( 'ABSPATH' ) ) {
|
5 |
exit;
|
6 |
+
}
|
7 |
|
8 |
/**
|
9 |
* Class Email_General.
|
339 |
$category_names = array();
|
340 |
}
|
341 |
$checked_selected = ! in_array( 'All', $category_names ) ? "checked='checked'" : '';
|
342 |
+
$category_html = '<tr><td style="padding-top:4px;padding-bottom:4px;padding-right:10px;" ><span class="block ml-6 pr-4 text-sm font-normal text-gray-600 pb-1"><input class="es-note-category-parent form-radio text-indigo-600" type="radio" ' . $checked_selected . ' value="selected_cat" name="es_note_cat_parent">' . __( 'Select Categories',
|
343 |
+
'email-subscribers' ) . '</td></tr>';
|
344 |
foreach ( $categories as $category ) {
|
345 |
|
346 |
if ( in_array( $category->term_id, $category_names ) ) {
|
352 |
$category_html .= '<tr class="es-note-child-category"><td style="padding-top:4px;padding-bottom:4px;padding-right:10px;"><span class="block ml-6 pr-4 text-sm font-normal text-gray-600 pb-1"><input type="checkbox" class="form-checkbox" ' . $checked . ' value="' . $category->term_id . '" id="es_note_cat[]" name="es_note_cat[]">' . $category->name . '</td></tr>';
|
353 |
}
|
354 |
$checked_all = in_array( 'All', $category_names ) ? "checked='checked'" : '';
|
355 |
+
$all_html = '<tr><td style="padding-top:4px;padding-bottom:4px;padding-right:10px;"><span class="block ml-6 pr-4 text-sm font-normal text-gray-600 pb-1"><input type="radio" class="form-radio text-indigo-600 es-note-category-parent" ' . $checked_all . ' value="{a}All{a}" name="es_note_cat_parent">' . __( 'All Categories (Also include all categories which will create later)',
|
356 |
+
'email-subscribers' ) . '</td></tr>';
|
357 |
|
358 |
return $all_html . $category_html;
|
359 |
}
|
1258 |
|
1259 |
}
|
1260 |
|
1261 |
+
/**
|
1262 |
+
* Get utm tracking url
|
1263 |
+
*
|
1264 |
+
* @param array $utm_args
|
1265 |
+
*
|
1266 |
+
* @return mixed|string
|
1267 |
+
*
|
1268 |
+
* @since 4.4.5
|
1269 |
+
*/
|
1270 |
+
public static function get_utm_tracking_url( $utm_args = array() ) {
|
1271 |
+
|
1272 |
+
$url = ! empty( $utm_args['url'] ) ? $utm_args['url'] : 'https://icegram.com/email-subscribers-pricing/';
|
1273 |
+
$utm_source = ! empty( $utm_args['utm_source'] ) ? $utm_args['utm_source'] : 'in_app';
|
1274 |
+
$utm_medium = ! empty( $utm_args['utm_medium'] ) ? $utm_args['utm_medium'] : '';
|
1275 |
+
$utm_campaign = ! empty( $utm_args['utm_campaign'] ) ? $utm_args['utm_campaign'] : 'es_upsale';
|
1276 |
+
|
1277 |
+
if ( ! empty( $utm_source ) ) {
|
1278 |
+
$url = add_query_arg( 'utm_source', $utm_source, $url );
|
1279 |
+
}
|
1280 |
+
|
1281 |
+
if ( ! empty( $utm_medium ) ) {
|
1282 |
+
$url = add_query_arg( 'utm_medium', $utm_medium, $url );
|
1283 |
+
}
|
1284 |
+
|
1285 |
+
if ( ! empty( $utm_campaign ) ) {
|
1286 |
+
$url = add_query_arg( 'utm_campaign', $utm_campaign, $url );
|
1287 |
+
}
|
1288 |
+
|
1289 |
+
return $url;
|
1290 |
+
|
1291 |
+
}
|
1292 |
+
|
1293 |
}
|
lite/includes/classes/class-es-admin-settings.php
CHANGED
@@ -46,7 +46,6 @@ class ES_Admin_Settings {
|
|
46 |
$options['ig_es_notify_admin'] = isset( $options['ig_es_notify_admin'] ) ? $options['ig_es_notify_admin'] : 'no';
|
47 |
$options['ig_es_enable_cron_admin_email'] = isset( $options['ig_es_enable_cron_admin_email'] ) ? $options['ig_es_enable_cron_admin_email'] : 'no';
|
48 |
|
49 |
-
|
50 |
$text_fields_to_sanitize = array(
|
51 |
'ig_es_from_name',
|
52 |
'ig_es_admin_emails',
|
@@ -520,7 +519,7 @@ class ES_Admin_Settings {
|
|
520 |
|
521 |
'ig_es_test_send_email' => array(
|
522 |
'type' => 'html',
|
523 |
-
'html' => '<input id="es-test-email" class="mt-3 mb-1 form-input
|
524 |
'placeholder' => '',
|
525 |
'supplemental' => '',
|
526 |
'default' => '',
|
@@ -534,14 +533,13 @@ class ES_Admin_Settings {
|
|
534 |
'type' => 'html',
|
535 |
// 'html' => ES_Admin_Settings::mailers_html(),
|
536 |
'sub_fields' => array(
|
537 |
-
'mailer'
|
538 |
'id' => 'ig_es_mailer_settings[mailer]',
|
539 |
'name' => __( 'Select Mailer', 'email-subscribers' ),
|
540 |
'type' => 'html',
|
541 |
'html' => ES_Admin_Settings::mailers_html(),
|
542 |
'desc' => '',
|
543 |
),
|
544 |
-
|
545 |
'ig_es_pepipost_api_key' => array(
|
546 |
'type' => 'password',
|
547 |
'options' => false,
|
@@ -585,6 +583,7 @@ class ES_Admin_Settings {
|
|
585 |
|
586 |
);
|
587 |
|
|
|
588 |
$security_settings = apply_filters( 'ig_es_registered_security_settings', $security_settings );
|
589 |
|
590 |
$es_settings = array(
|
@@ -634,10 +633,12 @@ class ES_Admin_Settings {
|
|
634 |
$id_key = ! empty( $id_key ) ? $id_key : $uid;
|
635 |
$class = ! empty( $arguments['class'] ) ? $arguments['class'] : '';
|
636 |
$rows = ! empty( $arguments['rows'] ) ? $arguments['rows'] : 12;
|
|
|
|
|
637 |
// Check which type of field we want
|
638 |
switch ( $arguments['type'] ) {
|
639 |
case 'text': // If it is a text field
|
640 |
-
$field_html = sprintf( '<input name="%1$s" id="%2$s" placeholder="%4$s" value="%5$s" %6$s class="form-input h-9 mt-2 mb-1 text-sm border-gray-400 w-3/5
|
641 |
break;
|
642 |
case 'password': // If it is a text field
|
643 |
$field_html = sprintf( '<input name="%1$s" id="%2$s" type="%3$s" placeholder="%4$s" value="%5$s" %6$s class="form-input h-9 mt-2 mb-1 text-sm border-gray-400 w-3/5 %7$s"/>', $uid, $id_key, $type, $placeholder, $value, $readonly, $class );
|
@@ -648,22 +649,27 @@ class ES_Admin_Settings {
|
|
648 |
break;
|
649 |
|
650 |
case 'email':
|
651 |
-
$field_html = sprintf( '<input name="%1$s" id="%2$s" placeholder="%4$s" value="%5$s" class="form-input w-2/3 mt-2 mb-1 h-9 text-sm border-gray-400 w-3/5
|
652 |
break;
|
653 |
|
654 |
case 'textarea':
|
655 |
-
$field_html = sprintf( '<textarea name="%1$s" id="%2$s" placeholder="%3$s" size="100" rows="%6$s" cols="58" class="form-textarea text-sm w-2/3 mt-3 mb-1 border-gray-400 w-3/5
|
656 |
break;
|
657 |
|
658 |
case 'file':
|
659 |
-
$field_html = '<input id="logo_url" name="' . $uid . '" value="' . $value . '" class="form-input w-2/3 mt-2 mb-1 h-9 border-gray-400 text-sm w-3/5' . $class . '"/> <input id="upload_logo_button" type="button" class="button" value="Upload Logo" />';
|
660 |
break;
|
661 |
|
662 |
case 'checkbox' :
|
663 |
|
664 |
$field_html = '<label for="' . $id_key . '" class="mt-4 mb-1 inline-flex items-center cursor-pointer">
|
665 |
-
<span class="relative">
|
666 |
-
|
|
|
|
|
|
|
|
|
|
|
667 |
<span class="es-mail-toggle-line block w-10 h-6 bg-gray-300 rounded-full shadow-inner "></span>
|
668 |
<span class="es-mail-toggle-dot absolute transition-all duration-300 ease-in-out block w-4 h-4 mt-1 ml-1 bg-white rounded-full shadow inset-y-0 left-0 focus-within:shadow-outline"></span>
|
669 |
</span>
|
@@ -677,7 +683,7 @@ class ES_Admin_Settings {
|
|
677 |
$options_markup .= sprintf( '<option value="%s" %s>%s</option>', $key,
|
678 |
selected( $value, $key, false ), $label );
|
679 |
}
|
680 |
-
$field_html = sprintf( '<select name="%1$s" id="%2$s" class="form-select rounded-lg w-2/5 h-9 mt-2 mb-1 border-gray-400
|
681 |
}
|
682 |
break;
|
683 |
|
@@ -692,7 +698,7 @@ class ES_Admin_Settings {
|
|
692 |
//If there is help text
|
693 |
if ( ! empty( $arguments['desc'] ) ) {
|
694 |
$helper = $arguments['desc'];
|
695 |
-
$field_html .= sprintf( '<p class="italic text-xs font-normal text-gray-500 mb-2 leading-snug"> %s</p>', $helper ); // Show it
|
696 |
}
|
697 |
|
698 |
return $field_html;
|
@@ -708,14 +714,17 @@ class ES_Admin_Settings {
|
|
708 |
|
709 |
function render_settings_fields( $fields ) {
|
710 |
|
711 |
-
$html
|
712 |
-
$html
|
713 |
-
$button_html = '';
|
714 |
foreach ( $fields as $key => $field ) {
|
715 |
if ( ! empty( $field['name'] ) ) {
|
716 |
$html .= "<tr class=' ml-4 py-4 border-b border-gray-100'><th scope='row' class='pt-7 ml-6 block pt-3 pb-8 text-left pr-4'><span class='text-sm font-semibold text-gray-600 pb-2'>";
|
717 |
$html .= $field['name'];
|
718 |
|
|
|
|
|
|
|
|
|
719 |
//If there is help text
|
720 |
if ( ! empty( $field['info'] ) ) {
|
721 |
$helper = $field['info'];
|
@@ -731,7 +740,7 @@ class ES_Admin_Settings {
|
|
731 |
$option_key = '';
|
732 |
foreach ( $field['sub_fields'] as $field_key => $sub_field ) {
|
733 |
if ( strpos( $sub_field['id'], '[' ) ) {
|
734 |
-
$parts
|
735 |
if ( $option_key !== $parts[0] ) {
|
736 |
$option_value = get_option( $parts[0] );
|
737 |
$option_key = $parts[0];
|
@@ -755,9 +764,8 @@ class ES_Admin_Settings {
|
|
755 |
$nonce_field = wp_nonce_field( 'update-settings', 'update-settings', true, false );
|
756 |
|
757 |
$html .= $button_html . "<td class='es-settings-submit-btn'>";
|
758 |
-
$html .= '<input type="hidden" name="submitted" value="submitted"/>';
|
759 |
-
$html .= '<input type="hidden" name="submit_action" value="ig-es-save-admin-settings"/>';
|
760 |
-
//$html .= '<input type="hidden" name="update-settings" id="update-settings" value="' . $nonce . '"/>';
|
761 |
$html .= $nonce_field;
|
762 |
$html .= '<input type="submit" name="submit" class="cursor-pointer my-2 mx-6 ig-es-primary-button" value="' . __( 'Save Settings', 'email-subscribers' ) . '">';
|
763 |
$html .= "</td></tr>";
|
@@ -799,24 +807,31 @@ class ES_Admin_Settings {
|
|
799 |
$mailers = array(
|
800 |
'wpmail' => array( 'name' => 'WP Mail', 'logo' => ES_PLUGIN_URL . 'lite/admin/images/wpmail.png' ),
|
801 |
'phpmail' => array( 'name' => 'PHP mail', 'logo' => ES_PLUGIN_URL . 'lite/admin/images/phpmail.png' ),
|
802 |
-
'pepipost' => array( 'name' => 'Pepipost
|
803 |
);
|
804 |
|
805 |
-
$mailers
|
806 |
-
$selected_mailer = ( array_key_exists( $selected_mailer, $mailers ) ) ? $selected_mailer : 'wpmail';
|
807 |
|
|
|
808 |
|
809 |
foreach ( $mailers as $key => $mailer ) {
|
810 |
-
$
|
811 |
-
$html
|
812 |
-
|
813 |
-
|
|
|
|
|
|
|
|
|
814 |
<div class="es-logo-wrapper border-0">
|
815 |
<img src="' . $mailer['logo'] . '" alt="Default (none)">
|
816 |
</div>'
|
817 |
-
|
818 |
-
|
819 |
-
|
|
|
|
|
|
|
820 |
}
|
821 |
|
822 |
return $html;
|
46 |
$options['ig_es_notify_admin'] = isset( $options['ig_es_notify_admin'] ) ? $options['ig_es_notify_admin'] : 'no';
|
47 |
$options['ig_es_enable_cron_admin_email'] = isset( $options['ig_es_enable_cron_admin_email'] ) ? $options['ig_es_enable_cron_admin_email'] : 'no';
|
48 |
|
|
|
49 |
$text_fields_to_sanitize = array(
|
50 |
'ig_es_from_name',
|
51 |
'ig_es_admin_emails',
|
519 |
|
520 |
'ig_es_test_send_email' => array(
|
521 |
'type' => 'html',
|
522 |
+
'html' => '<input id="es-test-email" class="mt-3 mb-1 form-input h-9 border-gray-400"/><input type="submit" name="submit" id="es-send-test" class="ig-es-primary-button" value="Send Email"><span class="es_spinner_image_admin" id="spinner-image" style="display:none"><img src="' . ES_PLUGIN_URL . 'lite/public/images/spinner.gif' . '" alt="Loading..."/></span>',
|
523 |
'placeholder' => '',
|
524 |
'supplemental' => '',
|
525 |
'default' => '',
|
533 |
'type' => 'html',
|
534 |
// 'html' => ES_Admin_Settings::mailers_html(),
|
535 |
'sub_fields' => array(
|
536 |
+
'mailer' => array(
|
537 |
'id' => 'ig_es_mailer_settings[mailer]',
|
538 |
'name' => __( 'Select Mailer', 'email-subscribers' ),
|
539 |
'type' => 'html',
|
540 |
'html' => ES_Admin_Settings::mailers_html(),
|
541 |
'desc' => '',
|
542 |
),
|
|
|
543 |
'ig_es_pepipost_api_key' => array(
|
544 |
'type' => 'password',
|
545 |
'options' => false,
|
583 |
|
584 |
);
|
585 |
|
586 |
+
|
587 |
$security_settings = apply_filters( 'ig_es_registered_security_settings', $security_settings );
|
588 |
|
589 |
$es_settings = array(
|
633 |
$id_key = ! empty( $id_key ) ? $id_key : $uid;
|
634 |
$class = ! empty( $arguments['class'] ) ? $arguments['class'] : '';
|
635 |
$rows = ! empty( $arguments['rows'] ) ? $arguments['rows'] : 12;
|
636 |
+
$disabled = ! empty( $arguments['disabled'] ) ? true : false;
|
637 |
+
|
638 |
// Check which type of field we want
|
639 |
switch ( $arguments['type'] ) {
|
640 |
case 'text': // If it is a text field
|
641 |
+
$field_html = sprintf( '<input name="%1$s" id="%2$s" placeholder="%4$s" value="%5$s" %6$s class="%7$s form-input h-9 mt-2 mb-1 text-sm border-gray-400 w-3/5"/>', $uid, $id_key, $type, $placeholder, $value, $readonly, $class );
|
642 |
break;
|
643 |
case 'password': // If it is a text field
|
644 |
$field_html = sprintf( '<input name="%1$s" id="%2$s" type="%3$s" placeholder="%4$s" value="%5$s" %6$s class="form-input h-9 mt-2 mb-1 text-sm border-gray-400 w-3/5 %7$s"/>', $uid, $id_key, $type, $placeholder, $value, $readonly, $class );
|
649 |
break;
|
650 |
|
651 |
case 'email':
|
652 |
+
$field_html = sprintf( '<input name="%1$s" id="%2$s" type="%3$s" placeholder="%4$s" value="%5$s" class="%6$s form-input w-2/3 mt-2 mb-1 h-9 text-sm border-gray-400 w-3/5"/>', $uid, $id_key, $type, $placeholder, $value, $class );
|
653 |
break;
|
654 |
|
655 |
case 'textarea':
|
656 |
+
$field_html = sprintf( '<textarea name="%1$s" id="%2$s" placeholder="%3$s" size="100" rows="%6$s" cols="58" class="%5$s form-textarea text-sm w-2/3 mt-3 mb-1 border-gray-400 w-3/5">%4$s</textarea>', $uid, $id_key, $placeholder, $value, $class, $rows );
|
657 |
break;
|
658 |
|
659 |
case 'file':
|
660 |
+
$field_html = '<input type="text" id="logo_url" name="' . $uid . '" value="' . $value . '" class="form-input w-2/3 mt-2 mb-1 h-9 border-gray-400 text-sm w-3/5' . $class . '"/> <input id="upload_logo_button" type="button" class="button" value="Upload Logo" />';
|
661 |
break;
|
662 |
|
663 |
case 'checkbox' :
|
664 |
|
665 |
$field_html = '<label for="' . $id_key . '" class="mt-4 mb-1 inline-flex items-center cursor-pointer">
|
666 |
+
<span class="relative">';
|
667 |
+
|
668 |
+
if ( ! $disabled ) {
|
669 |
+
$field_html .= '<input id="' . $id_key . '" type="checkbox" name="' . $uid . '" value="yes" ' . checked( $value, 'yes', false ) . ' class="mt-6 absolute es-check-toggle opacity-0 w-0 h-0 ' . $class . '" />';
|
670 |
+
}
|
671 |
+
|
672 |
+
$field_html .= $placeholder . '</input>
|
673 |
<span class="es-mail-toggle-line block w-10 h-6 bg-gray-300 rounded-full shadow-inner "></span>
|
674 |
<span class="es-mail-toggle-dot absolute transition-all duration-300 ease-in-out block w-4 h-4 mt-1 ml-1 bg-white rounded-full shadow inset-y-0 left-0 focus-within:shadow-outline"></span>
|
675 |
</span>
|
683 |
$options_markup .= sprintf( '<option value="%s" %s>%s</option>', $key,
|
684 |
selected( $value, $key, false ), $label );
|
685 |
}
|
686 |
+
$field_html = sprintf( '<select name="%1$s" id="%2$s" class="%4$s form-select rounded-lg w-2/5 h-9 mt-2 mb-1 border-gray-400">%3$s</select>', $uid, $id_key, $options_markup, $class );
|
687 |
}
|
688 |
break;
|
689 |
|
698 |
//If there is help text
|
699 |
if ( ! empty( $arguments['desc'] ) ) {
|
700 |
$helper = $arguments['desc'];
|
701 |
+
$field_html .= sprintf( '<p class="helper italic text-xs font-normal text-gray-500 mb-2 leading-snug"> %s</p>', $helper ); // Show it
|
702 |
}
|
703 |
|
704 |
return $field_html;
|
714 |
|
715 |
function render_settings_fields( $fields ) {
|
716 |
|
717 |
+
$html = "<table class='mt-4 rounded-lg bg-white mr-4 lg:mx-5 xl:mx-7 overflow-hidden'>";
|
718 |
+
$html .= "<tbody>";
|
|
|
719 |
foreach ( $fields as $key => $field ) {
|
720 |
if ( ! empty( $field['name'] ) ) {
|
721 |
$html .= "<tr class=' ml-4 py-4 border-b border-gray-100'><th scope='row' class='pt-7 ml-6 block pt-3 pb-8 text-left pr-4'><span class='text-sm font-semibold text-gray-600 pb-2'>";
|
722 |
$html .= $field['name'];
|
723 |
|
724 |
+
if ( ! empty( $field['is_premium'] ) ) {
|
725 |
+
$html .= '<a href="' . $field['link'] . '" target="_blank"><span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">' . __( 'Premium', 'email-subscribers' ) . '</span></a>';
|
726 |
+
}
|
727 |
+
|
728 |
//If there is help text
|
729 |
if ( ! empty( $field['info'] ) ) {
|
730 |
$helper = $field['info'];
|
740 |
$option_key = '';
|
741 |
foreach ( $field['sub_fields'] as $field_key => $sub_field ) {
|
742 |
if ( strpos( $sub_field['id'], '[' ) ) {
|
743 |
+
$parts = explode( '[', $sub_field['id'] );
|
744 |
if ( $option_key !== $parts[0] ) {
|
745 |
$option_value = get_option( $parts[0] );
|
746 |
$option_key = $parts[0];
|
764 |
$nonce_field = wp_nonce_field( 'update-settings', 'update-settings', true, false );
|
765 |
|
766 |
$html .= $button_html . "<td class='es-settings-submit-btn'>";
|
767 |
+
$html .= '<input type="hidden" name="submitted" value="submitted" />';
|
768 |
+
$html .= '<input type="hidden" name="submit_action" value="ig-es-save-admin-settings" />';
|
|
|
769 |
$html .= $nonce_field;
|
770 |
$html .= '<input type="submit" name="submit" class="cursor-pointer my-2 mx-6 ig-es-primary-button" value="' . __( 'Save Settings', 'email-subscribers' ) . '">';
|
771 |
$html .= "</td></tr>";
|
807 |
$mailers = array(
|
808 |
'wpmail' => array( 'name' => 'WP Mail', 'logo' => ES_PLUGIN_URL . 'lite/admin/images/wpmail.png' ),
|
809 |
'phpmail' => array( 'name' => 'PHP mail', 'logo' => ES_PLUGIN_URL . 'lite/admin/images/phpmail.png' ),
|
810 |
+
'pepipost' => array( 'name' => 'Pepipost', 'logo' => ES_PLUGIN_URL . 'lite/admin/images/pepipost.png', 'docblock' => $pepipost_doc_block ),
|
811 |
);
|
812 |
|
813 |
+
$mailers = apply_filters( 'ig_es_mailers', $mailers );
|
|
|
814 |
|
815 |
+
$selected_mailer = ( array_key_exists( $selected_mailer, $mailers ) ) ? $selected_mailer : 'wpmail';
|
816 |
|
817 |
foreach ( $mailers as $key => $mailer ) {
|
818 |
+
$html .= '<label class="inline-flex items-center cursor-pointer">';
|
819 |
+
$html .= '<input type="radio" class="es_mailer absolute opacity-0 w-0 h-0" name="ig_es_mailer_settings[mailer]" value="' . $key . '" ' . checked( $selected_mailer, $key, false ) . '></input>';
|
820 |
+
|
821 |
+
if ( ! empty( $mailer['is_premium'] ) ) {
|
822 |
+
$html .= '<a href="' . $mailer['url'] . '" target="_blank">';
|
823 |
+
}
|
824 |
+
|
825 |
+
$html .= '<div class="mt-4 mr-4 border-solid border-2 rounded-lg border-gray-200 shadow-md es-mailer-logo">
|
826 |
<div class="es-logo-wrapper border-0">
|
827 |
<img src="' . $mailer['logo'] . '" alt="Default (none)">
|
828 |
</div>'
|
829 |
+
. $mailer['name'];
|
830 |
+
|
831 |
+
if ( ! empty( $mailer['is_premium'] ) ) {
|
832 |
+
$html .= '<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Premium</span></a>';
|
833 |
+
}
|
834 |
+
$html .= '</div></label>';
|
835 |
}
|
836 |
|
837 |
return $html;
|
lite/includes/classes/class-es-contact-background-process.php
CHANGED
@@ -66,6 +66,7 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
66 |
add_action( 'admin_notices', array( $this, 'contact_background_notice' ) );
|
67 |
add_action( 'wp_ajax_ig_es_contact_background_progress', array( $this, 'ajax_contact_background_progress' ) );
|
68 |
add_action( 'wp_ajax_ig_es_get_background_process_results', array( $this, 'ajax_get_background_process_results' ) );
|
|
|
69 |
add_action( 'wp_ajax_ig_es_download_csv', array( $this, 'ajax_download_csv' ) );
|
70 |
add_action( 'ig_es_add_contact_to_csv', array( $this, 'add_contact_to_csv' ) );
|
71 |
add_action( 'ig_es_import_contacts_from_csv', array( $this, 'import_contacts_from_csv' ) );
|
@@ -258,7 +259,9 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
258 |
?>
|
259 |
</p>
|
260 |
<p>
|
261 |
-
<?php
|
|
|
|
|
262 |
</p>
|
263 |
</div>
|
264 |
<?php
|
@@ -275,6 +278,9 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
275 |
// Clear interval callback function.
|
276 |
let clear_interval_callback = null;
|
277 |
|
|
|
|
|
|
|
278 |
jQuery(document).ready(function(){
|
279 |
var border_color = jQuery('#ig_es_contact_background_progress').css('border-left-color');
|
280 |
jQuery('#ig_es_contact_background_progress').css('border-top', '1px solid ' + border_color);
|
@@ -284,6 +290,10 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
284 |
jQuery('body').on('click', '.download-csv-wrapper a', function(){
|
285 |
jQuery('.download-csv-wrapper').hide('slow');
|
286 |
});
|
|
|
|
|
|
|
|
|
287 |
<?php
|
288 |
// If background process is running then check it's progress continuously with the interval of 5 seconds.
|
289 |
if( 'yes' === $is_process_running ) {
|
@@ -332,47 +342,43 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
332 |
|
333 |
function ig_es_check_contact_background_progress() {
|
334 |
ig_es_disable_import_form();
|
335 |
-
jQuery.ajax({
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
let percent_completion = response.percent_completion;
|
346 |
-
let contact_action = response.contact_action;
|
347 |
-
let action_stage = response.action_stage;
|
348 |
-
let action_data = response.action_data;
|
349 |
-
|
350 |
-
let progress_data = {
|
351 |
-
percent_completion: response.percent_completion,
|
352 |
-
contact_action: response.contact_action,
|
353 |
-
action_stage: response.action_stage,
|
354 |
-
action_data: response.action_data
|
355 |
-
}
|
356 |
|
357 |
-
|
|
|
|
|
|
|
358 |
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
366 |
}
|
|
|
|
|
367 |
}
|
|
|
368 |
});
|
369 |
}
|
370 |
|
371 |
function ig_es_get_background_process_results() {
|
372 |
-
// Check if results already shown then return.
|
373 |
-
if( 1 === jQuery('#ig_es_contact_background_results').length ) {
|
374 |
-
return;
|
375 |
-
}
|
376 |
jQuery.ajax({
|
377 |
url: admin_ajax_url,
|
378 |
method: 'post',
|
@@ -383,6 +389,12 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
383 |
},
|
384 |
success: function( response ) {
|
385 |
if( 'undefined' !== typeof response.response_html && '' !== response.response_html ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
386 |
let result_html = jQuery.parseHTML( response.response_html );
|
387 |
// If there is background process progress message being shown then replace it with background process result html else show background process result after page heading.
|
388 |
if( 1 === jQuery('#ig_es_contact_background_progress').length ) {
|
@@ -395,6 +407,32 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
395 |
}
|
396 |
});
|
397 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
398 |
});
|
399 |
</script>
|
400 |
<?php
|
@@ -474,6 +512,46 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
474 |
}
|
475 |
}
|
476 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
477 |
/**
|
478 |
* Checks if background process is running
|
479 |
*
|
@@ -642,14 +720,17 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
642 |
|
643 |
// If loop is completed or time is reached or memory limit is reached then set required options for next run and break the loop.
|
644 |
if ( $last_subscriber_id === $subscriber_id || $this->time_exceeded( $batch_start_time ) || $this->memory_exceeded() ) {
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
|
|
|
|
|
|
|
|
651 |
}
|
652 |
-
break;
|
653 |
}
|
654 |
}
|
655 |
|
@@ -708,7 +789,7 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
708 |
$delimiter = $this->get_delimiter( $csv_file );
|
709 |
|
710 |
// Get Headers
|
711 |
-
$csv_header = array_map( 'trim', fgetcsv( $csv_file_handler, 0 ) );
|
712 |
|
713 |
$batch_start_time = time();
|
714 |
|
@@ -819,15 +900,19 @@ if ( ! class_exists( 'ES_Contact_Background_Process' ) ) {
|
|
819 |
}
|
820 |
|
821 |
fclose( $csv_file_handler ); // phpcs:ignore
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
|
|
|
|
|
|
|
|
|
|
829 |
}
|
830 |
-
break;
|
831 |
}
|
832 |
}
|
833 |
}
|
66 |
add_action( 'admin_notices', array( $this, 'contact_background_notice' ) );
|
67 |
add_action( 'wp_ajax_ig_es_contact_background_progress', array( $this, 'ajax_contact_background_progress' ) );
|
68 |
add_action( 'wp_ajax_ig_es_get_background_process_results', array( $this, 'ajax_get_background_process_results' ) );
|
69 |
+
add_action( 'wp_ajax_ig_es_cancel_contact_background_process', array( $this, 'ajax_cancel_contact_background_process' ) );
|
70 |
add_action( 'wp_ajax_ig_es_download_csv', array( $this, 'ajax_download_csv' ) );
|
71 |
add_action( 'ig_es_add_contact_to_csv', array( $this, 'add_contact_to_csv' ) );
|
72 |
add_action( 'ig_es_import_contacts_from_csv', array( $this, 'import_contacts_from_csv' ) );
|
259 |
?>
|
260 |
</p>
|
261 |
<p>
|
262 |
+
<?php
|
263 |
+
echo __( '<a href="#" id="ig-es-cancel-contact-background-process">Click here</a> to cancel this request.', 'email-subscribers' );
|
264 |
+
?>
|
265 |
</p>
|
266 |
</div>
|
267 |
<?php
|
278 |
// Clear interval callback function.
|
279 |
let clear_interval_callback = null;
|
280 |
|
281 |
+
// Background request object.
|
282 |
+
let background_progress_request = null;
|
283 |
+
|
284 |
jQuery(document).ready(function(){
|
285 |
var border_color = jQuery('#ig_es_contact_background_progress').css('border-left-color');
|
286 |
jQuery('#ig_es_contact_background_progress').css('border-top', '1px solid ' + border_color);
|
290 |
jQuery('body').on('click', '.download-csv-wrapper a', function(){
|
291 |
jQuery('.download-csv-wrapper').hide('slow');
|
292 |
});
|
293 |
+
jQuery('body').on('click', '#ig-es-cancel-contact-background-process', function(e){
|
294 |
+
e.preventDefault();
|
295 |
+
ig_es_cancel_contact_background_process();
|
296 |
+
});
|
297 |
<?php
|
298 |
// If background process is running then check it's progress continuously with the interval of 5 seconds.
|
299 |
if( 'yes' === $is_process_running ) {
|
342 |
|
343 |
function ig_es_check_contact_background_progress() {
|
344 |
ig_es_disable_import_form();
|
345 |
+
background_progress_request = jQuery.ajax({
|
346 |
+
url: admin_ajax_url,
|
347 |
+
method: 'post',
|
348 |
+
dataType: 'json',
|
349 |
+
data: {
|
350 |
+
action: 'ig_es_contact_background_progress',
|
351 |
+
security: '<?php echo esc_attr( wp_create_nonce( 'ig-es-background-contact-progress' ) ); ?>'
|
352 |
+
},
|
353 |
+
success: function( response ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
354 |
|
355 |
+
let percent_completion = response.percent_completion;
|
356 |
+
let contact_action = response.contact_action;
|
357 |
+
let action_stage = response.action_stage;
|
358 |
+
let action_data = response.action_data;
|
359 |
|
360 |
+
let progress_data = {
|
361 |
+
percent_completion: response.percent_completion,
|
362 |
+
contact_action: response.contact_action,
|
363 |
+
action_stage: response.action_stage,
|
364 |
+
action_data: response.action_data
|
365 |
+
}
|
366 |
+
|
367 |
+
let target_dom = jQuery('#ig_es_contact_background_progress');
|
368 |
+
|
369 |
+
if ( response.percent_completion !== undefined && response.percent_completion !== '' ) {
|
370 |
+
if( 100 == response.percent_completion) {
|
371 |
+
clearInterval(clear_interval_callback);
|
372 |
+
ig_es_get_background_process_results();
|
373 |
}
|
374 |
+
target_dom.show();
|
375 |
+
ig_es_start_contact_background_progress_percentage( progress_data, target_dom );
|
376 |
}
|
377 |
+
}
|
378 |
});
|
379 |
}
|
380 |
|
381 |
function ig_es_get_background_process_results() {
|
|
|
|
|
|
|
|
|
382 |
jQuery.ajax({
|
383 |
url: admin_ajax_url,
|
384 |
method: 'post',
|
389 |
},
|
390 |
success: function( response ) {
|
391 |
if( 'undefined' !== typeof response.response_html && '' !== response.response_html ) {
|
392 |
+
|
393 |
+
// Check if results already shown then return.
|
394 |
+
if( 1 === jQuery('#ig_es_contact_background_results').length ) {
|
395 |
+
return;
|
396 |
+
}
|
397 |
+
|
398 |
let result_html = jQuery.parseHTML( response.response_html );
|
399 |
// If there is background process progress message being shown then replace it with background process result html else show background process result after page heading.
|
400 |
if( 1 === jQuery('#ig_es_contact_background_progress').length ) {
|
407 |
}
|
408 |
});
|
409 |
}
|
410 |
+
|
411 |
+
function ig_es_cancel_contact_background_process() {
|
412 |
+
clearInterval(clear_interval_callback);
|
413 |
+
jQuery.ajax({
|
414 |
+
url: admin_ajax_url,
|
415 |
+
method: 'post',
|
416 |
+
dataType: 'json',
|
417 |
+
beforeSend: function() {
|
418 |
+
// Cancel previous request for checking background progress.
|
419 |
+
if( null !== background_progress_request) {
|
420 |
+
background_progress_request.abort();
|
421 |
+
}
|
422 |
+
},
|
423 |
+
data: {
|
424 |
+
action: 'ig_es_cancel_contact_background_process',
|
425 |
+
security: '<?php echo esc_attr( wp_create_nonce( 'ig-es-cancel-contact-background-process' ) ); ?>'
|
426 |
+
},
|
427 |
+
success: function( response ) {
|
428 |
+
if( 'undefined' !== typeof response.response_html && '' !== response.response_html ) {
|
429 |
+
let response_html = jQuery.parseHTML( response.response_html );
|
430 |
+
jQuery('#ig_es_contact_background_progress').replaceWith( response_html );
|
431 |
+
ig_es_enable_import_form();
|
432 |
+
}
|
433 |
+
}
|
434 |
+
});
|
435 |
+
}
|
436 |
});
|
437 |
</script>
|
438 |
<?php
|
512 |
}
|
513 |
}
|
514 |
|
515 |
+
/**
|
516 |
+
* Cancel current background process
|
517 |
+
*
|
518 |
+
* @since 4.4.4.1
|
519 |
+
*/
|
520 |
+
public function ajax_cancel_contact_background_process() {
|
521 |
+
|
522 |
+
check_ajax_referer( 'ig-es-cancel-contact-background-process', 'security' );
|
523 |
+
$response = array();
|
524 |
+
$background_process_process_data = get_site_option( 'ig_es_contact_background_process_data', false );
|
525 |
+
ob_start();
|
526 |
+
if ( $background_process_process_data ) {
|
527 |
+
// Delete data related to background process.
|
528 |
+
delete_site_option( 'ig_es_contact_background_process_data' );
|
529 |
+
delete_site_option( 'ig_es_contact_background_process_result' );
|
530 |
+
|
531 |
+
// Unschedule existing scheduled action schedulers.
|
532 |
+
as_unschedule_action( 'ig_es_add_contact_to_csv' );
|
533 |
+
as_unschedule_action( 'ig_es_import_contacts_from_csv' );
|
534 |
+
?>
|
535 |
+
<div id="ig_es_contact_background_results" class="updated">
|
536 |
+
<p>
|
537 |
+
<?php
|
538 |
+
echo __( 'The background process has been canceled successfully. You can start a new process again by importing or exporting.', 'email-subscribers' );
|
539 |
+
?>
|
540 |
+
</p>
|
541 |
+
</div>
|
542 |
+
<?php
|
543 |
+
} else {
|
544 |
+
// Till we processed this cancel request current import/export process got completed therefore show success background message instead.
|
545 |
+
$background_process_result = get_site_option( 'ig_es_contact_background_process_result', false );
|
546 |
+
if( false !== $background_process_result ) {
|
547 |
+
$this->get_background_process_results_html( $background_process_result );
|
548 |
+
}
|
549 |
+
}
|
550 |
+
$response_html = ob_get_clean();
|
551 |
+
$response['response_html'] = $response_html;
|
552 |
+
wp_send_json( $response );
|
553 |
+
}
|
554 |
+
|
555 |
/**
|
556 |
* Checks if background process is running
|
557 |
*
|
720 |
|
721 |
// If loop is completed or time is reached or memory limit is reached then set required options for next run and break the loop.
|
722 |
if ( $last_subscriber_id === $subscriber_id || $this->time_exceeded( $batch_start_time ) || $this->memory_exceeded() ) {
|
723 |
+
// Update background process data only if it exists to ensure we don't start another process in this request if it was cancelled previously by user.
|
724 |
+
if( false !== get_site_option( 'ig_es_contact_background_process_data', false ) ) {
|
725 |
+
$process_data['last_contact_id'] = $subscriber_id;
|
726 |
+
$process_data['total_contacts_processed'] = $total_contacts_processed;
|
727 |
+
$process_data['last_processed_list_contact_id'] = $last_processed_list_contact_id;
|
728 |
+
update_site_option( 'ig_es_contact_background_process_data', $process_data );
|
729 |
+
if ( function_exists( 'as_schedule_single_action' ) ) {
|
730 |
+
as_schedule_single_action( time(), 'ig_es_add_contact_to_csv' );
|
731 |
+
}
|
732 |
+
break;
|
733 |
}
|
|
|
734 |
}
|
735 |
}
|
736 |
|
789 |
$delimiter = $this->get_delimiter( $csv_file );
|
790 |
|
791 |
// Get Headers
|
792 |
+
$csv_header = array_map( 'trim', fgetcsv( $csv_file_handler, 0, $delimiter ) );
|
793 |
|
794 |
$batch_start_time = time();
|
795 |
|
900 |
}
|
901 |
|
902 |
fclose( $csv_file_handler ); // phpcs:ignore
|
903 |
+
|
904 |
+
// Update background process data only if it exists to ensure we don't start another process in this request if it was cancelled previously by user.
|
905 |
+
if( false !== get_site_option( 'ig_es_contact_background_process_data', false ) ) {
|
906 |
+
$process_data['import_file']['file_position'] = $file_position;
|
907 |
+
$process_data['total_contacts_processed'] = $total_contacts_processed;
|
908 |
+
$process_data['existing_contacts_count'] = $existing_contacts_count;
|
909 |
+
$process_data['invalid_emails_count'] = $invalid_emails_count;
|
910 |
+
update_site_option( 'ig_es_contact_background_process_data', $process_data );
|
911 |
+
if ( function_exists( 'as_schedule_single_action' ) ) {
|
912 |
+
as_schedule_single_action( time(), 'ig_es_import_contacts_from_csv' );
|
913 |
+
}
|
914 |
+
break;
|
915 |
}
|
|
|
916 |
}
|
917 |
}
|
918 |
}
|
lite/includes/classes/class-es-contacts-table.php
CHANGED
@@ -724,10 +724,17 @@ class ES_Contacts_Table extends WP_List_Table {
|
|
724 |
|
725 |
<div class="flex border-b border-gray-100">
|
726 |
<div class="ml-4 mb-4 pt-6">
|
727 |
-
<input type="hidden" name="contact_data[created_at]" value="<?php echo $created; ?>"/>
|
728 |
-
<input type="hidden" name="contact_data[guid]" value="<?php echo $guid; ?>"/>
|
729 |
-
<input type="hidden" name="submitted" value="submitted"/>
|
730 |
-
<input type="submit" name="submit" class="cursor-pointer px-4 my-2 py-2 mx-2 ig-es-primary-button" value="<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
731 |
</div>
|
732 |
</div>
|
733 |
</form>
|
724 |
|
725 |
<div class="flex border-b border-gray-100">
|
726 |
<div class="ml-4 mb-4 pt-6">
|
727 |
+
<input type="hidden" name="contact_data[created_at]" value="<?php echo $created; ?>" />
|
728 |
+
<input type="hidden" name="contact_data[guid]" value="<?php echo $guid; ?>" />
|
729 |
+
<input type="hidden" name="submitted" value="submitted" />
|
730 |
+
<input type="submit" name="submit" class="cursor-pointer px-4 my-2 py-2 mx-2 ig-es-primary-button hover:shadow-md" value="<?php if ( $is_new ) {
|
731 |
+
_e( 'Save Contact', 'email-subscribers' );
|
732 |
+
}
|
733 |
+
else{
|
734 |
+
_e( 'Save Changes', 'email-subscribers' );
|
735 |
+
}
|
736 |
+
?>"/>
|
737 |
+
<a href="admin.php?page=es_subscribers" class="cursor-pointer rounded-md border border-indigo-600 hover:shadow-md focus:outline-none focus:shadow-outline-indigo text-sm leading-5 font-medium transition ease-in-out duration-150 px-4 my-2 py-2 mx-2 ">Cancel</a>
|
738 |
</div>
|
739 |
</div>
|
740 |
</form>
|
lite/includes/classes/class-es-export-subscribers.php
CHANGED
@@ -29,19 +29,19 @@ class Export_Subscribers {
|
|
29 |
|
30 |
?>
|
31 |
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
|
39 |
<?php
|
40 |
}
|
41 |
|
42 |
public function prepare_body() {
|
43 |
|
44 |
-
$list_dropdown_html = "<select name='list_id' id='ig_es_export_list_dropdown'>";
|
45 |
$list_dropdown_html .= ES_Common::prepare_list_dropdown_options();
|
46 |
$list_dropdown_html .= "</select>";
|
47 |
|
@@ -57,58 +57,72 @@ class Export_Subscribers {
|
|
57 |
|
58 |
$i = 1;
|
59 |
foreach ( $export_lists as $key => $export_list ) {
|
60 |
-
|
61 |
if ( $i % 2 === 0 ) {
|
62 |
$class = 'alternate';
|
63 |
-
}
|
64 |
|
65 |
$url = "admin.php?page=download_report&report=users&status={$key}";
|
66 |
|
67 |
?>
|
68 |
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
|
82 |
-
|
|
|
|
|
83 |
|
84 |
-
|
85 |
-
$active_tab = 'export';
|
86 |
-
$audience_tab_main_navigation = apply_filters( 'ig_es_audience_tab_main_navigation', $active_tab, $audience_tab_main_navigation );
|
87 |
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
<?php $this->prepare_header_footer_row(); ?>
|
100 |
-
|
101 |
-
|
102 |
<?php $this->prepare_body(); ?>
|
103 |
-
|
104 |
-
|
105 |
<?php $this->prepare_header_footer_row(); ?>
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
|
113 |
|
114 |
/**
|
@@ -122,29 +136,29 @@ class Export_Subscribers {
|
|
122 |
|
123 |
switch ( $status ) {
|
124 |
case 'all':
|
125 |
-
|
126 |
-
|
127 |
|
128 |
case 'subscribed':
|
129 |
-
|
130 |
-
|
131 |
|
132 |
case 'unsubscribed':
|
133 |
-
|
134 |
-
|
135 |
|
136 |
case 'confirmed':
|
137 |
-
|
138 |
-
|
139 |
|
140 |
case 'unconfirmed':
|
141 |
-
|
142 |
-
|
143 |
|
144 |
case 'select_list':
|
145 |
default:
|
146 |
-
|
147 |
-
|
148 |
}
|
149 |
|
150 |
}
|
@@ -175,15 +189,15 @@ class Export_Subscribers {
|
|
175 |
public function download_report() {
|
176 |
?>
|
177 |
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
|
185 |
-
|
186 |
-
|
187 |
|
188 |
/**
|
189 |
* Generate CSV
|
@@ -451,7 +465,7 @@ class Export_Subscribers {
|
|
451 |
$error_message = __( 'Unable to generate CSV file. Please try again later.', 'email-subscribers' );
|
452 |
}
|
453 |
} else {
|
454 |
-
$error_message = $
|
455 |
}
|
456 |
} else {
|
457 |
$error_message = __( 'No data available', 'email-subscribers' );
|
29 |
|
30 |
?>
|
31 |
|
32 |
+
<tr class="bg-gray-100 text-xs text-left leading-4 font-medium text-gray-500 uppercase tracking-wider border-b border-t border-gray-200 ">
|
33 |
+
<th class="w-1/4 pl-8 py-4" scope="col"><?php _e( 'No.', 'email-subscribers' ); ?></th>
|
34 |
+
<th class="w-1/4 py-4" scope="col"><?php _e( 'Contacts', 'email-subscribers' ); ?></th>
|
35 |
+
<th class="w-1/4 py-4" scope="col"><?php _e( 'Total Contacts', 'email-subscribers' ); ?></th>
|
36 |
+
<th class="w-1/4 pl-8 py-4" scope="col"><?php _e( 'Export', 'email-subscribers' ); ?></th>
|
37 |
+
</tr>
|
38 |
|
39 |
<?php
|
40 |
}
|
41 |
|
42 |
public function prepare_body() {
|
43 |
|
44 |
+
$list_dropdown_html = "<select class='form-select' name='list_id' id='ig_es_export_list_dropdown'>";
|
45 |
$list_dropdown_html .= ES_Common::prepare_list_dropdown_options();
|
46 |
$list_dropdown_html .= "</select>";
|
47 |
|
57 |
|
58 |
$i = 1;
|
59 |
foreach ( $export_lists as $key => $export_list ) {
|
60 |
+
/*$class = '';
|
61 |
if ( $i % 2 === 0 ) {
|
62 |
$class = 'alternate';
|
63 |
+
}*/
|
64 |
|
65 |
$url = "admin.php?page=download_report&report=users&status={$key}";
|
66 |
|
67 |
?>
|
68 |
|
69 |
+
<tr class="border-b text-sm font-normal text-gray-700 border-gray-200" id="ig_es_export_<?php echo $key; ?>">
|
70 |
+
<td class="py-2 pl-10 w-1/4 "><?php echo $i; ?></td>
|
71 |
+
<td class="py-2 w-1/4"><?php _e( $export_list, 'email-subscribers' ); ?></td>
|
72 |
+
<td class="py-2 w-1/4 font-medium ig_es_total_contacts"><?php echo $this->count_subscribers( $key ); ?></td>
|
73 |
+
<td class="py-2 w-1/4">
|
74 |
+
<div class="inline-flex pl-10"><a href="<?php echo $url; ?>" id="ig_es_export_link_<?php echo $key; ?>">
|
75 |
+
<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="w-8 h-8 text-indigo-600 hover:text-indigo-500 active:text-indigo-600"><path d="M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
76 |
+
</svg>
|
77 |
+
</a>
|
78 |
+
</div>
|
79 |
+
</td>
|
80 |
+
</tr>
|
81 |
|
82 |
+
<?php
|
83 |
+
$i ++;
|
84 |
+
}
|
85 |
|
86 |
+
}
|
|
|
|
|
87 |
|
88 |
+
public function export_subscribers_page() {
|
89 |
+
|
90 |
+
$audience_tab_main_navigation = array();
|
91 |
+
$active_tab = 'export';
|
92 |
+
$audience_tab_main_navigation = apply_filters( 'ig_es_audience_tab_main_navigation', $active_tab, $audience_tab_main_navigation );
|
93 |
+
|
94 |
+
?>
|
95 |
+
|
96 |
+
<div class="wrap ml-4">
|
97 |
+
<header class="wp-heading-inline">
|
98 |
+
<div class="mt-2">
|
99 |
+
<h2 class="text-xl font-medium text-gray-800 sm:leading-9 sm:truncate"><h1 class="text-xl leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate">
|
100 |
+
<span class="text-2xl font-bold leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate"> <a href="admin.php?page=es_subscribers"><?php _e( 'Audience', 'email-subscribers' ); ?> </a> </span> > <?php _e('Export Contacts', 'email-subscribers'); ?>
|
101 |
+
<?php
|
102 |
+
ES_Common::prepare_main_header_navigation( $audience_tab_main_navigation );
|
103 |
+
?>
|
104 |
+
</div>
|
105 |
+
</h2>
|
106 |
+
|
107 |
+
</header>
|
108 |
+
<div><hr class="wp-header-end"></div>
|
109 |
+
<div class="mt-6 shadow-lg rounded-md overflow-hidden">
|
110 |
+
<form name="frm_es_subscriberexport" method="post">
|
111 |
+
<table class="min-w-full" id="straymanage">
|
112 |
+
<thead>
|
113 |
<?php $this->prepare_header_footer_row(); ?>
|
114 |
+
</thead>
|
115 |
+
<tbody class="bg-white">
|
116 |
<?php $this->prepare_body(); ?>
|
117 |
+
</tbody>
|
118 |
+
<tfoot>
|
119 |
<?php $this->prepare_header_footer_row(); ?>
|
120 |
+
</tfoot>
|
121 |
+
</table>
|
122 |
+
</form>
|
123 |
+
</div>
|
124 |
+
</div>
|
125 |
+
<?php }
|
126 |
|
127 |
|
128 |
/**
|
136 |
|
137 |
switch ( $status ) {
|
138 |
case 'all':
|
139 |
+
return ES()->lists_contacts_db->get_all_contacts_count( 0, false );
|
140 |
+
break;
|
141 |
|
142 |
case 'subscribed':
|
143 |
+
return ES()->lists_contacts_db->get_subscribed_contacts_count( 0, false );
|
144 |
+
break;
|
145 |
|
146 |
case 'unsubscribed':
|
147 |
+
return ES()->lists_contacts_db->get_unsubscribed_contacts_count( 0, false );
|
148 |
+
break;
|
149 |
|
150 |
case 'confirmed':
|
151 |
+
return ES()->lists_contacts_db->get_confirmed_contacts_count( 0, false );
|
152 |
+
break;
|
153 |
|
154 |
case 'unconfirmed':
|
155 |
+
return ES()->lists_contacts_db->get_unconfirmed_contacts_count( 0, false );
|
156 |
+
break;
|
157 |
|
158 |
case 'select_list':
|
159 |
default:
|
160 |
+
return '-';
|
161 |
+
break;
|
162 |
}
|
163 |
|
164 |
}
|
189 |
public function download_report() {
|
190 |
?>
|
191 |
|
192 |
+
<div class="wrap">
|
193 |
+
<div id="icon-tools" class="icon32"></div>
|
194 |
+
<h2>Download Report</h2>
|
195 |
+
<p>
|
196 |
+
<a href="?page=download_report&report=users"><?php _e( 'Export the Subscribers', 'email-subscribers' ); ?></a>
|
197 |
+
</p>
|
198 |
|
199 |
+
<?php
|
200 |
+
}
|
201 |
|
202 |
/**
|
203 |
* Generate CSV
|
465 |
$error_message = __( 'Unable to generate CSV file. Please try again later.', 'email-subscribers' );
|
466 |
}
|
467 |
} else {
|
468 |
+
$error_message = $export_file['error'];
|
469 |
}
|
470 |
} else {
|
471 |
$error_message = __( 'No data available', 'email-subscribers' );
|
lite/includes/classes/class-es-forms-table.php
CHANGED
@@ -461,7 +461,15 @@ class ES_Forms_Table extends WP_List_Table {
|
|
461 |
<input type="hidden" name="form_data[af_id]" value="<?php echo $form_data['af_id']; ?>"/>
|
462 |
<input type="hidden" name="submitted" value="submitted"/>
|
463 |
<?php if ( count( $lists ) > 0 ) { ?>
|
464 |
-
<p class="submit"><input type="submit" name="submit" id="ig_es_campaign_post_notification_submit_button" class="cursor-pointer ig-es-primary-button px-4 py-2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
465 |
<?php } else {
|
466 |
$lists_page_url = admin_url( 'admin.php?page=es_lists' );
|
467 |
$message = __( sprintf( 'List(s) not found. Please create a first list from <a href="%s">here</a>', $lists_page_url ), 'email-subscribers' );
|
461 |
<input type="hidden" name="form_data[af_id]" value="<?php echo $form_data['af_id']; ?>"/>
|
462 |
<input type="hidden" name="submitted" value="submitted"/>
|
463 |
<?php if ( count( $lists ) > 0 ) { ?>
|
464 |
+
<p class="submit"><input type="submit" name="submit" id="ig_es_campaign_post_notification_submit_button" class="cursor-pointer ig-es-primary-button px-4 py-2 ml-6 mr-2" value="<?php if ( $is_new ) {
|
465 |
+
_e( 'Save Form', 'email-subscribers' );
|
466 |
+
}
|
467 |
+
else{
|
468 |
+
_e( 'Save Changes', 'email-subscribers' );
|
469 |
+
}
|
470 |
+
|
471 |
+
?>"/>
|
472 |
+
<a href="admin.php?page=es_forms" class="cursor-pointer rounded-md border border-indigo-600 hover:shadow-md focus:outline-none focus:shadow-outline-indigo text-sm leading-5 font-medium transition ease-in-out duration-150 px-4 my-2 py-2 mx-2 ">Cancel</a></p>
|
473 |
<?php } else {
|
474 |
$lists_page_url = admin_url( 'admin.php?page=es_lists' );
|
475 |
$message = __( sprintf( 'List(s) not found. Please create a first list from <a href="%s">here</a>', $lists_page_url ), 'email-subscribers' );
|
lite/includes/classes/class-es-ig-redirect.php
CHANGED
@@ -22,6 +22,8 @@ if ( ! class_exists( 'ES_IG_Redirect' ) ) {
|
|
22 |
$action = ig_es_get_request_data( 'action' );
|
23 |
|
24 |
$redirect_url = admin_url( 'post-new.php?post_type=ig_campaign' );
|
|
|
|
|
25 |
if ( 'create_campaign' === $action ) {
|
26 |
$redirect_url = admin_url( 'edit.php?post_type=ig_campaign' );
|
27 |
$info = __( 'Create Onsite Campaigns Using <a href="https://wordpress.org/plugins/icegram">Icegram</a>', 'email_subscribers' );
|
@@ -65,12 +67,12 @@ if ( ! class_exists( 'ES_IG_Redirect' ) ) {
|
|
65 |
<div id="ig-es-create-button" class="relative inline-block text-left">
|
66 |
<div>
|
67 |
<span class="rounded-md shadow-sm">
|
68 |
-
|
69 |
<?php
|
70 |
if ( in_array( $icegram_plugin, $inactive_plugins ) ) {
|
71 |
-
|
72 |
} else {
|
73 |
-
|
74 |
} ?>
|
75 |
</button></a>
|
76 |
</span>
|
22 |
$action = ig_es_get_request_data( 'action' );
|
23 |
|
24 |
$redirect_url = admin_url( 'post-new.php?post_type=ig_campaign' );
|
25 |
+
$ig_activate_url = admin_url( 'plugins.php?plugin_status=inactive' );
|
26 |
+
|
27 |
if ( 'create_campaign' === $action ) {
|
28 |
$redirect_url = admin_url( 'edit.php?post_type=ig_campaign' );
|
29 |
$info = __( 'Create Onsite Campaigns Using <a href="https://wordpress.org/plugins/icegram">Icegram</a>', 'email_subscribers' );
|
67 |
<div id="ig-es-create-button" class="relative inline-block text-left">
|
68 |
<div>
|
69 |
<span class="rounded-md shadow-sm">
|
70 |
+
|
71 |
<?php
|
72 |
if ( in_array( $icegram_plugin, $inactive_plugins ) ) {
|
73 |
+
?> <a href="<?php echo $ig_activate_url ?>"><button type="button" class="inline-flex justify-center w-full rounded-md border border-transparent px-4 py-2 bg-white text-sm leading-5 font-medium text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:shadow-outline-blue transition ease-in-out duration-150"> <?php _e( 'Activate Icegram','email_subscribers' );
|
74 |
} else {
|
75 |
+
?> <a href="<?php echo $ig_install_url ?>"><button type="button" class="inline-flex justify-center w-full rounded-md border border-transparent px-4 py-2 bg-white text-sm leading-5 font-medium text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:shadow-outline-blue transition ease-in-out duration-150"> <?php _e( 'Install Icegram','email_subscribers' );
|
76 |
} ?>
|
77 |
</button></a>
|
78 |
</span>
|
lite/includes/classes/class-es-import-subscribers.php
CHANGED
@@ -36,58 +36,59 @@ class ES_Import_Subscribers {
|
|
36 |
|
37 |
?>
|
38 |
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
|
|
91 |
|
92 |
/**
|
93 |
* Show import contacts
|
@@ -102,18 +103,26 @@ class ES_Import_Subscribers {
|
|
102 |
|
103 |
?>
|
104 |
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
|
118 |
/**
|
119 |
* Start import process after validating sumitted data
|
@@ -173,20 +182,20 @@ class ES_Import_Subscribers {
|
|
173 |
$uploaded_file = $_FILES['file'];
|
174 |
$upload_overrides = array( 'test_form' => false );
|
175 |
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
|
180 |
-
|
181 |
|
182 |
-
|
183 |
|
184 |
-
|
185 |
if ( is_array( $file_pointer ) && ! empty( $file_pointer ) ) {
|
186 |
$total_contacts_to_process = count( $file_pointer ) - 1;
|
187 |
|
188 |
if( ! empty( $total_contacts_to_process ) ) {
|
189 |
-
|
190 |
'action' => 'import_contact',
|
191 |
'contact_status' => $status,
|
192 |
'list_id' => $list_id,
|
@@ -201,13 +210,13 @@ class ES_Import_Subscribers {
|
|
201 |
|
202 |
as_schedule_single_action( time(), 'ig_es_import_contacts_from_csv' );
|
203 |
|
|
|
|
|
204 |
$email_subscribers_import_page = admin_url( 'admin.php?page=es_subscribers&action=import' );
|
205 |
-
wp_safe_redirect( $email_subscribers_import_page );
|
206 |
-
|
207 |
-
ES()->init_action_scheduler_queue_runner();
|
208 |
exit();
|
209 |
} else {
|
210 |
-
$message = __( 'There are no contacts to import in the uploaded CSV file. Please add some contacts and try again later
|
211 |
ES_Common::show_message( $message, 'error' );
|
212 |
}
|
213 |
|
@@ -216,10 +225,10 @@ class ES_Import_Subscribers {
|
|
216 |
ES_Common::show_message( $message, 'error' );
|
217 |
}
|
218 |
|
219 |
-
|
220 |
-
|
221 |
ES_Common::show_message( $message, 'error' );
|
222 |
-
|
223 |
} else {
|
224 |
$message = __( "Error: Please Select List", 'email-subscribers' );
|
225 |
ES_Common::show_message( $message, 'error' );
|
36 |
|
37 |
?>
|
38 |
|
39 |
+
<div class="tool-box">
|
40 |
+
<div class="meta-box-sortables ui-sortable bg-white shadow-md ml-12 mr-8 mt-6 rounded-lg">
|
41 |
+
<form class="ml-5 mr-4 text-left pt-4 mt-2 item-center" method="post" name="form_addemail" id="form_addemail" action="#" enctype="multipart/form-data">
|
42 |
+
<table class="max-w-full form-table">
|
43 |
+
<tbody>
|
44 |
+
|
45 |
+
<tr class="border-b border-gray-100">
|
46 |
+
<th scope="row" class="w-3/12 pt-3 pb-8 text-left">
|
47 |
+
<label for="tag-image"><span class="block ml-6 pr-4 text-sm font-medium text-gray-600 pb-1">
|
48 |
+
<?php _e( 'Select CSV file', 'email-subscribers' ); ?></span>
|
49 |
+
<p class="italic text-xs font-normal text-gray-400 mt-2 ml-6 leading-snug"><?php _e( 'Check CSV structure', 'email-subscribers' ); ?>
|
50 |
+
<a class="font-medium" target="_blank" href="<?php echo plugin_dir_url( __FILE__ ) . '../../admin/partials/sample.csv'; ?>"><?php _e( 'from here', 'email-subscribers' ); ?></a></p></label>
|
51 |
+
</th>
|
52 |
+
<td class="w-9/12 pb-3 ">
|
53 |
+
<input class="ml-12" type="file" name="file" id="file"/>
|
54 |
+
</td>
|
55 |
+
</tr>
|
56 |
+
<tr class="border-b border-gray-100">
|
57 |
+
<th scope="row" class="w-3/12 pt-3 pb-8 text-left">
|
58 |
+
<label for="tag-email-status"><span class="block ml-6 pr-4 text-sm font-medium text-gray-600 pb-2">
|
59 |
+
<?php _e( 'Select status', 'email-subscribers' ); ?> </span><p></p>
|
60 |
+
</label>
|
61 |
+
</th>
|
62 |
+
<td class="w-9/12 pb-3">
|
63 |
+
<select class="relative form-select shadow-sm border border-gray-400 w-1/3 ml-12" name="es_email_status" id="es_email_status">
|
64 |
+
<?php echo ES_Common::prepare_statuses_dropdown_options(); ?>
|
65 |
+
</select>
|
66 |
+
</td>
|
67 |
+
</tr>
|
68 |
+
<tr class="border-b border-gray-100">
|
69 |
+
<th scope="row" class="w-3/12 pt-3 pb-8 text-left">
|
70 |
+
<label for="tag-email-group"><span class="block ml-6 pr-4 text-sm font-medium text-gray-600 pb-2">
|
71 |
+
<?php _e( 'Select list', 'email-subscribers' ); ?>
|
72 |
+
</label>
|
73 |
+
</th>
|
74 |
+
<td class="w-9/12 pb-3">
|
75 |
+
<select class="relative form-select shadow-sm border border-gray-400 w-1/3 ml-12"
|
76 |
+
<select name="list_id" id="list_id">
|
77 |
+
<?php echo ES_Common::prepare_list_dropdown_options(); ?>
|
78 |
+
</select>
|
79 |
+
</td>
|
80 |
+
</tr>
|
81 |
+
</tbody>
|
82 |
+
</table>
|
83 |
+
<p style="padding-top:10px;">
|
84 |
+
<?php wp_nonce_field( 'import-contacts', 'import_contacts' ); ?>
|
85 |
+
<input type="submit" name="submit" class="cursor-pointer ig-es-primary-button px-4 py-2 ml-6 mr-2 my-4" value="<?php _e( "Import", 'email-subscribers' ); ?>" />
|
86 |
+
</p>
|
87 |
+
</form>
|
88 |
+
</div>
|
89 |
+
|
90 |
+
<?php
|
91 |
+
}
|
92 |
|
93 |
/**
|
94 |
* Show import contacts
|
103 |
|
104 |
?>
|
105 |
|
106 |
+
<div class="wrap max-w-full mt-1 font-sans">
|
107 |
+
<header class="ml-12 wp-heading-inline">
|
108 |
+
|
109 |
+
<div class="mt-2">
|
110 |
+
<h2 class="text-xl font-medium text-gray-800 sm:leading-9 sm:truncate"><h1 class="text-xl leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate">
|
111 |
+
<span class="text-2xl font-bold leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate"> <a href="admin.php?page=es_subscribers"><?php _e( 'Audience', 'email-subscribers' ); ?> </a> </span> > <?php _e('Import Contacts', 'email-subscribers'); ?>
|
112 |
+
<?php
|
113 |
+
ES_Common::prepare_main_header_navigation( $audience_tab_main_navigation );
|
114 |
+
?>
|
115 |
+
</div>
|
116 |
+
</h2>
|
117 |
+
|
118 |
+
</header>
|
119 |
+
|
120 |
+
<div class="ml-12 mr-8"><hr class="wp-header-end"></div>
|
121 |
+
<?php $this->import_callback(); ?>
|
122 |
+
</div>
|
123 |
+
|
124 |
+
<?php
|
125 |
+
}
|
126 |
|
127 |
/**
|
128 |
* Start import process after validating sumitted data
|
182 |
$uploaded_file = $_FILES['file'];
|
183 |
$upload_overrides = array( 'test_form' => false );
|
184 |
|
185 |
+
if ( ! function_exists( 'wp_handle_upload' ) ) {
|
186 |
+
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
187 |
+
}
|
188 |
|
189 |
+
$import_file = wp_handle_upload( $uploaded_file, $upload_overrides );
|
190 |
|
191 |
+
if ( $import_file && ! isset( $import_file['error'] ) ) {
|
192 |
|
193 |
+
$file_pointer = file( $import_file['file'] );
|
194 |
if ( is_array( $file_pointer ) && ! empty( $file_pointer ) ) {
|
195 |
$total_contacts_to_process = count( $file_pointer ) - 1;
|
196 |
|
197 |
if( ! empty( $total_contacts_to_process ) ) {
|
198 |
+
$contact_background_process_data = array(
|
199 |
'action' => 'import_contact',
|
200 |
'contact_status' => $status,
|
201 |
'list_id' => $list_id,
|
210 |
|
211 |
as_schedule_single_action( time(), 'ig_es_import_contacts_from_csv' );
|
212 |
|
213 |
+
ES()->init_action_scheduler_queue_runner();
|
214 |
+
|
215 |
$email_subscribers_import_page = admin_url( 'admin.php?page=es_subscribers&action=import' );
|
216 |
+
wp_safe_redirect( $email_subscribers_import_page );
|
|
|
|
|
217 |
exit();
|
218 |
} else {
|
219 |
+
$message = __( 'There are no contacts to import in the uploaded CSV file. Please add some contacts and try again later.', 'email-subscribers' );
|
220 |
ES_Common::show_message( $message, 'error' );
|
221 |
}
|
222 |
|
225 |
ES_Common::show_message( $message, 'error' );
|
226 |
}
|
227 |
|
228 |
+
} else {
|
229 |
+
$message = $import_file['error'];
|
230 |
ES_Common::show_message( $message, 'error' );
|
231 |
+
}
|
232 |
} else {
|
233 |
$message = __( "Error: Please Select List", 'email-subscribers' );
|
234 |
ES_Common::show_message( $message, 'error' );
|
lite/includes/classes/class-es-lists-table.php
CHANGED
@@ -72,11 +72,11 @@ class ES_Lists_Table extends WP_List_Table {
|
|
72 |
$list = ig_es_get_request_data( 'list' );
|
73 |
echo $this->edit_list( absint( $list ) );
|
74 |
} else { ?>
|
75 |
-
|
76 |
-
<h1 class="wp-heading-inline text-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
<div id="poststuff">
|
81 |
<div id="post-body" class="metabox-holder column-1">
|
82 |
<div id="post-body-content">
|
@@ -250,60 +250,68 @@ class ES_Lists_Table extends WP_List_Table {
|
|
250 |
<div class="md:flex md:items-center md:justify-between justify-center">
|
251 |
<div class="flex-1 min-w-0">
|
252 |
<h1 class="text-xl leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate">
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
|
|
265 |
</div>
|
266 |
-
</
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
</div>
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
<div class="h-10 relative">
|
285 |
|
286 |
-
|
|
|
287 |
</div>
|
288 |
</div>
|
289 |
</div>
|
290 |
-
</div>
|
291 |
|
292 |
-
|
293 |
-
|
294 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
295 |
</div>
|
296 |
</div>
|
|
|
|
|
297 |
</div>
|
298 |
|
299 |
-
<br class="clear">
|
300 |
</div>
|
301 |
|
302 |
-
|
303 |
-
|
304 |
-
<?php
|
305 |
|
306 |
-
|
307 |
|
308 |
/**
|
309 |
* Save list
|
@@ -468,7 +476,7 @@ class ES_Lists_Table extends WP_List_Table {
|
|
468 |
break;
|
469 |
|
470 |
case 'export':
|
471 |
-
return "<a href='admin.php?page=download_report&report=users&status=select_list&list_id={$item['id']}'
|
472 |
default:
|
473 |
return '';
|
474 |
}
|
72 |
$list = ig_es_get_request_data( 'list' );
|
73 |
echo $this->edit_list( absint( $list ) );
|
74 |
} else { ?>
|
75 |
+
|
76 |
+
<h1 class=" wp-heading-inline"><span class="text-2xl font-bold leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate"><?php _e( 'Audience', 'email-subscribers' ); ?> </a>
|
77 |
+
</span> > <?php _e('Lists', 'email-subscribers'); ?> <a href="admin.php?page=es_lists&action=new" class="pt-2 ig-es-title-button px-2 py-2 mx-2"><?php _e('Add New','email-subscribers'); ?></a></h1>
|
78 |
+
<br>
|
79 |
+
|
80 |
<div id="poststuff">
|
81 |
<div id="post-body" class="metabox-holder column-1">
|
82 |
<div id="post-body-content">
|
250 |
<div class="md:flex md:items-center md:justify-between justify-center">
|
251 |
<div class="flex-1 min-w-0">
|
252 |
<h1 class="text-xl leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate">
|
253 |
+
<span class="text-2xl font-bold leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate">
|
254 |
+
<a href="admin.php?page=es_subscribers"><?php _e('Audience ','email-subscribers'); ?></a></span> >
|
255 |
+
<a href="admin.php?page=es_lists&action=manage-lists"><?php _e(' Lists ','email-subscribers'); ?></a> >
|
256 |
+
<?php
|
257 |
+
if ( $is_new ) {
|
258 |
+
_e( 'Add New', 'email-subscribers' );
|
259 |
+
} else {
|
260 |
+
_e( 'Edit List', 'email-subscribers' );
|
261 |
+
}
|
262 |
+
|
263 |
+
?>
|
264 |
+
</h1>
|
265 |
+
</div>
|
266 |
</div>
|
267 |
+
</header>
|
268 |
+
<div class="ml-12 mr-8"><hr class="wp-header-end"></div>
|
269 |
+
<div class="rounded max-w-full ">
|
270 |
+
<div id="poststuff">
|
271 |
+
<div id="post-body" class="metabox-holder column-1">
|
272 |
+
<div id="post-body-content">
|
273 |
+
<div class="meta-box-sortables ui-sortable bg-white shadow-md ml-12 mr-8 mt-4 rounded-lg">
|
274 |
+
<form class="ml-5 mr-4 text-left pt-8 flex-row mt-2 item-center " method="post" action="admin.php?page=es_lists&action=<?php echo $action; ?>&list=<?php echo $id; ?>&_wpnonce=<?php echo $nonce; ?>">
|
275 |
+
|
276 |
+
<div class="flex flex-row ">
|
277 |
+
<div class="flex w-1/5">
|
278 |
+
<div class="ml-4 pt-6 px-3 ">
|
279 |
+
<label for="name" class="block text-sm leading-5 font-medium text-gray-600"><?php _e( 'List Name', 'email-subscribers' ); ?></label>
|
280 |
+
</div>
|
281 |
</div>
|
282 |
+
<div class="flex">
|
283 |
+
<div class="ml-16 mb-4 h-10 mr-4 mt-4">
|
284 |
+
<div class="h-10 relative">
|
|
|
285 |
|
286 |
+
<input class="form-input block border-gray-400 w-full pl-3 pr-12 focus:bg-gray-100 sm:text-sm sm:leading-5" placeholder="Enter list name" id="name" name="list_name" value="<?php echo esc_attr( $list_name ); ?>"/>
|
287 |
+
</div>
|
288 |
</div>
|
289 |
</div>
|
290 |
</div>
|
|
|
291 |
|
292 |
+
<input type="hidden" name="submitted" value="submitted"/>
|
293 |
+
<input type="submit" name="submit" id="submit" class="cursor-pointer ig-es-primary-button px-4 py-2 my-4 ml-6 mr-2" value="<?php if ( $is_new ) {
|
294 |
+
_e( 'Save List', 'email-subscribers' );
|
295 |
+
}
|
296 |
+
else{
|
297 |
+
_e( 'Save Changes', 'email-subscribers' );
|
298 |
+
}
|
299 |
+
|
300 |
+
?>"/><!-- <?php submit_button(); ?> -->
|
301 |
+
<a href="admin.php?page=es_lists&action=manage-lists" class="cursor-pointer rounded-md border border-indigo-600 hover:shadow-md focus:outline-none focus:shadow-outline-indigo text-sm leading-5 font-medium transition ease-in-out duration-150 px-4 my-2 py-2 mx-2 ">Cancel</a>
|
302 |
+
</form>
|
303 |
+
</div>
|
304 |
</div>
|
305 |
</div>
|
306 |
+
|
307 |
+
<br class="clear">
|
308 |
</div>
|
309 |
|
|
|
310 |
</div>
|
311 |
|
312 |
+
<?php
|
|
|
|
|
313 |
|
314 |
+
}
|
315 |
|
316 |
/**
|
317 |
* Save list
|
476 |
break;
|
477 |
|
478 |
case 'export':
|
479 |
+
return "<a href='admin.php?page=download_report&report=users&status=select_list&list_id={$item['id']}'><svg fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24' class='w-8 h-8 text-indigo-600 hover:text-indigo-500 active:text-indigo-600'><path d='M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z'></path></svg></a>";
|
480 |
default:
|
481 |
return '';
|
482 |
}
|
lite/includes/classes/class-es-post-notifications.php
CHANGED
@@ -363,7 +363,15 @@ class ES_Post_Notifications_Table {
|
|
363 |
</tbody>
|
364 |
</table>
|
365 |
<div>
|
366 |
-
<p class="submit"><input type="submit" name="submit" id="ig_es_campaign_post_notification_submit_button" class="cursor-pointer ig-es-primary-button px-4 py-2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
367 |
</div>
|
368 |
|
369 |
</form>
|
363 |
</tbody>
|
364 |
</table>
|
365 |
<div>
|
366 |
+
<p class="submit"><input type="submit" name="submit" id="ig_es_campaign_post_notification_submit_button" class="cursor-pointer ig-es-primary-button px-4 py-2 ml-6 mr-2" value="<?php if ( $is_new ) {
|
367 |
+
_e( 'Save Campaign', 'email-subscribers' );
|
368 |
+
}
|
369 |
+
else{
|
370 |
+
_e( 'Save Changes', 'email-subscribers' );
|
371 |
+
}
|
372 |
+
|
373 |
+
?>"/>
|
374 |
+
<a href="admin.php?page=es_campaigns" class="cursor-pointer rounded-md border border-indigo-600 hover:shadow-md focus:outline-none focus:shadow-outline-indigo text-sm leading-5 font-medium transition ease-in-out duration-150 px-4 my-2 py-2 mx-2 ">Cancel</a></p>
|
375 |
</div>
|
376 |
|
377 |
</form>
|
lite/includes/feedback/class-ig-feedback.php
CHANGED
@@ -4,21 +4,21 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
4 |
exit; // Exit if accessed directly.
|
5 |
}
|
6 |
|
7 |
-
if ( ! class_exists( '
|
8 |
/**
|
9 |
* IG Feedback
|
10 |
*
|
11 |
* The IG Feedback class adds functionality to get quick interactive feedback from users.
|
12 |
* There are different types of feedabck widget like Stars, Emoji, Thubms Up/ Down, Number etc.
|
13 |
*
|
14 |
-
* @class
|
15 |
* @since 1.0.0
|
16 |
* @copyright Copyright (c) 2019, Icegram
|
17 |
* @license https://opensource.org/licenses/gpl-license GNU Public License
|
18 |
* @author Icegram
|
19 |
* @package feedback
|
20 |
*/
|
21 |
-
class
|
22 |
|
23 |
/**
|
24 |
* Version of Feedback Library
|
@@ -27,7 +27,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_1' ) ) {
|
|
27 |
* @var string
|
28 |
*
|
29 |
*/
|
30 |
-
public $version = '1.2.
|
31 |
/**
|
32 |
* The API URL where we will send feedback data.
|
33 |
*
|
4 |
exit; // Exit if accessed directly.
|
5 |
}
|
6 |
|
7 |
+
if ( ! class_exists( 'IG_Feedback_V_1_2_2' ) ) {
|
8 |
/**
|
9 |
* IG Feedback
|
10 |
*
|
11 |
* The IG Feedback class adds functionality to get quick interactive feedback from users.
|
12 |
* There are different types of feedabck widget like Stars, Emoji, Thubms Up/ Down, Number etc.
|
13 |
*
|
14 |
+
* @class IG_Feedback_V_1_2_2
|
15 |
* @since 1.0.0
|
16 |
* @copyright Copyright (c) 2019, Icegram
|
17 |
* @license https://opensource.org/licenses/gpl-license GNU Public License
|
18 |
* @author Icegram
|
19 |
* @package feedback
|
20 |
*/
|
21 |
+
class IG_Feedback_V_1_2_2 {
|
22 |
|
23 |
/**
|
24 |
* Version of Feedback Library
|
27 |
* @var string
|
28 |
*
|
29 |
*/
|
30 |
+
public $version = '1.2.2';
|
31 |
/**
|
32 |
* The API URL where we will send feedback data.
|
33 |
*
|
lite/includes/feedback/class-ig-tracker.php
CHANGED
@@ -4,15 +4,15 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
4 |
exit; // Exit if accessed directly.
|
5 |
}
|
6 |
|
7 |
-
if ( ! class_exists( '
|
8 |
|
9 |
/**
|
10 |
-
* Class
|
11 |
*
|
12 |
* Icegram tracker handler class is responsible for sending anonymous plugin
|
13 |
* data to Icegram servers for users that actively allowed data tracking.
|
14 |
*
|
15 |
-
* @class
|
16 |
* @since 1.0.0
|
17 |
*
|
18 |
* @copyright Copyright (c) 2019, Icegram
|
@@ -20,7 +20,7 @@ if ( ! class_exists( 'IG_Tracker_V_1_2_1' ) ) {
|
|
20 |
* @author Icegram
|
21 |
* @package feedback
|
22 |
*/
|
23 |
-
class
|
24 |
|
25 |
/**
|
26 |
* Get Active, Inactive or all plugins info
|
@@ -112,6 +112,60 @@ if ( ! class_exists( 'IG_Tracker_V_1_2_1' ) ) {
|
|
112 |
return self::get_plugins( 'inactive', $details );
|
113 |
}
|
114 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
/**
|
116 |
* Get Current Theme Info
|
117 |
*
|
4 |
exit; // Exit if accessed directly.
|
5 |
}
|
6 |
|
7 |
+
if ( ! class_exists( 'IG_Tracker_V_1_2_2' ) ) {
|
8 |
|
9 |
/**
|
10 |
+
* Class IG_Tracker_V_1_2_2
|
11 |
*
|
12 |
* Icegram tracker handler class is responsible for sending anonymous plugin
|
13 |
* data to Icegram servers for users that actively allowed data tracking.
|
14 |
*
|
15 |
+
* @class IG_Tracker_V_1_2_2
|
16 |
* @since 1.0.0
|
17 |
*
|
18 |
* @copyright Copyright (c) 2019, Icegram
|
20 |
* @author Icegram
|
21 |
* @package feedback
|
22 |
*/
|
23 |
+
class IG_Tracker_V_1_2_2 {
|
24 |
|
25 |
/**
|
26 |
* Get Active, Inactive or all plugins info
|
112 |
return self::get_plugins( 'inactive', $details );
|
113 |
}
|
114 |
|
115 |
+
/**
|
116 |
+
* Check whether plugin is active or not.
|
117 |
+
*
|
118 |
+
* @param string $plugin
|
119 |
+
*
|
120 |
+
* @return bool
|
121 |
+
*
|
122 |
+
* @since 1.2.2
|
123 |
+
*/
|
124 |
+
public static function is_plugin_activated( $plugin = '' ) {
|
125 |
+
if ( empty( $plugin ) ) {
|
126 |
+
return false;
|
127 |
+
}
|
128 |
+
|
129 |
+
$active_plugins = self::get_active_plugins();
|
130 |
+
|
131 |
+
if ( count( $active_plugins ) == 0 ) {
|
132 |
+
return false;
|
133 |
+
}
|
134 |
+
|
135 |
+
if ( in_array( $plugin, $active_plugins ) ) {
|
136 |
+
return true;
|
137 |
+
}
|
138 |
+
|
139 |
+
return false;
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Is plugin installed?
|
144 |
+
*
|
145 |
+
* @param string $plugin
|
146 |
+
*
|
147 |
+
* @return bool
|
148 |
+
*
|
149 |
+
* @since 1.2.2
|
150 |
+
*/
|
151 |
+
public static function is_plugin_installed( $plugin = '' ) {
|
152 |
+
if ( empty( $plugin ) ) {
|
153 |
+
return false;
|
154 |
+
}
|
155 |
+
|
156 |
+
$all_plugins = self::get_plugins();
|
157 |
+
|
158 |
+
if ( count( $all_plugins ) == 0 ) {
|
159 |
+
return false;
|
160 |
+
}
|
161 |
+
|
162 |
+
if ( in_array( $plugin, $all_plugins ) ) {
|
163 |
+
return true;
|
164 |
+
}
|
165 |
+
|
166 |
+
return false;
|
167 |
+
}
|
168 |
+
|
169 |
/**
|
170 |
* Get Current Theme Info
|
171 |
*
|
lite/includes/notices/views/ig-es-offer.php
CHANGED
@@ -6,9 +6,6 @@
|
|
6 |
padding-top: 1.2em;
|
7 |
}
|
8 |
|
9 |
-
.ig_es_offer img {
|
10 |
-
/*width: 100%;*/
|
11 |
-
}
|
12 |
</style>
|
13 |
<?php
|
14 |
|
@@ -17,4 +14,4 @@ if ( ( get_option( 'ig_es_offer_covid_19' ) !== 'yes' ) && ( $ig_current_date >=
|
|
17 |
<a target="_blank" href="?es_dismiss_admin_notice=1&option_name=offer_covid_19"><img src="<?php echo ES_PLUGIN_URL ?>/lite/admin/images/covid-19.png"/></a>
|
18 |
</div>
|
19 |
|
20 |
-
<?php } ?>
|
6 |
padding-top: 1.2em;
|
7 |
}
|
8 |
|
|
|
|
|
|
|
9 |
</style>
|
10 |
<?php
|
11 |
|
14 |
<a target="_blank" href="?es_dismiss_admin_notice=1&option_name=offer_covid_19"><img src="<?php echo ES_PLUGIN_URL ?>/lite/admin/images/covid-19.png"/></a>
|
15 |
</div>
|
16 |
|
17 |
+
<?php } ?>
|
lite/includes/pro-features.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
|
|
|
3 |
add_filter( 'ig_es_registered_settings', 'ig_es_add_upsale', 10, 2 );
|
|
|
4 |
|
5 |
// Add additional tab "Comments" in Audience > Sync
|
6 |
add_filter( 'ig_es_sync_users_tabs', 'ig_es_add_sync_users_tabs', 11, 1 );
|
@@ -13,32 +15,197 @@ add_action( 'ig_es_sync_users_tabs_wpforms', 'ig_es_add_wpforms_tab_settings' );
|
|
13 |
add_action( 'ig_es_sync_users_tabs_ninja_forms', 'ig_es_add_ninja_forms_tab_settings' );
|
14 |
add_action( 'ig_es_sync_users_tabs_edd', 'ig_es_add_edd_tab_settings' );
|
15 |
|
16 |
-
|
17 |
add_action( 'edit_form_advanced', 'add_spam_score_utm_link' );
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
function ig_es_add_upsale( $fields ) {
|
20 |
-
global $ig_es_tracker;
|
21 |
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
);
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
$
|
36 |
-
'
|
37 |
-
|
38 |
-
|
39 |
-
|
|
|
|
|
40 |
);
|
41 |
-
$fields['email_sending'] = array_merge( $fields['email_sending'], $field_smtp );
|
42 |
|
43 |
}
|
44 |
|
@@ -106,7 +273,7 @@ function ig_es_add_sync_users_tabs( $tabs ) {
|
|
106 |
'indicator_label' => 'Starter'
|
107 |
);
|
108 |
}
|
109 |
-
|
110 |
// Show only if EDD is installed & activated
|
111 |
$edd_plugin = 'easy-digital-downloads/easy-digital-downloads.php';
|
112 |
if ( in_array( $edd_plugin, $active_plugins ) ) {
|
@@ -358,7 +525,7 @@ function add_spam_score_utm_link() {
|
|
358 |
if ( $post->post_type !== 'es_template' ) {
|
359 |
return;
|
360 |
}
|
361 |
-
|
362 |
if ( ! ES()->is_starter() ) {
|
363 |
?>
|
364 |
<script>
|
1 |
<?php
|
2 |
|
3 |
+
add_filter( 'ig_es_settings_tabs', 'ig_es_add_settings_tabs', 10, 1 );
|
4 |
add_filter( 'ig_es_registered_settings', 'ig_es_add_upsale', 10, 2 );
|
5 |
+
add_filter( 'ig_es_mailers', 'ig_es_mailers_promo', 10, 1 );
|
6 |
|
7 |
// Add additional tab "Comments" in Audience > Sync
|
8 |
add_filter( 'ig_es_sync_users_tabs', 'ig_es_add_sync_users_tabs', 11, 1 );
|
15 |
add_action( 'ig_es_sync_users_tabs_ninja_forms', 'ig_es_add_ninja_forms_tab_settings' );
|
16 |
add_action( 'ig_es_sync_users_tabs_edd', 'ig_es_add_edd_tab_settings' );
|
17 |
|
|
|
18 |
add_action( 'edit_form_advanced', 'add_spam_score_utm_link' );
|
19 |
|
20 |
+
/**
|
21 |
+
* Promote SMTP mailer for free
|
22 |
+
*
|
23 |
+
* @param $mailers
|
24 |
+
*
|
25 |
+
* @return mixed
|
26 |
+
*
|
27 |
+
* @since 4.4.5
|
28 |
+
*/
|
29 |
+
function ig_es_mailers_promo( $mailers ) {
|
30 |
+
|
31 |
+
if ( ! ES()->is_premium() ) {
|
32 |
+
|
33 |
+
$mailers['smtp'] = array(
|
34 |
+
'name' => 'SMTP',
|
35 |
+
'logo' => ES_PLUGIN_URL . 'lite/admin/images/smtp.png',
|
36 |
+
'is_premium' => true,
|
37 |
+
'url' => ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'smtp_mailer' )
|
38 |
+
)
|
39 |
+
);
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
return $mailers;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Promote User Permission Settings
|
48 |
+
*
|
49 |
+
* @return false|string
|
50 |
+
*
|
51 |
+
* @since 4.4.5
|
52 |
+
*/
|
53 |
+
function render_user_permissions_settings_fields_premium() {
|
54 |
+
$wp_roles = new WP_Roles();
|
55 |
+
$roles = $wp_roles->get_names();
|
56 |
+
$user_roles = array();
|
57 |
+
|
58 |
+
$url = ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'user_roles' ) );
|
59 |
+
|
60 |
+
ob_start();
|
61 |
+
?>
|
62 |
+
|
63 |
+
<div class="text-center py-4 lg:px-4 my-8">
|
64 |
+
<div class="p-2 bg-indigo-800 items-center text-indigo-100 leading-none lg:rounded-full flex lg:inline-flex mx-4 leading-normal" role="alert">
|
65 |
+
<span class="font-semibold text-left flex-auto">
|
66 |
+
Customize user roles permissions with <a href="<?php echo $url; ?>" target="_blank" class="text-indigo-400">Email Subscribers PRO</a>
|
67 |
+
</span>
|
68 |
+
</div>
|
69 |
+
</div>
|
70 |
+
|
71 |
+
|
72 |
+
<table class="min-w-full rounded-lg">
|
73 |
+
<thead>
|
74 |
+
<tr class="bg-gray-100 text-xs leading-4 font-medium text-gray-500 uppercase tracking-wider">
|
75 |
+
<th class="px-5 py-4"><?php _e( 'Roles', 'email-subscribers' ); ?></th>
|
76 |
+
<th class="px-2 py-4 text-center"><?php _e( 'Audience', 'email-subscribers' ); ?></th>
|
77 |
+
<th class="px-2 py-4 text-center"><?php _e( 'Forms', 'email-subscribers' ); ?></th>
|
78 |
+
<th class="px-2 py-4 text-center"><?php _e( 'Campaigns', 'email-subscribers' ); ?></th>
|
79 |
+
<th class="px-2 py-4 text-center"><?php _e( 'Reports', 'email-subscribers' ); ?></th>
|
80 |
+
<th class="px-2 py-4 text-center"><?php _e( 'Sequences', 'email-subscribers' ); ?></th>
|
81 |
+
<th class="px-2 py-4 text-center"><?php _e( 'Workflows', 'email-subscribers' ); ?></th>
|
82 |
+
</tr>
|
83 |
+
</thead>
|
84 |
+
<tbody class="bg-white">
|
85 |
+
<?php foreach ( $roles as $key => $value ) {
|
86 |
+
?>
|
87 |
+
<tr class="border-b border-gray-200">
|
88 |
+
<td class="pl-8 py-4 ">
|
89 |
+
<div class="flex items-center">
|
90 |
+
<div class="flex-shrink-0">
|
91 |
+
<span class="text-sm leading-5 font-medium text-center text-gray-800"><?php echo $value; ?></span>
|
92 |
+
</div>
|
93 |
+
</div>
|
94 |
+
</td>
|
95 |
+
<td class="whitespace-no-wrap text-center">
|
96 |
+
<input type="checkbox" name="" disabled <?php ! empty( $user_roles['audience'][ $key ] ) ? checked( 'yes', $user_roles['audience'][ $key ] ) : '' ?> value="yes" class=" form-checkbox text-indigo-600">
|
97 |
+
</td>
|
98 |
+
<td class="whitespace-no-wrap text-center">
|
99 |
+
<input type="checkbox" name="" disabled<?php ! empty( $user_roles['forms'][ $key ] ) ? checked( 'yes', $user_roles['forms'][ $key ] ) : '' ?> value="yes" class=" form-checkbox text-indigo-600">
|
100 |
+
</td>
|
101 |
+
<td class="whitespace-no-wrap text-center">
|
102 |
+
<input type="checkbox" name="" disabled <?php ! empty( $user_roles['campaigns'][ $key ] ) ? checked( 'yes', $user_roles['campaigns'][ $key ] ) : '' ?> value="yes" class=" form-checkbox text-indigo-600">
|
103 |
+
</td>
|
104 |
+
<td class="whitespace-no-wrap text-center">
|
105 |
+
<input type="checkbox" name="" disabled <?php ! empty( $user_roles['reports'][ $key ] ) ? checked( 'yes', $user_roles['reports'][ $key ] ) : '' ?> value="yes" class=" form-checkbox text-indigo-600">
|
106 |
+
</td>
|
107 |
+
<td class="whitespace-no-wrap text-center">
|
108 |
+
<input type="checkbox" name="" disabled <?php ! empty( $user_roles['sequences'][ $key ] ) ? checked( 'yes', $user_roles['sequences'][ $key ] ) : '' ?> value="yes" class=" form-checkbox text-indigo-600">
|
109 |
+
</td>
|
110 |
+
<td class="whitespace-no-wrap text-center">
|
111 |
+
<input type="checkbox" name="" disabled <?php ! empty( $user_roles['workflows'][ $key ] ) ? checked( 'yes', $user_roles['workflows'][ $key ] ) : '' ?> value="yes" class=" form-checkbox text-indigo-600">
|
112 |
+
</td>
|
113 |
+
</tr>
|
114 |
+
<?php
|
115 |
+
}
|
116 |
+
?>
|
117 |
+
</tbody>
|
118 |
+
</table>
|
119 |
+
|
120 |
+
|
121 |
+
<?php
|
122 |
+
$html = ob_get_clean();
|
123 |
+
|
124 |
+
return $html;
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* @param $es_settings_tabs
|
129 |
+
*
|
130 |
+
* @return mixed
|
131 |
+
*/
|
132 |
+
function ig_es_add_settings_tabs( $es_settings_tabs ) {
|
133 |
+
|
134 |
+
if ( ! ES()->is_premium() ) {
|
135 |
+
$es_settings_tabs['user_roles'] = array( 'icon' => 'groups', 'name' => __( 'User Roles', 'email-subscribers' ) );
|
136 |
+
}
|
137 |
+
|
138 |
+
return $es_settings_tabs;
|
139 |
+
}
|
140 |
+
|
141 |
function ig_es_add_upsale( $fields ) {
|
|
|
142 |
|
143 |
+
if ( ! ES()->is_premium() ) {
|
144 |
+
|
145 |
+
// General Settings
|
146 |
+
$track_link_click = array(
|
147 |
+
'ig_es_track_link_click' => array(
|
148 |
+
'id' => 'ig_es_track_link_click_p',
|
149 |
+
'name' => __( 'Track Clicks', 'email-subscribers' ),
|
150 |
+
'type' => 'checkbox',
|
151 |
+
'default' => 'no',
|
152 |
+
'is_premium' => true,
|
153 |
+
'link' => ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'track_clicks' ) ),
|
154 |
+
'disabled' => true
|
155 |
+
)
|
156 |
+
);
|
157 |
+
|
158 |
+
$general_fields = $fields['general'];
|
159 |
|
160 |
+
$general_fields = ig_es_array_insert_after( $general_fields, 'ig_es_track_email_opens', $track_link_click );
|
161 |
+
|
162 |
+
$fields['general'] = $general_fields;
|
163 |
+
|
164 |
+
// Security Settings
|
165 |
+
$fake_domains['ig_es_enable_known_attackers_domains'] = array(
|
166 |
+
'id' => 'ig_es_enable_known_attackers_domains_p',
|
167 |
+
'name' => __( 'Block Known Attackers', 'email-subscribers' ),
|
168 |
+
'info' => __( 'Stop known spam bot attacker domains from signing up. Keeps this list up-to-date with Icegram servers.', 'email-subscribers' ),
|
169 |
+
'type' => 'checkbox',
|
170 |
+
'default' => 'no',
|
171 |
+
'is_premium' => true,
|
172 |
+
'link' => ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'known_attackers' ) ),
|
173 |
+
'disabled' => true,
|
174 |
+
);
|
175 |
+
|
176 |
+
$managed_blocked_domains['ig_es_enable_disposable_domains'] = array(
|
177 |
+
'id' => 'ig_es_enable_disposable_domains_p',
|
178 |
+
'name' => __( 'Block Temporary / Fake Emails', 'email-subscribers' ),
|
179 |
+
'info' => __( 'Plenty of sites provide disposable / fake / temporary email addresses. People use them when they don\'t want to give you their real email. Block these to keep your list clean. Automatically updated.', 'email-subscribers' ),
|
180 |
+
'type' => 'checkbox',
|
181 |
+
'default' => 'no',
|
182 |
+
'is_premium' => true,
|
183 |
+
'link' => ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'disposable_domains' ) ),
|
184 |
+
'disabled' => true,
|
185 |
+
);
|
186 |
+
|
187 |
+
//add captcha setting
|
188 |
+
$field_captcha['enable_captcha'] = array(
|
189 |
+
'id' => 'ig_es_enable_captcha_p',
|
190 |
+
'name' => __( 'Enable Captcha', 'email-subscribers' ),
|
191 |
+
'info' => __( 'Show a captcha in subscription forms to protect from bot signups.', 'email-subscribers' ),
|
192 |
+
'type' => 'checkbox',
|
193 |
+
'default' => 'no',
|
194 |
+
'is_premium' => true,
|
195 |
+
'link' => ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'enable_captcha' ) ),
|
196 |
+
'disabled' => true,
|
197 |
);
|
198 |
+
|
199 |
+
$fields['security_settings'] = array_merge( $fields['security_settings'], $fake_domains, $managed_blocked_domains, $field_captcha );
|
200 |
+
|
201 |
+
$fields['user_roles'] = array(
|
202 |
+
'ig_es_user_roles' => array(
|
203 |
+
'id' => 'ig_es_user_roles',
|
204 |
+
'name' => '',
|
205 |
+
'type' => 'html',
|
206 |
+
'html' => render_user_permissions_settings_fields_premium()
|
207 |
+
)
|
208 |
);
|
|
|
209 |
|
210 |
}
|
211 |
|
273 |
'indicator_label' => 'Starter'
|
274 |
);
|
275 |
}
|
276 |
+
|
277 |
// Show only if EDD is installed & activated
|
278 |
$edd_plugin = 'easy-digital-downloads/easy-digital-downloads.php';
|
279 |
if ( in_array( $edd_plugin, $active_plugins ) ) {
|
525 |
if ( $post->post_type !== 'es_template' ) {
|
526 |
return;
|
527 |
}
|
528 |
+
|
529 |
if ( ! ES()->is_starter() ) {
|
530 |
?>
|
531 |
<script>
|
lite/includes/workflows/admin/views/meta-box-trigger.php
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
/**
|
3 |
* Admin trigger metabox
|
4 |
*
|
5 |
-
* @author Icegram
|
6 |
* @since 4.4.1
|
|
|
7 |
* @version 1.0
|
8 |
* @package Email Subscribers
|
9 |
*/
|
@@ -15,10 +15,12 @@ foreach ( ES_Workflow_Triggers::get_all() as $trigger ) {
|
|
15 |
$trigger_list[ $trigger->get_group() ][ $trigger->get_name() ] = $trigger;
|
16 |
}
|
17 |
|
18 |
-
if ( ! ES()->
|
|
|
19 |
$starter_trigger_list = array(
|
|
|
20 |
'Comment' => array(
|
21 |
-
'ig_es_comment_added' => __( 'Comment
|
22 |
),
|
23 |
'Form' => array(
|
24 |
'ig_es_cf7_submitted' => __( 'Contact Form 7 Submitted', 'email-subscribers' ),
|
@@ -27,46 +29,47 @@ if ( ! ES()->is_starter() ) {
|
|
27 |
'ig_es_gravity_forms_submitted' => __( 'Gravity Form Submitted', 'email-subscribers' ),
|
28 |
),
|
29 |
'Order' => array(
|
30 |
-
'ig_es_wc_order_completed' => __( 'WooCommerce
|
31 |
-
'ig_es_edd_complete_purchase' => __( 'EDD
|
32 |
-
'ig_es_give_donation_made' => __( 'Give
|
33 |
),
|
34 |
);
|
35 |
-
|
|
|
36 |
}
|
37 |
?>
|
38 |
<table class="ig-es-table">
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
<?php foreach ( $trigger_list as $trigger_group => $triggers ) : ?>
|
48 |
-
|
49 |
<?php
|
50 |
foreach ( $triggers as $trigger_name => $_trigger ) :
|
51 |
if ( $_trigger instanceof ES_Workflow_Trigger ) :
|
52 |
?>
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
?>
|
62 |
-
|
63 |
<?php endforeach; ?>
|
64 |
-
|
65 |
<?php if ( $current_trigger && $current_trigger->get_description() ) : ?>
|
66 |
-
|
67 |
<?php else : ?>
|
68 |
-
|
69 |
<?php endif; ?>
|
70 |
-
|
71 |
-
|
72 |
</table>
|
2 |
/**
|
3 |
* Admin trigger metabox
|
4 |
*
|
|
|
5 |
* @since 4.4.1
|
6 |
+
* @author Icegram
|
7 |
* @version 1.0
|
8 |
* @package Email Subscribers
|
9 |
*/
|
15 |
$trigger_list[ $trigger->get_group() ][ $trigger->get_name() ] = $trigger;
|
16 |
}
|
17 |
|
18 |
+
if ( ! ES()->is_premium() ) {
|
19 |
+
|
20 |
$starter_trigger_list = array(
|
21 |
+
|
22 |
'Comment' => array(
|
23 |
+
'ig_es_comment_added' => __( 'Comment Added', 'email-subscribers' ),
|
24 |
),
|
25 |
'Form' => array(
|
26 |
'ig_es_cf7_submitted' => __( 'Contact Form 7 Submitted', 'email-subscribers' ),
|
29 |
'ig_es_gravity_forms_submitted' => __( 'Gravity Form Submitted', 'email-subscribers' ),
|
30 |
),
|
31 |
'Order' => array(
|
32 |
+
'ig_es_wc_order_completed' => __( 'WooCommerce Order Completed', 'email-subscribers' ),
|
33 |
+
'ig_es_edd_complete_purchase' => __( 'EDD Purchase Completed', 'email-subscribers' ),
|
34 |
+
'ig_es_give_donation_made' => __( 'Give Donation Added', 'email-subscribers' ),
|
35 |
),
|
36 |
);
|
37 |
+
|
38 |
+
$trigger_list = array_merge( $trigger_list, $starter_trigger_list );
|
39 |
}
|
40 |
?>
|
41 |
<table class="ig-es-table">
|
42 |
+
<tr class="ig-es-table__row" data-name="trigger_name" data-type="select"
|
43 |
+
data-required="1">
|
44 |
+
<td class="ig-es-table__col ig-es-table__col--label">
|
45 |
+
<label><?php esc_html_e( 'Trigger', 'email-subscribers' ); ?> <span class="required">*</span></label>
|
46 |
+
</td>
|
47 |
+
<td class="ig-es-table__col ig-es-table__col--field">
|
48 |
+
<select name="ig_es_workflow_data[trigger_name]" class="ig-es-field js-trigger-select" required>
|
49 |
+
<option value=""><?php esc_html_e( '[Select]', 'email-subscribers' ); ?></option>
|
50 |
<?php foreach ( $trigger_list as $trigger_group => $triggers ) : ?>
|
51 |
+
<optgroup label="<?php echo esc_attr( $trigger_group ); ?>">
|
52 |
<?php
|
53 |
foreach ( $triggers as $trigger_name => $_trigger ) :
|
54 |
if ( $_trigger instanceof ES_Workflow_Trigger ) :
|
55 |
?>
|
56 |
+
<option value="<?php echo esc_attr( $_trigger->get_name() ); ?>" <?php echo esc_attr( $current_trigger && $current_trigger->get_name() === $trigger_name ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $_trigger->get_title() ); ?></option>
|
57 |
+
<?php
|
58 |
+
elseif ( is_string( $_trigger ) ) :
|
59 |
+
?>
|
60 |
+
<option value="<?php echo esc_attr( $trigger_name ); ?>" disabled><?php echo $_trigger; ?></option>
|
61 |
+
<?php
|
62 |
+
endif;
|
63 |
+
endforeach;
|
64 |
?>
|
65 |
+
</optgroup>
|
66 |
<?php endforeach; ?>
|
67 |
+
</select>
|
68 |
<?php if ( $current_trigger && $current_trigger->get_description() ) : ?>
|
69 |
+
<div class="js-trigger-description"><?php echo $current_trigger->get_description_html(); // phpcs:ignore ?></div>
|
70 |
<?php else : ?>
|
71 |
+
<div class="js-trigger-description"></div>
|
72 |
<?php endif; ?>
|
73 |
+
</td>
|
74 |
+
</tr>
|
75 |
</table>
|
lite/includes/workflows/class-es-workflows-table.php
CHANGED
@@ -147,30 +147,29 @@ class ES_Workflows_Table extends WP_List_Table {
|
|
147 |
*/
|
148 |
public function load_workflow_list() {
|
149 |
?>
|
150 |
-
<h1 class="wp-heading-inline text-
|
151 |
-
<span class="text-2xl font-bold leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate"><?php esc_html_e( 'Workflows', 'email-subscribers' ); ?>
|
152 |
</span>
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
</div>
|
168 |
</div>
|
169 |
</div>
|
170 |
-
<br class="clear">
|
171 |
</div>
|
172 |
-
|
173 |
-
|
|
|
|
|
174 |
|
175 |
/**
|
176 |
* Retrieve lists data from the database
|
147 |
*/
|
148 |
public function load_workflow_list() {
|
149 |
?>
|
150 |
+
<h1 class=" wp-heading-inline"><span class="text-2xl font-bold leading-7 text-gray-900 sm:text-3xl sm:leading-9 sm:truncate"><?php esc_html_e( 'Workflows', 'email-subscribers' ); ?>
|
|
|
151 |
</span>
|
152 |
+
<a href="admin.php?page=es_workflows&action=new"
|
153 |
+
class="pt-2 ig-es-title-button px-2 py-2 mx-2"><?php esc_html_e( 'Add New', 'email-subscribers' ); ?></a>
|
154 |
+
<?php do_action( 'ig_es_after_workflow_type_buttons' ); ?>
|
155 |
+
</h1>
|
156 |
+
<div id="poststuff">
|
157 |
+
<div id="post-body" class="metabox-holder column-1">
|
158 |
+
<div id="post-body-content">
|
159 |
+
<div class="meta-box-sortables ui-sortable">
|
160 |
+
<form method="post">
|
161 |
+
<?php
|
162 |
+
$this->prepare_items();
|
163 |
+
$this->display();
|
164 |
+
?>
|
165 |
+
</form>
|
|
|
166 |
</div>
|
167 |
</div>
|
|
|
168 |
</div>
|
169 |
+
<br class="clear">
|
170 |
+
</div>
|
171 |
+
<?php
|
172 |
+
}
|
173 |
|
174 |
/**
|
175 |
* Retrieve lists data from the database
|
lite/includes/workflows/db/class-es-db-workflows.php
CHANGED
@@ -362,39 +362,39 @@ class ES_DB_Workflows extends ES_DB {
|
|
362 |
|
363 |
$audience_sync_settings = array(
|
364 |
'ig_es_sync_wp_users' => array(
|
365 |
-
'workflow_title' => __( 'User
|
366 |
'trigger_name' => 'ig_es_user_registered',
|
367 |
),
|
368 |
'ig_es_sync_comment_users' => array(
|
369 |
-
'workflow_title' => __( 'Comment
|
370 |
'trigger_name' => 'ig_es_comment_added',
|
371 |
),
|
372 |
'ig_es_sync_woocommerce_users' => array(
|
373 |
-
'workflow_title' => __( 'WooCommerce
|
374 |
'trigger_name' => 'ig_es_wc_order_completed',
|
375 |
),
|
376 |
'ig_es_sync_edd_users' => array(
|
377 |
-
'workflow_title' => __( 'EDD
|
378 |
'trigger_name' => 'ig_es_edd_complete_purchase',
|
379 |
),
|
380 |
'ig_es_sync_cf7_users' => array(
|
381 |
-
'workflow_title' => __( 'Contact Form 7
|
382 |
'trigger_name' => 'ig_es_cf7_submitted',
|
383 |
),
|
384 |
'ig_es_sync_ninja_forms_users' => array(
|
385 |
-
'workflow_title' => __( 'Ninja Form
|
386 |
'trigger_name' => 'ig_es_ninja_forms_submitted',
|
387 |
),
|
388 |
'ig_es_sync_wpforms_users' => array(
|
389 |
-
'workflow_title' => __( 'WP Form
|
390 |
'trigger_name' => 'ig_es_wpforms_submitted',
|
391 |
),
|
392 |
'ig_es_sync_give_users' => array(
|
393 |
-
'workflow_title' => __( 'Give
|
394 |
'trigger_name' => 'ig_es_give_donation_made',
|
395 |
),
|
396 |
'ig_es_sync_gravity_forms_users' => array(
|
397 |
-
'workflow_title' => __( 'Gravity Form
|
398 |
'trigger_name' => 'ig_es_gravity_forms_submitted',
|
399 |
),
|
400 |
);
|
362 |
|
363 |
$audience_sync_settings = array(
|
364 |
'ig_es_sync_wp_users' => array(
|
365 |
+
'workflow_title' => __( 'User Registered', 'email-subscribers' ),
|
366 |
'trigger_name' => 'ig_es_user_registered',
|
367 |
),
|
368 |
'ig_es_sync_comment_users' => array(
|
369 |
+
'workflow_title' => __( 'Comment Added', 'email-subscribers' ),
|
370 |
'trigger_name' => 'ig_es_comment_added',
|
371 |
),
|
372 |
'ig_es_sync_woocommerce_users' => array(
|
373 |
+
'workflow_title' => __( 'WooCommerce Order Completed', 'email-subscribers' ),
|
374 |
'trigger_name' => 'ig_es_wc_order_completed',
|
375 |
),
|
376 |
'ig_es_sync_edd_users' => array(
|
377 |
+
'workflow_title' => __( 'EDD Purchase Completed', 'email-subscribers' ),
|
378 |
'trigger_name' => 'ig_es_edd_complete_purchase',
|
379 |
),
|
380 |
'ig_es_sync_cf7_users' => array(
|
381 |
+
'workflow_title' => __( 'Contact Form 7 Submitted', 'email-subscribers' ),
|
382 |
'trigger_name' => 'ig_es_cf7_submitted',
|
383 |
),
|
384 |
'ig_es_sync_ninja_forms_users' => array(
|
385 |
+
'workflow_title' => __( 'Ninja Form Submitted', 'email-subscribers' ),
|
386 |
'trigger_name' => 'ig_es_ninja_forms_submitted',
|
387 |
),
|
388 |
'ig_es_sync_wpforms_users' => array(
|
389 |
+
'workflow_title' => __( 'WP Form Submitted', 'email-subscribers' ),
|
390 |
'trigger_name' => 'ig_es_wpforms_submitted',
|
391 |
),
|
392 |
'ig_es_sync_give_users' => array(
|
393 |
+
'workflow_title' => __( 'Give Donation Added', 'email-subscribers' ),
|
394 |
'trigger_name' => 'ig_es_give_donation_made',
|
395 |
),
|
396 |
'ig_es_sync_gravity_forms_users' => array(
|
397 |
+
'workflow_title' => __( 'Gravity Form Submitted', 'email-subscribers' ),
|
398 |
'trigger_name' => 'ig_es_gravity_forms_submitted',
|
399 |
),
|
400 |
);
|
lite/includes/workflows/triggers/class-es-trigger-user-deleted.php
CHANGED
@@ -28,7 +28,7 @@ class ES_Trigger_User_Deleted extends ES_Workflow_Trigger {
|
|
28 |
* Load trigger admin props.
|
29 |
*/
|
30 |
public function load_admin_details() {
|
31 |
-
$this->title = __( 'User
|
32 |
$this->description = __( 'Fires when user deleted from WordPress .', 'email-subscribers' );
|
33 |
$this->group = __( 'User', 'email-subscribers' );
|
34 |
}
|
28 |
* Load trigger admin props.
|
29 |
*/
|
30 |
public function load_admin_details() {
|
31 |
+
$this->title = __( 'User Deleted', 'email-subscribers' );
|
32 |
$this->description = __( 'Fires when user deleted from WordPress .', 'email-subscribers' );
|
33 |
$this->group = __( 'User', 'email-subscribers' );
|
34 |
}
|
lite/includes/workflows/triggers/class-es-trigger-user-registered.php
CHANGED
@@ -28,7 +28,7 @@ class ES_Trigger_User_Registered extends ES_Workflow_Trigger {
|
|
28 |
* Load trigger admin props.
|
29 |
*/
|
30 |
public function load_admin_details() {
|
31 |
-
$this->title = __( 'User
|
32 |
$this->description = __( 'Fires when someone signup.', 'email-subscribers' );
|
33 |
$this->group = __( 'User', 'email-subscribers' );
|
34 |
}
|
28 |
* Load trigger admin props.
|
29 |
*/
|
30 |
public function load_admin_details() {
|
31 |
+
$this->title = __( 'User Registered', 'email-subscribers' );
|
32 |
$this->description = __( 'Fires when someone signup.', 'email-subscribers' );
|
33 |
$this->group = __( 'User', 'email-subscribers' );
|
34 |
}
|
lite/includes/workflows/triggers/class-es-trigger-user-updated.php
CHANGED
@@ -28,7 +28,7 @@ class ES_Trigger_User_Updated extends ES_Workflow_Trigger {
|
|
28 |
* Load trigger admin props.
|
29 |
*/
|
30 |
public function load_admin_details() {
|
31 |
-
$this->title = __( 'User
|
32 |
$this->description = __( 'Fires when a user is updated.', 'email-subscribers' );
|
33 |
$this->group = __( 'User', 'email-subscribers' );
|
34 |
}
|
28 |
* Load trigger admin props.
|
29 |
*/
|
30 |
public function load_admin_details() {
|
31 |
+
$this->title = __( 'User Updated', 'email-subscribers' );
|
32 |
$this->description = __( 'Fires when a user is updated.', 'email-subscribers' );
|
33 |
$this->group = __( 'User', 'email-subscribers' );
|
34 |
}
|
readme.txt
CHANGED
@@ -6,7 +6,7 @@ Tags: subscription, newsletter, email marketing, post notification, email newsle
|
|
6 |
Requires at least: 3.9
|
7 |
Tested up to: 5.4
|
8 |
Requires PHP: 5.6
|
9 |
-
Stable tag: 4.4.
|
10 |
License: GPLv3
|
11 |
License URI: http://www.gnu.org/licenses
|
12 |
|
@@ -272,9 +272,19 @@ Refer [here](https://www.icegram.com/documentation/es-faq/).
|
|
272 |
|
273 |
17. Subscribe Form - Allow subscriber to choose list
|
274 |
|
|
|
|
|
|
|
|
|
275 |
|
276 |
== Changelog ==
|
277 |
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
**4.4.4 (10.04.2020)**
|
279 |
|
280 |
* Update: Improve Settings UI
|
6 |
Requires at least: 3.9
|
7 |
Tested up to: 5.4
|
8 |
Requires PHP: 5.6
|
9 |
+
Stable tag: 4.4.5
|
10 |
License: GPLv3
|
11 |
License URI: http://www.gnu.org/licenses
|
12 |
|
272 |
|
273 |
17. Subscribe Form - Allow subscriber to choose list
|
274 |
|
275 |
+
18. Import Contacts
|
276 |
+
|
277 |
+
19. Export Contacts
|
278 |
+
|
279 |
|
280 |
== Changelog ==
|
281 |
|
282 |
+
**4.4.5 (15.04.2020)**
|
283 |
+
|
284 |
+
* Update: Improve Import & Export contacts UI
|
285 |
+
* Fix: Importing contacts progress stays at 0%
|
286 |
+
* Fix: Test email send acknowledgement was not showing
|
287 |
+
|
288 |
**4.4.4 (10.04.2020)**
|
289 |
|
290 |
* Update: Improve Settings UI
|