Version Description
Download this release
Release Info
Developer | Icegram |
Plugin | Email Subscribers & Newsletters |
Version | 4.4.9 |
Comparing to | |
See all releases |
Code changes from version 4.4.8 to 4.4.9
- email-subscribers.php +2 -2
- lite/admin/dist/main.css +1 -1
- lite/admin/js/email-subscribers-admin.js +1 -1
- lite/includes/class-email-subscribers.php +4 -4
- lite/includes/class-es-common.php +113 -5
- lite/includes/class-es-install.php +45 -49
- lite/includes/classes/class-es-admin-settings.php +145 -0
- lite/includes/classes/class-es-campaigns-table.php +185 -172
- lite/includes/classes/class-es-contacts-table.php +3 -3
- lite/includes/classes/class-es-export-subscribers.php +1 -2
- lite/includes/classes/class-es-forms-table.php +21 -8
- lite/includes/classes/class-es-lists-table.php +3 -3
- lite/includes/classes/class-es-mailer.php +1 -3
- lite/includes/classes/class-es-newsletters.php +16 -23
- lite/includes/classes/class-es-post-notifications.php +3 -3
- lite/includes/es-core-functions.php +99 -2
- lite/includes/libraries/action-scheduler/action-scheduler.php +7 -7
- lite/includes/libraries/action-scheduler/classes/ActionScheduler_QueueRunner.php +6 -7
- lite/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler.php +29 -0
- lite/includes/libraries/action-scheduler/classes/migration/Controller.php +1 -1
- lite/includes/libraries/action-scheduler/classes/migration/Scheduler.php +1 -1
- lite/includes/libraries/action-scheduler/functions.php +24 -0
- lite/includes/upgrade/es-update-functions.php +42 -38
- lite/public/class-email-subscribers-public.php +1 -1
- lite/public/images/default-play-button.png +0 -0
- lite/public/images/search-cliparts.html +12 -0
- lite/public/images/vimeo-play-button.png +0 -0
- lite/public/images/youtube-play-button.png +0 -0
- readme.txt +100 -72
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
|
@@ -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.9
|
7 |
* Author: Icegram
|
8 |
* Author URI: https://www.icegram.com/
|
9 |
* Requires at least: 3.9
|
156 |
/* ***************************** Initial Compatibility Work (End) ******************* */
|
157 |
|
158 |
if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
|
159 |
+
define( 'ES_PLUGIN_VERSION', '4.4.9' );
|
160 |
}
|
161 |
|
162 |
// Plugin Folder Path.
|
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{--text-opacity:1;color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}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;background-color:rgba(255,255,255,var(--bg-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity));--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity));-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-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity));line-height:1.25rem;font-weight:500}.wp-heading-inline+.page-title-action{--text-opacity:1;color:#1c64f2;color:rgba(28,100,242,var(--text-opacity));padding:.5rem;margin-left:.5rem;margin-right:.5rem}.ig-es-title-button:hover,.wp-heading-inline+.page-title-action:hover{--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.ig-es-primary-button:hover{--bg-opacity:1;background-color:#6875f5;background-color:rgba(104,117,245,var(--bg-opacity));--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.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;background-color:rgba(255,255,255,var(--bg-opacity))!important;font-size:.875rem!important;line-height:1.25rem!important;font-weight:500!important;background-color:#0e9f6e!important;background-color:rgba(14,159,110,var(--bg-opacity))!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,.ig-es-imp-button:hover{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important;--bg-opacity:1!important}.ig-es-imp-button:hover{background-color:#31c48d!important;background-color:rgba(49,196,141,var(--bg-opacity))!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;background-color:rgba(255,255,255,var(--bg-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;background-color:#ff5a1f;background-color:rgba(255,90,31,var(--bg-opacity));-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,.ig-es-link-button:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity));--bg-opacity:1}.ig-es-link-button:hover{background-color:#ff8a4c;background-color:rgba(255,138,76,var(--bg-opacity))}.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{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity));--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.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{--text-opacity:1!important;color:#5850ec!important;color:rgba(88,80,236,var(--text-opacity))!important}.form-select{font-size:.875rem!important;--border-opacity:1!important;border-color:#9fa6b2!important;border-color:rgba(159,166,178,var(--border-opacity))!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-opacity:1!important;border-color:#a4cafe!important;border-color:rgba(164,202,254,var(--border-opacity))!important}.es-check-toggle:checked~.es-mail-toggle-line{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.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}.wp-core-ui .button,.wp-core-ui .button-secondary{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity));color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{font-size:.875rem;border-radius:.375rem;border-width:1px;line-height:1.25rem;font-weight:500;--text-opacity:1}.wp-core-ui .button-primary{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity));color:#fff;color:rgba(255,255,255,var(--text-opacity));-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}.wp-core-ui .button-primary:hover,.wp-core-ui .button:hover{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity));--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity))}.bg-gray-200{--bg-opacity:1;background-color:#e5e7eb;background-color:rgba(229,231,235,var(--bg-opacity))}.bg-gray-300{--bg-opacity:1;background-color:#d2d6dc;background-color:rgba(210,214,220,var(--bg-opacity))}.bg-green-100{--bg-opacity:1;background-color:#def7ec;background-color:rgba(222,247,236,var(--bg-opacity))}.bg-green-600{--bg-opacity:1;background-color:#057a55;background-color:rgba(5,122,85,var(--bg-opacity))}.bg-teal-50{--bg-opacity:1;background-color:#edfafa;background-color:rgba(237,250,250,var(--bg-opacity))}.bg-teal-100{--bg-opacity:1;background-color:#d5f5f6;background-color:rgba(213,245,246,var(--bg-opacity))}.bg-indigo-500{--bg-opacity:1;background-color:#6875f5;background-color:rgba(104,117,245,var(--bg-opacity))}.bg-indigo-600{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.bg-indigo-800{--bg-opacity:1;background-color:#42389d;background-color:rgba(66,56,157,var(--bg-opacity))}.hover\:bg-gray-50:hover{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity))}.hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity))}.hover\:bg-green-500:hover{--bg-opacity:1;background-color:#0e9f6e;background-color:rgba(14,159,110,var(--bg-opacity))}.hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#6875f5;background-color:rgba(104,117,245,var(--bg-opacity))}.focus\:bg-gray-50:focus{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity))}.focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity))}.border-collapse{border-collapse:collapse}.border-transparent{border-color:transparent}.border-gray-100{--border-opacity:1;border-color:#f4f5f7;border-color:rgba(244,245,247,var(--border-opacity))}.border-gray-200{--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity))}.border-gray-300{--border-opacity:1;border-color:#d2d6dc;border-color:rgba(210,214,220,var(--border-opacity))}.border-gray-400{--border-opacity:1;border-color:#9fa6b2;border-color:rgba(159,166,178,var(--border-opacity))}.border-indigo-500{--border-opacity:1;border-color:#6875f5;border-color:rgba(104,117,245,var(--border-opacity))}.border-indigo-600{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity))}.hover\:border-gray-200:hover{--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity))}.hover\:border-gray-500:hover{--border-opacity:1;border-color:#6b7280;border-color:rgba(107,114,128,var(--border-opacity))}.hover\:border-red-400:hover{--border-opacity:1;border-color:#f98080;border-color:rgba(249,128,128,var(--border-opacity))}.hover\:border-indigo-500:hover{--border-opacity:1;border-color:#6875f5;border-color:rgba(104,117,245,var(--border-opacity))}.hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity))}.focus\:border-blue-300:focus{--border-opacity:1;border-color:#a4cafe;border-color:rgba(164,202,254,var(--border-opacity))}.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-auto{cursor:auto}.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}.table{display:table}.table-cell{display:table-cell}.grid{display:grid}.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-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.float-right{float:right}.float-left{float:left}.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-3{height:.75rem}.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}.h-auto{height:auto}.h-full{height:100%}.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}.text-4xl{font-size:2.25rem}.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-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.m-4{margin:1rem}.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-3{margin-top:.75rem;margin-bottom:.75rem}.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}.mr-1{margin-right:.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}.mr-16{margin-right:4rem}.ml-16{margin-left:4rem}.mt-0\.5{margin-top:.125rem}.mt-1\.5{margin-top:.375rem}.mr-1\.5{margin-right:.375rem}.mt-3\.5{margin-top:.875rem}.-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}.p-4{padding:1rem}.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}.px-6{padding-left:1.5rem;padding-right:1.5rem}.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-4{padding-left: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}.pl-16{padding-left:4rem}.pt-1\.5{padding-top:.375rem}.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}.top-0{top: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-xl{-webkit-box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.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-lg:focus{-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)}.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-red:focus{-webkit-box-shadow:0 0 0 3px rgba(248,180,180,.45);box-shadow:0 0 0 3px rgba(248,180,180,.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{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#9fa6b2;color:rgba(159,166,178,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#6b7280;color:rgba(107,114,128,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#4b5563;color:rgba(75,85,99,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#374151;color:rgba(55,65,81,var(--text-opacity))}.text-gray-800{--text-opacity:1;color:#252f3f;color:rgba(37,47,63,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.text-red-600{--text-opacity:1;color:#e02424;color:rgba(224,36,36,var(--text-opacity))}.text-orange-400{--text-opacity:1;color:#ff8a4c;color:rgba(255,138,76,var(--text-opacity))}.text-orange-500{--text-opacity:1;color:#ff5a1f;color:rgba(255,90,31,var(--text-opacity))}.text-yellow-400{--text-opacity:1;color:#e3a008;color:rgba(227,160,8,var(--text-opacity))}.text-green-400{--text-opacity:1;color:#31c48d;color:rgba(49,196,141,var(--text-opacity))}.text-green-600{--text-opacity:1;color:#057a55;color:rgba(5,122,85,var(--text-opacity))}.text-green-800{--text-opacity:1;color:#03543f;color:rgba(3,84,63,var(--text-opacity))}.text-teal-400{--text-opacity:1;color:#16bdca;color:rgba(22,189,202,var(--text-opacity))}.text-teal-500{--text-opacity:1;color:#0694a2;color:rgba(6,148,162,var(--text-opacity))}.text-teal-700{--text-opacity:1;color:#036672;color:rgba(3,102,114,var(--text-opacity))}.text-blue-400{--text-opacity:1;color:#76a9fa;color:rgba(118,169,250,var(--text-opacity))}.text-blue-500{--text-opacity:1;color:#3f83f8;color:rgba(63,131,248,var(--text-opacity))}.text-blue-700{--text-opacity:1;color:#1a56db;color:rgba(26,86,219,var(--text-opacity))}.text-blue-800{--text-opacity:1;color:#1e429f;color:rgba(30,66,159,var(--text-opacity))}.text-indigo-100{--text-opacity:1;color:#e5edff;color:rgba(229,237,255,var(--text-opacity))}.text-indigo-400{--text-opacity:1;color:#8da2fb;color:rgba(141,162,251,var(--text-opacity))}.text-indigo-500{--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.text-indigo-600{--text-opacity:1;color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}.hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.hover\:text-gray-800:hover{--text-opacity:1;color:#252f3f;color:rgba(37,47,63,var(--text-opacity))}.hover\:text-gray-900:hover{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.hover\:text-blue-700:hover{--text-opacity:1;color:#1a56db;color:rgba(26,86,219,var(--text-opacity))}.hover\:text-indigo-500:hover{--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.focus\:text-gray-900:focus{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.active\:text-indigo-600:active{--text-opacity:1;color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}.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-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.align-middle{vertical-align:middle}.whitespace-no-wrap{white-space:nowrap}.w-0{width:0}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.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-3\/6{width:50%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-1\/12{width:8.333333%}.w-2\/12{width:16.666667%}.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}.z-50{z-index:50}.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{border-radius:.25rem}.sm\:rounded-md{border-radius:.375rem}.sm\:border-r{border-right-width:1px}.sm\:border-l{border-left-width:1px}.sm\:grid{display:grid}.sm\:justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.sm\:text-sm{font-size:.875rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:leading-5{line-height:1.25rem}.sm\:leading-7{line-height:1.75rem}.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\:px-8{padding-left:2rem;padding-right:2rem}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:w-32{width:8rem}.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\:text-base{font-size:1rem}.md\:mx-0{margin-left:0;margin-right:0}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mt-0{margin-top:0}.md\:ml-2{margin-left:.5rem}.md\:ml-4{margin-left:1rem}.md\:ml-8{margin-left:2rem}.md\:-mr-8{margin-right:-2rem}.md\:max-w-xl{max-width:36rem}.md\:max-w-5xl{max-width:64rem}.md\:p-2{padding:.5rem}.md\:p-6{padding:1.5rem}.md\:py-0{padding-top:0;padding-bottom:0}.md\:px-1{padding-left:.25rem;padding-right:.25rem}.md\:px-2{padding-left:.5rem;padding-right:.5rem}.md\:pb-2{padding-bottom:.5rem}.md\:pr-4{padding-right:1rem}.md\:pt-6{padding-top:1.5rem}.md\:w-3\/5{width:60%}}@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\:text-sm{font-size:.875rem}.lg\:text-lg{font-size:1.125rem}.lg\:my-0{margin-top:0;margin-bottom:0}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:ml-16{margin-left:4rem}.lg\:-mr-16{margin-right:-4rem}.lg\:p-6{padding:1.5rem}.lg\:p-8{padding:2rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-7{padding-left:1.75rem;padding-right:1.75rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pt-2{padding-top:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:pl-2{padding-left:.5rem}.lg\:shadow-none{-webkit-box-shadow:none;box-shadow:none}.lg\:w-40{width:10rem}.lg\:w-1\/2{width:50%}.lg\:w-3\/12{width:25%}.lg\:w-7\/12{width:58.333333%}.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\:mr-0{margin-right:0}.xl\:ml-3{margin-left:.75rem}.xl\:ml-4{margin-left:1rem}.xl\:ml-20{margin-left:5rem}.xl\:px-4{padding-left:1rem;padding-right:1rem}.xl\:pb-4{padding-bottom:1rem}.xl\:w-3\/5{width:60%}.xl\:w-2\/12{width:16.666667%}}
|
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:#5850ec}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{color:#6875f5}.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}.wp-core-ui .button,.wp-core-ui .button-secondary{border-color:#5850ec;color:#5850ec}.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{font-size:.875rem;border-radius:.375rem;border-width:1px;line-height:1.25rem;font-weight:500}.wp-core-ui .button-primary{background-color:#5850ec;color:#fff;-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}.wp-core-ui .button-primary:hover,.wp-core-ui .button:hover{border-color:#5850ec;color:#6875f5}.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-teal-50{background-color:#edfafa}.bg-teal-100{background-color:#d5f5f6}.bg-blue-50{background-color:#ebf5ff}.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-500{border-color:#6875f5}.border-indigo-600{border-color:#5850ec}.hover\:border-gray-200:hover{border-color:#e5e7eb}.hover\:border-gray-500:hover{border-color:#6b7280}.hover\:border-red-400:hover{border-color:#f98080}.hover\:border-indigo-500:hover{border-color:#6875f5}.hover\:border-indigo-600:hover{border-color:#5850ec}.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}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.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-auto{cursor:auto}.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-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.float-right{float:right}.float-left{float:left}.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-3{height:.75rem}.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}.h-auto{height:auto}.h-full{height:100%}.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-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.m-4{margin:1rem}.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-3{margin-top:.75rem;margin-bottom:.75rem}.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}.mr-1{margin-right:.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}.mr-16{margin-right:4rem}.ml-16{margin-left:4rem}.mr-1\.5{margin-right:.375rem}.mt-3\.5{margin-top:.875rem}.-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}.p-4{padding:1rem}.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}.px-6{padding-left:1.5rem;padding-right:1.5rem}.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-4{padding-left: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}.pl-16{padding-left:4rem}.pt-1\.5{padding-top:.375rem}.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}.top-0{top: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-xl{-webkit-box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.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-lg:focus{-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)}.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-red:focus{-webkit-box-shadow:0 0 0 3px rgba(248,180,180,.45);box-shadow:0 0 0 3px rgba(248,180,180,.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-teal-400{color:#16bdca}.text-teal-500{color:#0694a2}.text-teal-700{color:#036672}.text-blue-400{color:#76a9fa}.text-blue-500{color:#3f83f8}.text-blue-700{color:#1a56db}.text-blue-800{color:#1e429f}.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}.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}.text-4xl{font-size:2.25rem}.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-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.align-middle{vertical-align:middle}.whitespace-no-wrap{white-space:nowrap}.w-0{width:0}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.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-3\/6{width:50%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-1\/12{width:8.333333%}.w-2\/12{width:16.666667%}.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}.z-50{z-index:50}.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{border-radius:.25rem}.sm\:rounded-md{border-radius:.375rem}.sm\:border-r{border-right-width:1px}.sm\:border-l{border-left-width:1px}.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-7{line-height:1.75rem}.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\:w-32{width:8rem}.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\:mx-0{margin-left:0;margin-right:0}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mt-0{margin-top:0}.md\:ml-2{margin-left:.5rem}.md\:ml-4{margin-left:1rem}.md\:ml-8{margin-left:2rem}.md\:-mr-8{margin-right:-2rem}.md\:max-w-xl{max-width:36rem}.md\:max-w-5xl{max-width:64rem}.md\:p-2{padding:.5rem}.md\:p-6{padding:1.5rem}.md\:py-0{padding-top:0;padding-bottom:0}.md\:px-1{padding-left:.25rem;padding-right:.25rem}.md\:px-2{padding-left:.5rem;padding-right:.5rem}.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}.md\:w-3\/5{width:60%}}@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\:ml-16{margin-left:4rem}.lg\:-mr-16{margin-right:-4rem}.lg\:p-6{padding:1.5rem}.lg\:p-8{padding:2rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.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\:pl-2{padding-left:.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\:w-40{width:10rem}.lg\:w-1\/2{width:50%}.lg\:w-3\/12{width:25%}.lg\:w-7\/12{width:58.333333%}.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\:mr-0{margin-right:0}.xl\:ml-3{margin-left:.75rem}.xl\:ml-4{margin-left:1rem}.xl\:ml-20{margin-left:5rem}.xl\:px-4{padding-left:1rem;padding-right:1rem}.xl\:pb-4{padding-bottom:1rem}.xl\:w-3\/5{width:60%}.xl\:w-2\/12{width:16.666667%}}
|
lite/admin/js/email-subscribers-admin.js
CHANGED
@@ -288,7 +288,7 @@
|
|
288 |
if (response.hasOwnProperty('total')) {
|
289 |
var total = response.total;
|
290 |
var total_contacts_text = "<h2 class='text-sm font-normal text-gray-600'>Total Contacts: <span class='text-base font-medium text-gray-700'> " + total + "</span></h2>";
|
291 |
-
var total_recipients_text = "<span class='font-medium text-base text-gray-700'>" + total + " <span class='text-base font-medium text-gray-700'></span><span class='font-normal text-sm text-gray-500'> recipients </span>";
|
292 |
$('#ig_es_total_contacts').html(total_contacts_text);
|
293 |
$('#ig_es_total_recipients').html(total_recipients_text);
|
294 |
if (total == 0) {
|
288 |
if (response.hasOwnProperty('total')) {
|
289 |
var total = response.total;
|
290 |
var total_contacts_text = "<h2 class='text-sm font-normal text-gray-600'>Total Contacts: <span class='text-base font-medium text-gray-700'> " + total + "</span></h2>";
|
291 |
+
var total_recipients_text = "<div class='mt-1.5 py-2'><span class='font-medium text-base text-gray-700'>" + total + " <span class='text-base font-medium text-gray-700'></span><span class='font-normal text-sm text-gray-500'> recipients </span></div>";
|
292 |
$('#ig_es_total_contacts').html(total_contacts_text);
|
293 |
$('#ig_es_total_recipients').html(total_recipients_text);
|
294 |
if (total == 0) {
|
lite/includes/class-email-subscribers.php
CHANGED
@@ -304,10 +304,10 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
|
|
304 |
$show_notice = apply_filters( 'ig_es_show_wp_cron_notice', $show_notice );
|
305 |
|
306 |
if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON && $notice_option != 'yes' && $show_notice ) {
|
307 |
-
$es_cron_url = 'https://www.icegram.com/documentation/how-to-enable-the-wordpress-cron/?
|
308 |
-
$cpanel_url = 'https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-cpanel/?utm_source=
|
309 |
-
$es_pro_url = 'https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-cpanel/?utm_source=
|
310 |
-
$disable_wp_cron_notice = sprintf( __( 'WordPress Cron is
|
311 |
$disable_wp_cron_notice .= '<br/>' . sprintf( __( 'Or schedule Cron in <a href="%s" target="_blank">cPanel</a>', 'email-subscribers' ), $cpanel_url );
|
312 |
$disable_wp_cron_notice .= '<br/>' . sprintf( __( 'Or use <strong><a href="%s" target="_blank">Email Subscribers Pro</a></strong> for automatic Cron support', 'email-subscribers' ), $es_pro_url );
|
313 |
$html = '<div class="notice notice-warning" style="background-color: #FFF;"><p style="letter-spacing: 0.6px;">' . $disable_wp_cron_notice . '<a style="float:right" class="es-admin-btn es-admin-btn-secondary " href="' . admin_url() . '?es_dismiss_admin_notice=1&option_name=wp_cron_notice">' . __( 'OK, I Got it!',
|
304 |
$show_notice = apply_filters( 'ig_es_show_wp_cron_notice', $show_notice );
|
305 |
|
306 |
if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON && $notice_option != 'yes' && $show_notice ) {
|
307 |
+
$es_cron_url = 'https://www.icegram.com/documentation/how-to-enable-the-wordpress-cron/?utm_medium=enable_wordpress_cron&utm_source=in_app&utm_campaign=view_admin_notice';
|
308 |
+
$cpanel_url = 'https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-cpanel/?utm_source=schedule_cron_in_cpanel&utm_medium=in_app&utm_campaign=view_admin_notice';
|
309 |
+
$es_pro_url = 'https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-cpanel/?utm_source=schedule_cron_in_cpanel&utm_medium=in_app&utm_campaign=view_admin_notice';
|
310 |
+
$disable_wp_cron_notice = sprintf( __( 'WordPress Cron is disabled on your site. Email notifications from Email Subscribers plugin will not be sent automatically. <a href="%s" target="_blank" >Here\'s how you can enable it.</a>', 'email-subscribers' ), $es_cron_url );
|
311 |
$disable_wp_cron_notice .= '<br/>' . sprintf( __( 'Or schedule Cron in <a href="%s" target="_blank">cPanel</a>', 'email-subscribers' ), $cpanel_url );
|
312 |
$disable_wp_cron_notice .= '<br/>' . sprintf( __( 'Or use <strong><a href="%s" target="_blank">Email Subscribers Pro</a></strong> for automatic Cron support', 'email-subscribers' ), $es_pro_url );
|
313 |
$html = '<div class="notice notice-warning" style="background-color: #FFF;"><p style="letter-spacing: 0.6px;">' . $disable_wp_cron_notice . '<a style="float:right" class="es-admin-btn es-admin-btn-secondary " href="' . admin_url() . '?es_dismiss_admin_notice=1&option_name=wp_cron_notice">' . __( 'OK, I Got it!',
|
lite/includes/class-es-common.php
CHANGED
@@ -43,9 +43,7 @@ class ES_Common {
|
|
43 |
public static function es_process_template_body( $content, $tmpl_id = 0, $campaign_id = 0 ) {
|
44 |
$content = convert_smilies( wptexturize( $content ) );
|
45 |
|
46 |
-
|
47 |
-
$content = $GLOBALS['wp_embed']->autoembed( $content );
|
48 |
-
}
|
49 |
|
50 |
$content = wpautop( $content );
|
51 |
$content = do_shortcode( shortcode_unautop( $content ) );
|
@@ -75,6 +73,107 @@ class ES_Common {
|
|
75 |
return $content;
|
76 |
}
|
77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
/**
|
79 |
* Get Statuses key name map
|
80 |
*
|
@@ -1489,6 +1588,16 @@ class ES_Common {
|
|
1489 |
* @since 4.4.8
|
1490 |
*/
|
1491 |
public static function can_show_coupon( $coupon = 'PREMIUM10' ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1492 |
$coupons = get_option( 'ig_es_coupons', array() );
|
1493 |
|
1494 |
$can_show = true;
|
@@ -1511,8 +1620,8 @@ class ES_Common {
|
|
1511 |
if ( $can_show ) {
|
1512 |
self::update_coupon_data( $coupon );
|
1513 |
}
|
1514 |
-
|
1515 |
return $can_show;
|
|
|
1516 |
}
|
1517 |
|
1518 |
/**
|
@@ -1533,5 +1642,4 @@ class ES_Common {
|
|
1533 |
update_option( 'ig_es_coupons', $coupons );
|
1534 |
}
|
1535 |
|
1536 |
-
|
1537 |
}
|
43 |
public static function es_process_template_body( $content, $tmpl_id = 0, $campaign_id = 0 ) {
|
44 |
$content = convert_smilies( wptexturize( $content ) );
|
45 |
|
46 |
+
$content = self::handle_oembed_content( $content );
|
|
|
|
|
47 |
|
48 |
$content = wpautop( $content );
|
49 |
$content = do_shortcode( shortcode_unautop( $content ) );
|
73 |
return $content;
|
74 |
}
|
75 |
|
76 |
+
/**
|
77 |
+
* Method to handle oembed content
|
78 |
+
*
|
79 |
+
* @param string @content Content.
|
80 |
+
*
|
81 |
+
* @return string $content
|
82 |
+
*
|
83 |
+
* @since 4.4.9
|
84 |
+
*/
|
85 |
+
public static function handle_oembed_content( $content = '' ) {
|
86 |
+
|
87 |
+
if ( ! empty( $content ) && isset( $GLOBALS['wp_embed'] ) ) {
|
88 |
+
add_filter( 'embed_oembed_html', array( 'ES_Common', 'handle_link_in_email_content' ), 10, 4 );
|
89 |
+
$content = $GLOBALS['wp_embed']->autoembed( $content );
|
90 |
+
remove_filter( 'embed_oembed_html', array( 'ES_Common', 'handle_link_in_email_content' ), 10, 4 );
|
91 |
+
}
|
92 |
+
|
93 |
+
return $content;
|
94 |
+
}
|
95 |
+
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Method to handle link in email content
|
99 |
+
*
|
100 |
+
* URL from {{POSTLINK-ONLY}} was being converted to oembed html if it is not wrapped inside <a> tag's href attribute and is on a seperate line in ES template content
|
101 |
+
* resulting in a link html for {{POSTLINK-ONLY}} instead of plain text link.
|
102 |
+
*
|
103 |
+
* Most email clients like GMail, Outlook do not support videos in the email. To handle it, we are replacing the WordPress's oembed generated HTML for video links to their respective thubmnail images which are then linked the original video URL.
|
104 |
+
*
|
105 |
+
* @param string $html HTML for current URL.
|
106 |
+
* @param string $url Current URL.
|
107 |
+
* @param array $attr Shortcode attribute.
|
108 |
+
* @param int $post_ID Current post id.
|
109 |
+
*
|
110 |
+
* @return string $html HTML for current URL.
|
111 |
+
*
|
112 |
+
* @since 4.4.9
|
113 |
+
*/
|
114 |
+
public static function handle_link_in_email_content( $html, $url, $attr, $post_ID ) {
|
115 |
+
|
116 |
+
$post_link = get_permalink( $post_ID );
|
117 |
+
// Check if current URL is same as current post's permalink.
|
118 |
+
if( ! empty( $post_link ) && $url === $post_link ) {
|
119 |
+
// Convert URL HTML back to URL itself if it a current post URL.
|
120 |
+
$html = $url;
|
121 |
+
} else {
|
122 |
+
if( ! class_exists( 'WP_oEmbed' ) ) {
|
123 |
+
require_once( ABSPATH . 'wp-includes/class-wp-oembed.php' );
|
124 |
+
}
|
125 |
+
|
126 |
+
$oembed = new WP_oEmbed();
|
127 |
+
$provider = $oembed->discover( $url );
|
128 |
+
|
129 |
+
if( ! empty( $provider ) ) {
|
130 |
+
$oembed_response = $oembed->fetch( $provider, $url, $attr );
|
131 |
+
if( is_object( $oembed_response ) && ! empty( $oembed_response->type ) && 'video' === $oembed_response->type ) {
|
132 |
+
$thumbnail_url = $oembed_response->thumbnail_url;
|
133 |
+
if( ! empty( $thumbnail_url ) ) {
|
134 |
+
$title = $oembed_response->title;
|
135 |
+
$provider_name = $oembed_response->provider_name;
|
136 |
+
$play_icon_url = '';
|
137 |
+
|
138 |
+
switch( $provider_name ) {
|
139 |
+
case 'YouTube':
|
140 |
+
$play_icon_url = ES_PLUGIN_URL . 'lite/public/images/youtube-play-button.png';
|
141 |
+
break;
|
142 |
+
|
143 |
+
case 'Vimeo':
|
144 |
+
$play_icon_url = ES_PLUGIN_URL . 'lite/public/images/vimeo-play-button.png';
|
145 |
+
break;
|
146 |
+
|
147 |
+
default:
|
148 |
+
$play_icon_url = ES_PLUGIN_URL . 'lite/public/images/default-play-button.png';
|
149 |
+
break;
|
150 |
+
}
|
151 |
+
|
152 |
+
ob_start();
|
153 |
+
$thumbnail_width = ! empty( $oembed_response->width ) ? $oembed_response->width . 'px' : 'auto';
|
154 |
+
$thumbnail_height = ! empty( $oembed_response->height ) ? $oembed_response->height . 'px' : 'auto';
|
155 |
+
?>
|
156 |
+
<table style="margin-bottom: 1em;">
|
157 |
+
<tbody>
|
158 |
+
<tr>
|
159 |
+
<td style="background-image: url('<?php echo esc_url( $thumbnail_url ); ?>');height:<?php echo esc_attr( $thumbnail_height ); ?>;width:<?php echo esc_attr( $thumbnail_width ); ?>;background-size: 100% 100%;background-repeat: no-repeat;text-align:center;">
|
160 |
+
<a href="<?php echo esc_url( $url ); ?>" title="<?php echo esc_attr( $title ); ?>" target="_blank">
|
161 |
+
<img src="<?php echo esc_url( $play_icon_url ); ?>" style="height: 75px; margin: auto;">
|
162 |
+
</a>
|
163 |
+
</td>
|
164 |
+
</tr>
|
165 |
+
</tbody>
|
166 |
+
</table>
|
167 |
+
<?php
|
168 |
+
$html = ob_get_clean();
|
169 |
+
}
|
170 |
+
}
|
171 |
+
}
|
172 |
+
}
|
173 |
+
|
174 |
+
return $html;
|
175 |
+
}
|
176 |
+
|
177 |
/**
|
178 |
* Get Statuses key name map
|
179 |
*
|
1588 |
* @since 4.4.8
|
1589 |
*/
|
1590 |
public static function can_show_coupon( $coupon = 'PREMIUM10' ) {
|
1591 |
+
|
1592 |
+
$can_show = true;
|
1593 |
+
|
1594 |
+
if ( $can_show ) {
|
1595 |
+
self::update_coupon_data( $coupon );
|
1596 |
+
}
|
1597 |
+
|
1598 |
+
return $can_show;
|
1599 |
+
|
1600 |
+
/*
|
1601 |
$coupons = get_option( 'ig_es_coupons', array() );
|
1602 |
|
1603 |
$can_show = true;
|
1620 |
if ( $can_show ) {
|
1621 |
self::update_coupon_data( $coupon );
|
1622 |
}
|
|
|
1623 |
return $can_show;
|
1624 |
+
*/
|
1625 |
}
|
1626 |
|
1627 |
/**
|
1642 |
update_option( 'ig_es_coupons', $coupons );
|
1643 |
}
|
1644 |
|
|
|
1645 |
}
|
lite/includes/class-es-install.php
CHANGED
@@ -202,6 +202,11 @@ if ( ! class_exists( 'ES_Install' ) ) {
|
|
202 |
'4.4.2' => array(
|
203 |
'ig_es_update_442_set_workflows_default_permission',
|
204 |
'ig_es_update_442_db_version'
|
|
|
|
|
|
|
|
|
|
|
205 |
)
|
206 |
|
207 |
);
|
@@ -720,7 +725,6 @@ if ( ! class_exists( 'ES_Install' ) ) {
|
|
720 |
$report .= "Thank You.";
|
721 |
|
722 |
|
723 |
-
|
724 |
$new_contact_email_subject = "One more contact joins our tribe!";
|
725 |
$new_contact_email_content = "Hi,\r\n\r\nYour friendly Email Subscribers notification bot here!\r\n\r\n{{NAME}} ({{EMAIL}}) joined our tribe just now.\r\n\r\nWhich list/s? {{LIST}}\r\n\r\nIf you know this person, or if they are an influencer, you may want to reach out to them personally!\r\n\r\nLater...";
|
726 |
|
@@ -793,19 +797,13 @@ if ( ! class_exists( 'ES_Install' ) ) {
|
|
793 |
}
|
794 |
|
795 |
/**
|
796 |
-
*
|
797 |
*
|
798 |
* @since 4.0.0
|
|
|
|
|
799 |
*/
|
800 |
-
|
801 |
-
global $wpdb;
|
802 |
-
|
803 |
-
$wpdb->hide_errors();
|
804 |
-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
805 |
-
dbDelta( self::get_schema() );
|
806 |
-
}
|
807 |
-
|
808 |
-
public static function get_ig_es_400_schema() {
|
809 |
|
810 |
global $wpdb;
|
811 |
|
@@ -815,6 +813,22 @@ if ( ! class_exists( 'ES_Install' ) ) {
|
|
815 |
$collate = $wpdb->get_charset_collate();
|
816 |
}
|
817 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
818 |
$tables = "
|
819 |
CREATE TABLE `{$wpdb->prefix}ig_campaigns` (
|
820 |
`id` int(10) NOT NULL AUTO_INCREMENT,
|
@@ -960,22 +974,15 @@ if ( ! class_exists( 'ES_Install' ) ) {
|
|
960 |
}
|
961 |
|
962 |
/**
|
963 |
-
*
|
964 |
*
|
965 |
* @return string
|
966 |
*
|
967 |
* @since 4.2.0
|
968 |
*/
|
969 |
-
public static function get_ig_es_420_schema() {
|
970 |
-
|
971 |
global $wpdb;
|
972 |
|
973 |
-
$collate = '';
|
974 |
-
|
975 |
-
if ( $wpdb->has_cap( 'collation' ) ) {
|
976 |
-
$collate = $wpdb->get_charset_collate();
|
977 |
-
}
|
978 |
-
|
979 |
$tables = "CREATE TABLE `{$wpdb->prefix}ig_contact_meta` (
|
980 |
`id` int(10) NOT NULL AUTO_INCREMENT,
|
981 |
`contact_id` bigint(10) unsigned NOT NULL,
|
@@ -993,20 +1000,16 @@ if ( ! class_exists( 'ES_Install' ) ) {
|
|
993 |
/**
|
994 |
* Add new table
|
995 |
*
|
|
|
|
|
996 |
* @return string
|
997 |
*
|
998 |
* @since 4.2.1
|
999 |
*/
|
1000 |
-
public static function get_ig_es_421_schema() {
|
1001 |
|
1002 |
global $wpdb;
|
1003 |
|
1004 |
-
$collate = '';
|
1005 |
-
|
1006 |
-
if ( $wpdb->has_cap( 'collation' ) ) {
|
1007 |
-
$collate = $wpdb->get_charset_collate();
|
1008 |
-
}
|
1009 |
-
|
1010 |
$tables = "CREATE TABLE `{$wpdb->prefix}ig_contactmeta` (
|
1011 |
`meta_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
1012 |
`contact_id` bigint(20) unsigned NOT NULL,
|
@@ -1065,20 +1068,16 @@ if ( ! class_exists( 'ES_Install' ) ) {
|
|
1065 |
/**
|
1066 |
* Create Links Table
|
1067 |
*
|
|
|
|
|
1068 |
* @return string
|
1069 |
*
|
1070 |
* @sinc 4.2.4
|
1071 |
*/
|
1072 |
-
public static function get_ig_es_424_schema() {
|
1073 |
|
1074 |
global $wpdb;
|
1075 |
|
1076 |
-
$collate = '';
|
1077 |
-
|
1078 |
-
if ( $wpdb->has_cap( 'collation' ) ) {
|
1079 |
-
$collate = $wpdb->get_charset_collate();
|
1080 |
-
}
|
1081 |
-
|
1082 |
$tables = "CREATE TABLE `{$wpdb->prefix}ig_links` (
|
1083 |
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
1084 |
`message_id` int(10) unsigned NOT NULL,
|
@@ -1100,20 +1099,15 @@ if ( ! class_exists( 'ES_Install' ) ) {
|
|
1100 |
/**
|
1101 |
* Create Links Table
|
1102 |
*
|
|
|
|
|
1103 |
* @return string
|
1104 |
*
|
1105 |
* @sinc 4.4.1
|
1106 |
*/
|
1107 |
-
public static function get_ig_es_441_schema() {
|
1108 |
-
|
1109 |
global $wpdb;
|
1110 |
|
1111 |
-
$collate = '';
|
1112 |
-
|
1113 |
-
if ( $wpdb->has_cap( 'collation' ) ) {
|
1114 |
-
$collate = $wpdb->get_charset_collate();
|
1115 |
-
}
|
1116 |
-
|
1117 |
$tables = "CREATE TABLE `{$wpdb->prefix}ig_workflows` (
|
1118 |
`id` int(10) NOT NULL AUTO_INCREMENT,
|
1119 |
`name` varchar(255) DEFAULT NULL,
|
@@ -1147,19 +1141,21 @@ if ( ! class_exists( 'ES_Install' ) ) {
|
|
1147 |
}
|
1148 |
|
1149 |
/**
|
1150 |
-
* Collect multiple version
|
|
|
|
|
1151 |
*
|
1152 |
* @return string
|
1153 |
*
|
1154 |
* @since 4.2.0
|
1155 |
*/
|
1156 |
-
private static function get_schema() {
|
1157 |
|
1158 |
-
$tables = self::get_ig_es_400_schema();
|
1159 |
-
$tables .= self::get_ig_es_420_schema();
|
1160 |
-
$tables .= self::get_ig_es_421_schema();
|
1161 |
-
$tables .= self::get_ig_es_424_schema();
|
1162 |
-
$tables .= self::get_ig_es_441_schema();
|
1163 |
|
1164 |
return $tables;
|
1165 |
}
|
202 |
'4.4.2' => array(
|
203 |
'ig_es_update_442_set_workflows_default_permission',
|
204 |
'ig_es_update_442_db_version'
|
205 |
+
),
|
206 |
+
|
207 |
+
'4.4.9' => array(
|
208 |
+
'ig_es_update_449_create_tables',
|
209 |
+
'ig_es_update_449_db_version'
|
210 |
)
|
211 |
|
212 |
);
|
725 |
$report .= "Thank You.";
|
726 |
|
727 |
|
|
|
728 |
$new_contact_email_subject = "One more contact joins our tribe!";
|
729 |
$new_contact_email_content = "Hi,\r\n\r\nYour friendly Email Subscribers notification bot here!\r\n\r\n{{NAME}} ({{EMAIL}}) joined our tribe just now.\r\n\r\nWhich list/s? {{LIST}}\r\n\r\nIf you know this person, or if they are an influencer, you may want to reach out to them personally!\r\n\r\nLater...";
|
730 |
|
797 |
}
|
798 |
|
799 |
/**
|
800 |
+
* @param null $version
|
801 |
*
|
802 |
* @since 4.0.0
|
803 |
+
*
|
804 |
+
* @modify 4.4.9
|
805 |
*/
|
806 |
+
public static function create_tables( $version = null ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
807 |
|
808 |
global $wpdb;
|
809 |
|
813 |
$collate = $wpdb->get_charset_collate();
|
814 |
}
|
815 |
|
816 |
+
if ( is_null( $version ) ) {
|
817 |
+
$schema_fn = 'get_schema';
|
818 |
+
} else {
|
819 |
+
$v = str_replace( '.', '', $version );
|
820 |
+
$schema_fn = 'get_' . $v . '_schema';
|
821 |
+
}
|
822 |
+
|
823 |
+
$wpdb->hide_errors();
|
824 |
+
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
825 |
+
dbDelta( self::$schema_fn( $collate ) );
|
826 |
+
}
|
827 |
+
|
828 |
+
public static function get_ig_es_400_schema( $collate = '' ) {
|
829 |
+
|
830 |
+
global $wpdb;
|
831 |
+
|
832 |
$tables = "
|
833 |
CREATE TABLE `{$wpdb->prefix}ig_campaigns` (
|
834 |
`id` int(10) NOT NULL AUTO_INCREMENT,
|
974 |
}
|
975 |
|
976 |
/**
|
977 |
+
* @param string $collate
|
978 |
*
|
979 |
* @return string
|
980 |
*
|
981 |
* @since 4.2.0
|
982 |
*/
|
983 |
+
public static function get_ig_es_420_schema( $collate = '' ) {
|
|
|
984 |
global $wpdb;
|
985 |
|
|
|
|
|
|
|
|
|
|
|
|
|
986 |
$tables = "CREATE TABLE `{$wpdb->prefix}ig_contact_meta` (
|
987 |
`id` int(10) NOT NULL AUTO_INCREMENT,
|
988 |
`contact_id` bigint(10) unsigned NOT NULL,
|
1000 |
/**
|
1001 |
* Add new table
|
1002 |
*
|
1003 |
+
* @param string $collate
|
1004 |
+
*
|
1005 |
* @return string
|
1006 |
*
|
1007 |
* @since 4.2.1
|
1008 |
*/
|
1009 |
+
public static function get_ig_es_421_schema( $collate = '' ) {
|
1010 |
|
1011 |
global $wpdb;
|
1012 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1013 |
$tables = "CREATE TABLE `{$wpdb->prefix}ig_contactmeta` (
|
1014 |
`meta_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
1015 |
`contact_id` bigint(20) unsigned NOT NULL,
|
1068 |
/**
|
1069 |
* Create Links Table
|
1070 |
*
|
1071 |
+
* @param string $collate
|
1072 |
+
*
|
1073 |
* @return string
|
1074 |
*
|
1075 |
* @sinc 4.2.4
|
1076 |
*/
|
1077 |
+
public static function get_ig_es_424_schema( $collate = '') {
|
1078 |
|
1079 |
global $wpdb;
|
1080 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1081 |
$tables = "CREATE TABLE `{$wpdb->prefix}ig_links` (
|
1082 |
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
1083 |
`message_id` int(10) unsigned NOT NULL,
|
1099 |
/**
|
1100 |
* Create Links Table
|
1101 |
*
|
1102 |
+
* @param string $collate
|
1103 |
+
*
|
1104 |
* @return string
|
1105 |
*
|
1106 |
* @sinc 4.4.1
|
1107 |
*/
|
1108 |
+
public static function get_ig_es_441_schema( $collate = '') {
|
|
|
1109 |
global $wpdb;
|
1110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1111 |
$tables = "CREATE TABLE `{$wpdb->prefix}ig_workflows` (
|
1112 |
`id` int(10) NOT NULL AUTO_INCREMENT,
|
1113 |
`name` varchar(255) DEFAULT NULL,
|
1141 |
}
|
1142 |
|
1143 |
/**
|
1144 |
+
* Collect multiple version schema
|
1145 |
+
*
|
1146 |
+
* @param string $collate
|
1147 |
*
|
1148 |
* @return string
|
1149 |
*
|
1150 |
* @since 4.2.0
|
1151 |
*/
|
1152 |
+
private static function get_schema( $collate = '' ) {
|
1153 |
|
1154 |
+
$tables = self::get_ig_es_400_schema( $collate );
|
1155 |
+
$tables .= self::get_ig_es_420_schema( $collate );
|
1156 |
+
$tables .= self::get_ig_es_421_schema( $collate );
|
1157 |
+
$tables .= self::get_ig_es_424_schema( $collate );
|
1158 |
+
$tables .= self::get_ig_es_441_schema( $collate );
|
1159 |
|
1160 |
return $tables;
|
1161 |
}
|
lite/includes/classes/class-es-admin-settings.php
CHANGED
@@ -21,6 +21,7 @@ class ES_Admin_Settings {
|
|
21 |
public $subscribers_obj;
|
22 |
|
23 |
public function __construct() {
|
|
|
24 |
}
|
25 |
|
26 |
public function es_settings_callback() {
|
@@ -881,4 +882,148 @@ public function field_callback( $arguments, $id_key = '' ) {
|
|
881 |
return $html;
|
882 |
}
|
883 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
884 |
}
|
21 |
public $subscribers_obj;
|
22 |
|
23 |
public function __construct() {
|
24 |
+
add_filter( 'ig_es_registered_email_sending_settings', array( $this, 'show_cron_info' ) );
|
25 |
}
|
26 |
|
27 |
public function es_settings_callback() {
|
882 |
return $html;
|
883 |
}
|
884 |
|
885 |
+
/**
|
886 |
+
* Register ES cron info
|
887 |
+
*
|
888 |
+
* @return array $email_sending_settings ES send email settings.
|
889 |
+
*
|
890 |
+
* @since 4.4.9
|
891 |
+
*/
|
892 |
+
public function show_cron_info( $email_sending_settings ) {
|
893 |
+
$es_cron_enabled = ES()->cron->is_wp_cron_enable();
|
894 |
+
if( $es_cron_enabled ) {
|
895 |
+
$es_cron_info = array(
|
896 |
+
'ig_es_cron_info' => array(
|
897 |
+
'id' => 'ig_es_cron_info',
|
898 |
+
'name' => __( 'Cron Info', 'email-subscribers' ),
|
899 |
+
'type' => 'html',
|
900 |
+
'html' => self::render_cron_info_html(),
|
901 |
+
),
|
902 |
+
);
|
903 |
+
$email_sending_settings = ig_es_array_insert_after( $email_sending_settings, 'ig_es_cronurl', $es_cron_info );
|
904 |
+
}
|
905 |
+
|
906 |
+
return $email_sending_settings;
|
907 |
+
}
|
908 |
+
|
909 |
+
/**
|
910 |
+
* Render ES cron info html
|
911 |
+
*
|
912 |
+
* @return false|string
|
913 |
+
*
|
914 |
+
* @since 4.4.9
|
915 |
+
*/
|
916 |
+
public static function render_cron_info_html() {
|
917 |
+
$site_crons = get_option( 'cron' );
|
918 |
+
|
919 |
+
if( empty( $site_crons ) ) {
|
920 |
+
return;
|
921 |
+
}
|
922 |
+
|
923 |
+
$es_cron_enabled = ES()->cron->is_wp_cron_enable();
|
924 |
+
|
925 |
+
$es_crons_data = array();
|
926 |
+
$es_cron_events = array(
|
927 |
+
'ig_es_cron',
|
928 |
+
'ig_es_cron_worker',
|
929 |
+
'ig_es_cron_auto_responder',
|
930 |
+
);
|
931 |
+
|
932 |
+
$cron_schedules = wp_get_schedules();
|
933 |
+
$time_offset = get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;
|
934 |
+
$date_format = get_option( 'date_format' );
|
935 |
+
$time_format = get_option( 'time_format' );
|
936 |
+
|
937 |
+
foreach ( $site_crons as $next_scheduled_time => $scheduled_crons ) {
|
938 |
+
if( ! empty( $scheduled_crons ) && is_array( $scheduled_crons ) ) {
|
939 |
+
foreach( $scheduled_crons as $cron_event => $cron_data ) {
|
940 |
+
if( ! in_array( $cron_event, $es_cron_events, true ) ) {
|
941 |
+
continue;
|
942 |
+
}
|
943 |
+
foreach( $cron_data as $cron_info ) {
|
944 |
+
if( ! empty( $cron_info['schedule'] ) ) {
|
945 |
+
$cron_schedule = $cron_info['schedule'];
|
946 |
+
$cron_interval = ! empty( $cron_schedules[ $cron_schedule ]['interval'] ) ? $cron_schedules[ $cron_schedule ]['interval'] : 0;
|
947 |
+
$es_crons_data[$cron_event] = array(
|
948 |
+
'cron_interval' => $cron_interval,
|
949 |
+
'next_scheduled_time' => $next_scheduled_time,
|
950 |
+
);
|
951 |
+
}
|
952 |
+
}
|
953 |
+
}
|
954 |
+
}
|
955 |
+
}
|
956 |
+
|
957 |
+
$html = '';
|
958 |
+
if( ! empty( $es_crons_data ) ) {
|
959 |
+
ob_start();
|
960 |
+
?>
|
961 |
+
<table class="min-w-full rounded-lg">
|
962 |
+
<thead>
|
963 |
+
<tr class="bg-blue-50 text-xs leading-4 font-medium text-gray-500 uppercase tracking-wider">
|
964 |
+
<th class="px-5 py-4"><?php echo esc_html__( 'Event', 'email-subscribers' ); ?></th>
|
965 |
+
<th class="px-2 py-4 text-center"><?php echo esc_html__( 'Interval', 'email-subscribers' ); ?></th>
|
966 |
+
<th class="px-2 py-4 text-center"><?php echo esc_html__( 'Next Execution', 'email-subscribers' ); ?></th>
|
967 |
+
</tr>
|
968 |
+
</thead>
|
969 |
+
<tbody class="bg-blue-50">
|
970 |
+
<?php
|
971 |
+
foreach( $es_cron_events as $cron_event ) {
|
972 |
+
$cron_interval = '';
|
973 |
+
$next_scheduled_time = '';
|
974 |
+
if( ! empty( $es_crons_data[ $cron_event ] ) ) {
|
975 |
+
$es_cron_data = $es_crons_data[ $cron_event ];
|
976 |
+
$cron_interval = $es_cron_data['cron_interval'];
|
977 |
+
$next_scheduled_time = $es_cron_data['next_scheduled_time'];
|
978 |
+
} else {
|
979 |
+
if( 'ig_es_cron_auto_responder' === $cron_event ) {
|
980 |
+
wp_schedule_event( floor( time() / 300 ) * 300 - 120, 'ig_es_cron_interval', 'ig_es_cron_auto_responder' );
|
981 |
+
} else if( 'ig_es_cron_worker' === $cron_event ) {
|
982 |
+
wp_schedule_event( floor( time() / 300 ) * 300, 'ig_es_cron_interval', 'ig_es_cron_worker' );
|
983 |
+
} else if( 'ig_es_cron' === $cron_event ) {
|
984 |
+
wp_schedule_event( strtotime( 'midnight' ) - 300, 'hourly', 'ig_es_cron' );
|
985 |
+
}
|
986 |
+
$next_scheduled_time = wp_next_scheduled( $cron_event );
|
987 |
+
if( 'ig_es_cron' === $cron_event ) {
|
988 |
+
$cron_interval = 3600; // Hourly interval for ig_es_cron.
|
989 |
+
} else {
|
990 |
+
$cron_interval = ES()->cron->get_cron_interval();
|
991 |
+
}
|
992 |
+
}
|
993 |
+
if( empty( $cron_interval ) || empty( $next_scheduled_time ) ) {
|
994 |
+
continue;
|
995 |
+
}
|
996 |
+
?>
|
997 |
+
<tr class="border-b border-gray-200">
|
998 |
+
<td class="pl-8 py-4 ">
|
999 |
+
<div class="flex items-center">
|
1000 |
+
<div class="flex-shrink-0">
|
1001 |
+
<span class="text-sm leading-5 font-medium text-center text-gray-800"><?php echo $cron_event; ?></span>
|
1002 |
+
</div>
|
1003 |
+
</div>
|
1004 |
+
</td>
|
1005 |
+
<td class="whitespace-no-wrap text-center">
|
1006 |
+
<?php
|
1007 |
+
echo ig_es_get_human_interval( $cron_interval );
|
1008 |
+
?>
|
1009 |
+
</td>
|
1010 |
+
<td class="whitespace-no-wrap text-center">
|
1011 |
+
<b><?php echo esc_html( sprintf( __( "In %s", 'email-subscribers' ), human_time_diff( time(), $next_scheduled_time ) ) ); ?></b><br>
|
1012 |
+
<span title="<?php echo esc_attr( 'UTC: ' . date_i18n( $date_format . ' ' . $time_format, $next_scheduled_time ) ); ?>">
|
1013 |
+
<?php echo date_i18n( $date_format . ' ' . $time_format, $next_scheduled_time + $time_offset ); ?>
|
1014 |
+
</span>
|
1015 |
+
</td>
|
1016 |
+
</tr>
|
1017 |
+
<?php
|
1018 |
+
}
|
1019 |
+
?>
|
1020 |
+
</tbody>
|
1021 |
+
</table>
|
1022 |
+
<?php
|
1023 |
+
$html = ob_get_clean();
|
1024 |
+
}
|
1025 |
+
|
1026 |
+
return $html;
|
1027 |
+
}
|
1028 |
+
|
1029 |
}
|
lite/includes/classes/class-es-campaigns-table.php
CHANGED
@@ -90,60 +90,60 @@ class ES_Campaigns_Table extends WP_List_Table {
|
|
90 |
public function render() {
|
91 |
$action = ig_es_get_request_data( 'action' );
|
92 |
global $ig_es_tracker;
|
93 |
-
if( 'broadcast_created' === $action ) {
|
94 |
|
95 |
// Trigger feedback popup for broadcast creation.
|
96 |
do_action( 'ig_es_broadcast_created' );
|
97 |
|
98 |
-
$message
|
99 |
ES_Common::show_message( $message, 'success' );
|
100 |
}
|
101 |
?>
|
102 |
-
|
103 |
-
|
104 |
<a href="admin.php?page=es_notifications&action=new" class="ig-es-title-button px-2 py-2 mx-1"><?php _e( 'Create Post Notification', 'email-subscribers' ) ?></a></span>
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
}
|
139 |
|
140 |
-
public function custom_admin_notice() {
|
141 |
-
|
142 |
|
143 |
-
|
144 |
-
|
|
|
145 |
}
|
146 |
-
}
|
147 |
|
148 |
/**
|
149 |
* Retrieve lists data from the database
|
@@ -157,10 +157,10 @@ public function custom_admin_notice() {
|
|
157 |
|
158 |
global $wpdb;
|
159 |
|
160 |
-
$order_by
|
161 |
-
$order
|
162 |
-
$search
|
163 |
-
$filter_by_campaign_type
|
164 |
$filter_by_campaign_status = ig_es_get_request_data( 'filter_by_campaign_status' );
|
165 |
|
166 |
if ( $do_count_only ) {
|
@@ -194,20 +194,20 @@ public function custom_admin_notice() {
|
|
194 |
}
|
195 |
|
196 |
if ( ! empty( $filter_by_campaign_status ) || ( '0' === $filter_by_campaign_status ) ) {
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
|
203 |
}
|
204 |
|
205 |
-
if ( ! empty( $filter_by_campaign_type )
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
|
212 |
}
|
213 |
|
@@ -221,7 +221,7 @@ public function custom_admin_notice() {
|
|
221 |
|
222 |
$default_order_by = esc_sql( 'created_at' );
|
223 |
|
224 |
-
$expected_order_by_values = array( '
|
225 |
if ( ! in_array( $order_by, $expected_order_by_values ) ) {
|
226 |
$order_by_clause = " ORDER BY {$default_order_by} DESC";
|
227 |
} else {
|
@@ -293,30 +293,33 @@ public function custom_admin_notice() {
|
|
293 |
switch ( $column_name ) {
|
294 |
|
295 |
case 'list_ids':
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
case 'type':
|
303 |
-
|
304 |
-
|
305 |
|
306 |
-
|
307 |
-
|
|
|
|
|
|
|
308 |
case 'categories':
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
default:
|
319 |
-
|
320 |
}
|
321 |
}
|
322 |
|
@@ -340,11 +343,10 @@ public function custom_admin_notice() {
|
|
340 |
*
|
341 |
* @return string
|
342 |
*/
|
343 |
-
function
|
344 |
|
345 |
$type = $item['type'];
|
346 |
|
347 |
-
|
348 |
$nonce = wp_create_nonce( 'es_post_notification' );
|
349 |
|
350 |
$template = get_post( $item['base_template_id'] );
|
@@ -352,17 +354,22 @@ public function custom_admin_notice() {
|
|
352 |
$report = ES_DB_Mailing_Queue::get_notification_by_campaign_id( $item['id'] );
|
353 |
|
354 |
if ( $type !== 'newsletter' ) {
|
|
|
355 |
if ( $template instanceof WP_Post ) {
|
356 |
$title = '<strong>' . $template->post_title . '</strong>';
|
357 |
} else {
|
358 |
$title = ! empty( $item['name'] ) ? $item['name'] : '';
|
359 |
}
|
360 |
-
|
361 |
-
$actions ['edit'] = sprintf( __( '<a href="?page=%s&action=%s&list=%s&_wpnonce=%s" class="text-indigo-600">Edit</a>', 'email-subscribers' ), $slug, 'edit', absint( $item['id'] ), $nonce );
|
362 |
|
363 |
-
|
|
|
|
|
|
|
|
|
|
|
364 |
// Add reports link if there are any reports related to the post notification.
|
365 |
-
if( ! empty( $report ) ) {
|
366 |
$actions['report'] = sprintf( '<a href="?page=%s&campaign_id=%d" class="text-indigo-600">%s</a>', esc_attr( 'es_reports' ), $item['id'], __( 'Report', 'email-subscribers' ) );
|
367 |
}
|
368 |
}
|
@@ -377,8 +384,8 @@ public function custom_admin_notice() {
|
|
377 |
IG_ES_CAMPAIGN_STATUS_SCHEDULED
|
378 |
);
|
379 |
|
380 |
-
if( in_array( $status, $broadcast_allowed_edit_statuses ) ) {
|
381 |
-
$actions ['edit']
|
382 |
}
|
383 |
|
384 |
$broadcast_allowed_report_statuses = array(
|
@@ -388,8 +395,8 @@ public function custom_admin_notice() {
|
|
388 |
IG_ES_CAMPAIGN_STATUS_FINISHED
|
389 |
);
|
390 |
|
391 |
-
if( in_array( $status, $broadcast_allowed_report_statuses ) && ! empty( $report ) ) {
|
392 |
-
$es_nonce
|
393 |
$actions['report'] = sprintf( '<a href="?page=%s&action=%s&list=%s&_wpnonce=%s" class="text-indigo-600">%s</a>', esc_attr( 'es_reports' ), 'view', $report['hash'], $es_nonce, __( 'Report', 'email-subscribers' ) );
|
394 |
}
|
395 |
}
|
@@ -409,103 +416,106 @@ public function custom_admin_notice() {
|
|
409 |
* @since 4.4.4
|
410 |
*/
|
411 |
function column_status( $item ) {
|
412 |
-
$campaign_id
|
413 |
-
$campaign_status
|
414 |
$campaign_statuses = array(
|
415 |
IG_ES_CAMPAIGN_STATUS_ACTIVE,
|
416 |
IG_ES_CAMPAIGN_STATUS_IN_ACTIVE
|
417 |
);
|
418 |
|
419 |
$campaign_type = '';
|
420 |
-
if( ! empty( $campaign_id ) ) {
|
421 |
$campaign_type = ES()->campaigns_db->get_campaign_type_by_id( $campaign_id );
|
422 |
}
|
423 |
|
424 |
-
if( 'newsletter' !== $campaign_type && in_array( $campaign_status, $campaign_statuses, true ) ) {
|
425 |
?>
|
426 |
-
|
427 |
<span class="relative">
|
428 |
-
<input id="<?php echo esc_attr( 'ig-es-campaign-status-toggle-' . $campaign_id ); ?>" type="checkbox" class="absolute es-check-toggle opacity-0 w-0 h-0" name="<?php echo esc_attr( 'ig-es-campaign-status-toggle-' . $campaign_id ); ?>" value="<?php echo esc_attr( $campaign_id ); ?>" <?php checked( IG_ES_CAMPAIGN_STATUS_ACTIVE,
|
|
|
429 |
<span class="es-mail-toggle-line inline-block w-10 h-6 bg-gray-300 rounded-full shadow-inner"></span>
|
430 |
<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>
|
431 |
</span>
|
432 |
-
|
433 |
<?php
|
434 |
} else {
|
435 |
switch ( $campaign_status ) {
|
436 |
|
437 |
case IG_ES_CAMPAIGN_STATUS_ACTIVE:
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
|
|
462 |
}
|
463 |
-
|
464 |
-
break;
|
465 |
|
466 |
case IG_ES_CAMPAIGN_STATUS_IN_ACTIVE:
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
|
475 |
case IG_ES_CAMPAIGN_STATUS_SCHEDULED:
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
|
484 |
case IG_ES_CAMPAIGN_STATUS_QUEUED:
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
|
|
492 |
|
493 |
case IG_ES_CAMPAIGN_STATUS_PAUSED:
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
|
|
498 |
<?php
|
499 |
break;
|
500 |
|
501 |
default:
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
}
|
510 |
}
|
511 |
?>
|
@@ -519,12 +529,13 @@ public function custom_admin_notice() {
|
|
519 |
*/
|
520 |
function get_columns() {
|
521 |
$columns = array(
|
522 |
-
'cb'
|
523 |
-
'
|
524 |
-
'type'
|
525 |
-
'list_ids'
|
526 |
-
'categories'
|
527 |
-
'
|
|
|
528 |
);
|
529 |
|
530 |
return $columns;
|
@@ -541,7 +552,9 @@ public function custom_admin_notice() {
|
|
541 |
//'base_template_id' => array( 'base_template_id', true ),
|
542 |
//'list_ids' => array( 'list_ids', true ),
|
543 |
//'status' => array( 'status', true )
|
544 |
-
'
|
|
|
|
|
545 |
);
|
546 |
|
547 |
return $sortable_columns;
|
@@ -570,23 +583,23 @@ public function custom_admin_notice() {
|
|
570 |
* @since 4.3.4 Added esc_attr()
|
571 |
*/
|
572 |
public function search_box( $text = '', $input_id = '' ) { ?>
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
<?php submit_button( __( 'Search Campaigns', 'email-subscribers' ), 'button', false, false, array( 'id' => 'search-submit' ) ); ?>
|
577 |
-
|
578 |
-
|
579 |
<?php $filter_by_status = ig_es_get_request_data( 'filter_by_campaign_status' ); ?>
|
580 |
-
|
581 |
<?php echo ES_Common::prepare_campaign_statuses_dropdown_options( $filter_by_status, __( 'All Statuses', 'email-subscribers' ) ); ?>
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
<?php $filter_by_campaign_type = ig_es_get_request_data( 'filter_by_campaign_type' ); ?>
|
586 |
-
|
587 |
<?php echo ES_Common::prepare_campaign_type_dropdown_options( $filter_by_campaign_type, __( 'All Type', 'email-subscribers' ) ); ?>
|
588 |
-
|
589 |
-
|
590 |
<?php }
|
591 |
|
592 |
/**
|
90 |
public function render() {
|
91 |
$action = ig_es_get_request_data( 'action' );
|
92 |
global $ig_es_tracker;
|
93 |
+
if ( 'broadcast_created' === $action ) {
|
94 |
|
95 |
// Trigger feedback popup for broadcast creation.
|
96 |
do_action( 'ig_es_broadcast_created' );
|
97 |
|
98 |
+
$message = __( 'Broadcast has been created successfully.', 'email-subscribers' );
|
99 |
ES_Common::show_message( $message, 'success' );
|
100 |
}
|
101 |
?>
|
102 |
+
<div class="wrap">
|
103 |
+
<h1 class="wp-heading-inline"><span class="text-2xl font-medium leading-7 text-gray-900 sm:leading-9 sm:truncate"><?php _e( 'Campaigns', 'email-subscribers' ) ?>
|
104 |
<a href="admin.php?page=es_notifications&action=new" class="ig-es-title-button px-2 py-2 mx-1"><?php _e( 'Create Post Notification', 'email-subscribers' ) ?></a></span>
|
105 |
+
<a href="admin.php?page=es_newsletters" class="ig-es-title-button px-2 py-2 mx-1"><?php _e( 'Send Broadcast', 'email-subscribers' ) ?></a>
|
106 |
+
<?php do_action( 'ig_es_after_campaign_type_buttons' );
|
107 |
+
|
108 |
+
$icegram_plugin = 'icegram/icegram.php';
|
109 |
+
$active_plugins = $ig_es_tracker::get_active_plugins();
|
110 |
+
if ( in_array( $icegram_plugin, $active_plugins ) ) {
|
111 |
+
$redirect_url = admin_url( 'post-new.php?post_type=ig_campaign' );
|
112 |
+
?>
|
113 |
+
<a href="<?php echo $redirect_url; ?>" class="ig-es-link-button px-2 py-2 mx-1"><?php _e( 'Onsite Campaigns', 'email-subscribers' ) ?></a>
|
114 |
+
<?php } else { ?>
|
115 |
+
<a href="admin.php?page=go_to_icegram&action=create_campaign" class="ig-es-link-button px-2 py-2 mx-1"><?php _e( 'Onsite Campaigns', 'email-subscribers' ) ?></a>
|
116 |
+
<?php } ?>
|
117 |
+
|
118 |
+
<a href="edit.php?post_type=es_template" class="ig-es-imp-button px-2 py-2 mx-1"><?php _e( 'Manage Templates', 'email-subscribers' ) ?></a>
|
119 |
+
|
120 |
+
|
121 |
+
</h1>
|
122 |
+
<div id="poststuff" class="es-items-lists">
|
123 |
+
<div id="post-body" class="metabox-holder column-1">
|
124 |
+
<div id="post-body-content">
|
125 |
+
<div class="meta-box-sortables ui-sortable">
|
126 |
+
<form method="post">
|
127 |
+
<?php
|
128 |
+
$this->prepare_items();
|
129 |
+
$this->display(); ?>
|
130 |
+
</form>
|
131 |
+
</div>
|
132 |
+
</div>
|
133 |
+
</div>
|
134 |
+
<br class="clear">
|
135 |
+
</div>
|
136 |
+
</div>
|
137 |
+
<?php
|
138 |
+
}
|
139 |
|
140 |
+
public function custom_admin_notice() {
|
141 |
+
$es_note_cat = ig_es_get_request_data( 'es_note_cat' );
|
142 |
|
143 |
+
if ( $es_note_cat ) {
|
144 |
+
echo '<div class="updated"><p>' . esc_html( 'Notification Added Successfully!', 'email-subscribers' ) . '</p></div>';
|
145 |
+
}
|
146 |
}
|
|
|
147 |
|
148 |
/**
|
149 |
* Retrieve lists data from the database
|
157 |
|
158 |
global $wpdb;
|
159 |
|
160 |
+
$order_by = sanitize_sql_orderby( ig_es_get_request_data( 'orderby' ) );
|
161 |
+
$order = ig_es_get_request_data( 'order' );
|
162 |
+
$search = ig_es_get_request_data( 's' );
|
163 |
+
$filter_by_campaign_type = ig_es_get_request_data( 'filter_by_campaign_type' );
|
164 |
$filter_by_campaign_status = ig_es_get_request_data( 'filter_by_campaign_status' );
|
165 |
|
166 |
if ( $do_count_only ) {
|
194 |
}
|
195 |
|
196 |
if ( ! empty( $filter_by_campaign_status ) || ( '0' === $filter_by_campaign_status ) ) {
|
197 |
+
if ( $add_where_clause ) {
|
198 |
+
$sql .= $wpdb->prepare( " AND status = %s", $filter_by_campaign_status );
|
199 |
+
} else {
|
200 |
+
$sql .= $wpdb->prepare( " WHERE status = %s", $filter_by_campaign_status );
|
201 |
+
}
|
202 |
|
203 |
}
|
204 |
|
205 |
+
if ( ! empty( $filter_by_campaign_type ) ) {
|
206 |
+
if ( $add_where_clause ) {
|
207 |
+
$sql .= $wpdb->prepare( " AND type = %s", $filter_by_campaign_type );
|
208 |
+
} else {
|
209 |
+
$sql .= $wpdb->prepare( " WHERE type = %s", $filter_by_campaign_type );
|
210 |
+
}
|
211 |
|
212 |
}
|
213 |
|
221 |
|
222 |
$default_order_by = esc_sql( 'created_at' );
|
223 |
|
224 |
+
$expected_order_by_values = array( 'name', 'type', 'created_at' );
|
225 |
if ( ! in_array( $order_by, $expected_order_by_values ) ) {
|
226 |
$order_by_clause = " ORDER BY {$default_order_by} DESC";
|
227 |
} else {
|
293 |
switch ( $column_name ) {
|
294 |
|
295 |
case 'list_ids':
|
296 |
+
if ( ! empty( $item[ $column_name ] ) ) {
|
297 |
+
return ES()->lists_db->get_list_id_name_map( $item[ $column_name ] );
|
298 |
+
} else {
|
299 |
+
return '-';
|
300 |
+
}
|
301 |
+
break;
|
302 |
case 'type':
|
303 |
+
$type = ( $item[ $column_name ] === 'newsletter' ) ? __( 'Broadcast', 'email-subscribers' ) : $item[ $column_name ];
|
304 |
+
$type = ucwords( str_replace( '_', ' ', $type ) );
|
305 |
|
306 |
+
return $type;
|
307 |
+
break;
|
308 |
+
case 'created_at':
|
309 |
+
return ig_es_format_date_time( $item[ $column_name ] );
|
310 |
+
break;
|
311 |
case 'categories':
|
312 |
+
if ( ! empty( $item[ $column_name ] ) ) {
|
313 |
+
$categories = ES_Common::convert_categories_string_to_array( $item[ $column_name ], false );
|
314 |
+
$categories = strpos( $item[ $column_name ], '{a}All{a}' ) ? __( 'All', 'email-subscribers' ) : trim( trim( implode( ', ', $categories ) ), ',' );
|
315 |
|
316 |
+
return $categories;
|
317 |
+
} else {
|
318 |
+
return '-';
|
319 |
+
}
|
320 |
+
break;
|
321 |
default:
|
322 |
+
return $item[ $column_name ];
|
323 |
}
|
324 |
}
|
325 |
|
343 |
*
|
344 |
* @return string
|
345 |
*/
|
346 |
+
function column_name( $item ) {
|
347 |
|
348 |
$type = $item['type'];
|
349 |
|
|
|
350 |
$nonce = wp_create_nonce( 'es_post_notification' );
|
351 |
|
352 |
$template = get_post( $item['base_template_id'] );
|
354 |
$report = ES_DB_Mailing_Queue::get_notification_by_campaign_id( $item['id'] );
|
355 |
|
356 |
if ( $type !== 'newsletter' ) {
|
357 |
+
/*
|
358 |
if ( $template instanceof WP_Post ) {
|
359 |
$title = '<strong>' . $template->post_title . '</strong>';
|
360 |
} else {
|
361 |
$title = ! empty( $item['name'] ) ? $item['name'] : '';
|
362 |
}
|
363 |
+
*/
|
|
|
364 |
|
365 |
+
$title = ! empty( $item['name'] ) ? $item['name'] : '';
|
366 |
+
|
367 |
+
$slug = ( in_array( $item['type'], array( 'post_notification', 'post_digest' ) ) ) ? esc_attr( 'es_notifications' ) : 'es_' . $item['type'];
|
368 |
+
$actions ['edit'] = sprintf( __( '<a href="?page=%s&action=%s&list=%s&_wpnonce=%s" class="text-indigo-600">Edit</a>', 'email-subscribers' ), $slug, 'edit', absint( $item['id'] ), $nonce );
|
369 |
+
|
370 |
+
if ( in_array( $type, array( 'post_notification', 'post_digest' ) ) ) {
|
371 |
// Add reports link if there are any reports related to the post notification.
|
372 |
+
if ( ! empty( $report ) ) {
|
373 |
$actions['report'] = sprintf( '<a href="?page=%s&campaign_id=%d" class="text-indigo-600">%s</a>', esc_attr( 'es_reports' ), $item['id'], __( 'Report', 'email-subscribers' ) );
|
374 |
}
|
375 |
}
|
384 |
IG_ES_CAMPAIGN_STATUS_SCHEDULED
|
385 |
);
|
386 |
|
387 |
+
if ( in_array( $status, $broadcast_allowed_edit_statuses ) ) {
|
388 |
+
$actions ['edit'] = sprintf( __( '<a href="?page=%s&action=%s&list=%s&_wpnonce=%s" class="text-indigo-600">Edit</a>', 'email-subscribers' ), $slug, 'edit', absint( $item['id'] ), $nonce );
|
389 |
}
|
390 |
|
391 |
$broadcast_allowed_report_statuses = array(
|
395 |
IG_ES_CAMPAIGN_STATUS_FINISHED
|
396 |
);
|
397 |
|
398 |
+
if ( in_array( $status, $broadcast_allowed_report_statuses ) && ! empty( $report ) ) {
|
399 |
+
$es_nonce = wp_create_nonce( 'es_notification' );
|
400 |
$actions['report'] = sprintf( '<a href="?page=%s&action=%s&list=%s&_wpnonce=%s" class="text-indigo-600">%s</a>', esc_attr( 'es_reports' ), 'view', $report['hash'], $es_nonce, __( 'Report', 'email-subscribers' ) );
|
401 |
}
|
402 |
}
|
416 |
* @since 4.4.4
|
417 |
*/
|
418 |
function column_status( $item ) {
|
419 |
+
$campaign_id = ! empty( $item['id'] ) ? $item['id'] : 0;
|
420 |
+
$campaign_status = ! empty( $item['status'] ) ? (int) $item['status'] : 0;
|
421 |
$campaign_statuses = array(
|
422 |
IG_ES_CAMPAIGN_STATUS_ACTIVE,
|
423 |
IG_ES_CAMPAIGN_STATUS_IN_ACTIVE
|
424 |
);
|
425 |
|
426 |
$campaign_type = '';
|
427 |
+
if ( ! empty( $campaign_id ) ) {
|
428 |
$campaign_type = ES()->campaigns_db->get_campaign_type_by_id( $campaign_id );
|
429 |
}
|
430 |
|
431 |
+
if ( 'newsletter' !== $campaign_type && in_array( $campaign_status, $campaign_statuses, true ) ) {
|
432 |
?>
|
433 |
+
<label for="<?php echo esc_attr( 'ig-es-campaign-status-toggle-' . $campaign_id ); ?>" class="ig-es-campaign-status-toggle-label inline-flex items-center cursor-pointer">
|
434 |
<span class="relative">
|
435 |
+
<input id="<?php echo esc_attr( 'ig-es-campaign-status-toggle-' . $campaign_id ); ?>" type="checkbox" class="absolute es-check-toggle opacity-0 w-0 h-0" name="<?php echo esc_attr( 'ig-es-campaign-status-toggle-' . $campaign_id ); ?>" value="<?php echo esc_attr( $campaign_id ); ?>" <?php checked( IG_ES_CAMPAIGN_STATUS_ACTIVE,
|
436 |
+
$campaign_status ); ?>>
|
437 |
<span class="es-mail-toggle-line inline-block w-10 h-6 bg-gray-300 rounded-full shadow-inner"></span>
|
438 |
<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>
|
439 |
</span>
|
440 |
+
</label>
|
441 |
<?php
|
442 |
} else {
|
443 |
switch ( $campaign_status ) {
|
444 |
|
445 |
case IG_ES_CAMPAIGN_STATUS_ACTIVE:
|
446 |
+
$notification = ES_DB_Mailing_Queue::get_notification_by_campaign_id( $campaign_id );
|
447 |
+
if ( ! empty( $notification ) ) {
|
448 |
+
$notification_status = $notification['status'];
|
449 |
+
if ( 'In Queue' === $notification_status ) {
|
450 |
+
?>
|
451 |
+
<svg class="flex-shrink-0 ml-2 h-6 w-6 text-orange-400" fill="currentColor" viewBox="0 0 20 20">
|
452 |
+
<title><?php echo esc_attr__( 'Scheduled', 'email-subscribers' ); ?></title>
|
453 |
+
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z" clip-rule="evenodd"/>
|
454 |
+
</svg>
|
455 |
+
<?php
|
456 |
+
} elseif ( 'Sending' === $notification_status ) {
|
457 |
+
?>
|
458 |
+
<svg class="flex-shrink-0 ml-2 h-6 w-6 text-yellow-400" fill="currentColor" viewBox="0 0 20 20">
|
459 |
+
<title><?php echo esc_attr__( 'Sending', 'email-subscribers' ); ?></title>
|
460 |
+
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-8.707l-3-3a1 1 0 00-1.414 1.414L10.586 9H7a1 1 0 100 2h3.586l-1.293 1.293a1 1 0 101.414 1.414l3-3a1 1 0 000-1.414z" clip-rule="evenodd"/>
|
461 |
+
</svg>
|
462 |
+
<?php
|
463 |
+
} else {
|
464 |
+
?>
|
465 |
+
<svg class="flex-shrink-0 ml-2 h-6 w-6 text-green-400" fill="currentColor" viewBox="0 0 20 20">
|
466 |
+
<title><?php echo esc_attr__( 'Sent', 'email-subscribers' ); ?></title>
|
467 |
+
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
468 |
+
</svg>
|
469 |
+
<?php
|
470 |
+
}
|
471 |
}
|
472 |
+
break;
|
|
|
473 |
|
474 |
case IG_ES_CAMPAIGN_STATUS_IN_ACTIVE:
|
475 |
+
?>
|
476 |
+
<svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewBox="0 0 24 24" class="ml-2 h-6 w-6 text-indigo-600">
|
477 |
+
<title><?php echo esc_attr__( 'Draft', 'email-subscribers' ); ?></title>
|
478 |
+
<path d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
|
479 |
+
</svg>
|
480 |
+
<?php
|
481 |
+
break;
|
482 |
|
483 |
case IG_ES_CAMPAIGN_STATUS_SCHEDULED:
|
484 |
+
?>
|
485 |
+
<svg class="flex-shrink-0 ml-2 h-6 w-6 text-orange-400" fill="currentColor" viewBox="0 0 20 20">
|
486 |
+
<title><?php echo esc_attr__( 'Scheduled', 'email-subscribers' ); ?></title>
|
487 |
+
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z" clip-rule="evenodd"/>
|
488 |
+
</svg>
|
489 |
+
<?php
|
490 |
+
break;
|
491 |
|
492 |
case IG_ES_CAMPAIGN_STATUS_QUEUED:
|
493 |
+
?>
|
494 |
+
<svg class="flex-shrink-0 ml-2 h-6 w-6 text-yellow-400" fill="currentColor" viewBox="0 0 20 20">
|
495 |
+
<title><?php echo esc_attr__( 'Sending', 'email-subscribers' ); ?></title>
|
496 |
+
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-8.707l-3-3a1 1 0 00-1.414 1.414L10.586 9H7a1 1 0 100 2h3.586l-1.293 1.293a1 1 0 101.414 1.414l3-3a1 1 0 000-1.414z" clip-rule="evenodd"/>
|
497 |
+
</svg>
|
498 |
+
</svg>
|
499 |
+
<?php
|
500 |
+
break;
|
501 |
|
502 |
case IG_ES_CAMPAIGN_STATUS_PAUSED:
|
503 |
+
?>
|
504 |
+
<svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewBox="0 0 24 24" class="ml-2 h-6 w-6 text-blue-400">
|
505 |
+
<title><?php echo esc_attr__( 'Paused', 'email-subscribers' ); ?></title>
|
506 |
+
<path d="M10 9v6m4-6v6m7-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
507 |
+
</svg>
|
508 |
<?php
|
509 |
break;
|
510 |
|
511 |
default:
|
512 |
+
?>
|
513 |
+
<svg class="flex-shrink-0 ml-2 h-6 w-6 text-green-400" fill="currentColor" viewBox="0 0 20 20">
|
514 |
+
<title><?php echo esc_attr__( 'Sent', 'email-subscribers' ); ?></title>
|
515 |
+
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/>
|
516 |
+
</svg>
|
517 |
+
<?php
|
518 |
+
break;
|
519 |
}
|
520 |
}
|
521 |
?>
|
529 |
*/
|
530 |
function get_columns() {
|
531 |
$columns = array(
|
532 |
+
'cb' => '<input type="checkbox" />',
|
533 |
+
'name' => __( 'Name', 'email-subscribers' ),
|
534 |
+
'type' => __( 'Type', 'email-subscribers' ),
|
535 |
+
'list_ids' => __( 'List', 'email-subscribers' ),
|
536 |
+
'categories' => __( 'Categories', 'email-subscribers' ),
|
537 |
+
'created_at' => __( 'Created On', 'email-subscribers' ),
|
538 |
+
'status' => __( 'Status', 'email-subscribers' )
|
539 |
);
|
540 |
|
541 |
return $columns;
|
552 |
//'base_template_id' => array( 'base_template_id', true ),
|
553 |
//'list_ids' => array( 'list_ids', true ),
|
554 |
//'status' => array( 'status', true )
|
555 |
+
'name' => array( 'name', true ),
|
556 |
+
'type' => array( 'type', true ),
|
557 |
+
'created_at' => array( 'created_at', true )
|
558 |
);
|
559 |
|
560 |
return $sortable_columns;
|
583 |
* @since 4.3.4 Added esc_attr()
|
584 |
*/
|
585 |
public function search_box( $text = '', $input_id = '' ) { ?>
|
586 |
+
<p class="search-box">
|
587 |
+
<label class="screen-reader-text" for="<?php echo esc_attr( $input_id ); ?>"><?php echo esc_attr( $text ); ?>:</label>
|
588 |
+
<input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>"/>
|
589 |
<?php submit_button( __( 'Search Campaigns', 'email-subscribers' ), 'button', false, false, array( 'id' => 'search-submit' ) ); ?>
|
590 |
+
</p>
|
591 |
+
<p class="search-box search-group-box box-ma10">
|
592 |
<?php $filter_by_status = ig_es_get_request_data( 'filter_by_campaign_status' ); ?>
|
593 |
+
<select name="filter_by_campaign_status" id="ig_es_filter_campaign_status_by_type">
|
594 |
<?php echo ES_Common::prepare_campaign_statuses_dropdown_options( $filter_by_status, __( 'All Statuses', 'email-subscribers' ) ); ?>
|
595 |
+
</select>
|
596 |
+
</p>
|
597 |
+
<p class="search-box search-group-box box-ma10">
|
598 |
<?php $filter_by_campaign_type = ig_es_get_request_data( 'filter_by_campaign_type' ); ?>
|
599 |
+
<select name="filter_by_campaign_type" id="ig_es_filter_campaign_type">
|
600 |
<?php echo ES_Common::prepare_campaign_type_dropdown_options( $filter_by_campaign_type, __( 'All Type', 'email-subscribers' ) ); ?>
|
601 |
+
</select>
|
602 |
+
</p>
|
603 |
<?php }
|
604 |
|
605 |
/**
|
lite/includes/classes/class-es-contacts-table.php
CHANGED
@@ -491,7 +491,7 @@ class ES_Contacts_Table extends WP_List_Table {
|
|
491 |
?>
|
492 |
|
493 |
<div class="wrap max-w-full mt-1 font-sans">
|
494 |
-
<header class="
|
495 |
<div class="md:flex md:items-center md:justify-between justify-center">
|
496 |
<div class="flex-1 min-w-0">
|
497 |
<h2 class="text-2xl leading-7 text-gray-900 sm:leading-9 sm:truncate">
|
@@ -517,8 +517,8 @@ class ES_Contacts_Table extends WP_List_Table {
|
|
517 |
</div>
|
518 |
</div>
|
519 |
</header>
|
520 |
-
<div class="
|
521 |
-
<div class="
|
522 |
<?php echo $this->prepare_contact_form( $data, $is_new ); ?>
|
523 |
|
524 |
</div>
|
491 |
?>
|
492 |
|
493 |
<div class="wrap max-w-full mt-1 font-sans">
|
494 |
+
<header class="wp-heading-inline">
|
495 |
<div class="md:flex md:items-center md:justify-between justify-center">
|
496 |
<div class="flex-1 min-w-0">
|
497 |
<h2 class="text-2xl leading-7 text-gray-900 sm:leading-9 sm:truncate">
|
517 |
</div>
|
518 |
</div>
|
519 |
</header>
|
520 |
+
<div class=""><hr class="wp-header-end"></div>
|
521 |
+
<div class="bg-white shadow-md rounded-lg">
|
522 |
<?php echo $this->prepare_contact_form( $data, $is_new ); ?>
|
523 |
|
524 |
</div>
|
lite/includes/classes/class-es-export-subscribers.php
CHANGED
@@ -315,7 +315,6 @@ public function export_subscribers_page() {
|
|
315 |
|
316 |
$lists_id_name_map = ES()->lists_db->get_list_id_name_map();
|
317 |
$csv_output .= implode( ',', $headers );
|
318 |
-
$csv_output .= "\n";
|
319 |
|
320 |
foreach ( $subscribers as $key => $subscriber ) {
|
321 |
|
@@ -330,8 +329,8 @@ public function export_subscribers_page() {
|
|
330 |
$data['status'] = ucfirst( $list_details['status'] );
|
331 |
$data['optin_type'] = ( $list_details['optin_type'] == 1 ) ? 'Single Opt-In' : 'Double Opt-In';
|
332 |
$data['created_at'] = $subscriber['created_at'];
|
333 |
-
$csv_output .= '"' . implode( '","', $data ) . '"';
|
334 |
$csv_output .= "\n";
|
|
|
335 |
}
|
336 |
}
|
337 |
}
|
315 |
|
316 |
$lists_id_name_map = ES()->lists_db->get_list_id_name_map();
|
317 |
$csv_output .= implode( ',', $headers );
|
|
|
318 |
|
319 |
foreach ( $subscribers as $key => $subscriber ) {
|
320 |
|
329 |
$data['status'] = ucfirst( $list_details['status'] );
|
330 |
$data['optin_type'] = ( $list_details['optin_type'] == 1 ) ? 'Single Opt-In' : 'Double Opt-In';
|
331 |
$data['created_at'] = $subscriber['created_at'];
|
|
|
332 |
$csv_output .= "\n";
|
333 |
+
$csv_output .= '"' . implode( '","', $data ) . '"';
|
334 |
}
|
335 |
}
|
336 |
}
|
lite/includes/classes/class-es-forms-table.php
CHANGED
@@ -86,6 +86,16 @@ class ES_Forms_Table extends WP_List_Table {
|
|
86 |
</a>
|
87 |
</span>
|
88 |
</h1>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
<div id="poststuff" class="es-items-lists">
|
90 |
<div id="post-body" class="metabox-holder column-1">
|
91 |
<div id="post-body-content">
|
@@ -171,8 +181,9 @@ class ES_Forms_Table extends WP_List_Table {
|
|
171 |
}
|
172 |
|
173 |
$this->save_form( null, $form_data );
|
174 |
-
$
|
175 |
-
|
|
|
176 |
}
|
177 |
|
178 |
$this->prepare_list_form();
|
@@ -219,8 +230,10 @@ class ES_Forms_Table extends WP_List_Table {
|
|
219 |
}
|
220 |
|
221 |
$this->save_form( $id, $form_data );
|
222 |
-
$
|
223 |
-
|
|
|
|
|
224 |
} else {
|
225 |
|
226 |
$data = $data[0];
|
@@ -267,7 +280,7 @@ class ES_Forms_Table extends WP_List_Table {
|
|
267 |
?>
|
268 |
|
269 |
<div class="wrap max-w-full mt-1 font-sans">
|
270 |
-
<header class="
|
271 |
<div class="md:flex md:items-center md:justify-between justify-center">
|
272 |
<div class="flex-1 min-w-0">
|
273 |
<h1 class="text-2xl leading-7 text-gray-900 sm:leading-9 sm:truncate">
|
@@ -285,11 +298,11 @@ class ES_Forms_Table extends WP_List_Table {
|
|
285 |
</div>
|
286 |
</div>
|
287 |
</header>
|
288 |
-
<div class="
|
289 |
<div id="poststuff">
|
290 |
<div id="post-body" class="metabox-holder column-1">
|
291 |
<div id="post-body-content">
|
292 |
-
<div class="
|
293 |
<form class="pt-8 ml-5 mr-4 text-left flex-row mt-2 item-center " method="post" action="admin.php?page=es_forms&action=<?php echo $action; ?>&form=<?php echo $id; ?>&_wpnonce=<?php echo $nonce; ?>">
|
294 |
|
295 |
|
@@ -316,7 +329,7 @@ class ES_Forms_Table extends WP_List_Table {
|
|
316 |
<div class="flex ">
|
317 |
<div class="ml-16 mb-4 h-10 mr-4 mt-4">
|
318 |
<div class="h-10 relative ">
|
319 |
-
<input id="ig_es_title" class="form-input block border-gray-400 w-full pl-3 pr-12 shadow-sm focus:bg-gray-100 sm:text-sm sm:leading-5" placeholder="Enter description" name="form_data[desc]" id="ig_es_title" value="<?php echo stripslashes( $form_data['desc'] ); ?>" size="30"
|
320 |
</div>
|
321 |
</div>
|
322 |
</div>
|
86 |
</a>
|
87 |
</span>
|
88 |
</h1>
|
89 |
+
<?php
|
90 |
+
if( 'form_created' === $action ){
|
91 |
+
$message = __( 'Form has been added successfully!', 'email-subscribers' );
|
92 |
+
ES_Common::show_message( $message, 'success' );
|
93 |
+
}
|
94 |
+
elseif( 'form_updated' === $action ){
|
95 |
+
$message = __( 'Form has been updated successfully!', 'email-subscribers' );
|
96 |
+
ES_Common::show_message( $message, 'success' );
|
97 |
+
}
|
98 |
+
?>
|
99 |
<div id="poststuff" class="es-items-lists">
|
100 |
<div id="post-body" class="metabox-holder column-1">
|
101 |
<div id="post-body-content">
|
181 |
}
|
182 |
|
183 |
$this->save_form( null, $form_data );
|
184 |
+
$form_url = admin_url( 'admin.php?page=es_forms&action=form_created' );
|
185 |
+
wp_safe_redirect( $form_url );
|
186 |
+
exit();
|
187 |
}
|
188 |
|
189 |
$this->prepare_list_form();
|
230 |
}
|
231 |
|
232 |
$this->save_form( $id, $form_data );
|
233 |
+
$form_url = admin_url( 'admin.php?page=es_forms&action=form_updated' );
|
234 |
+
wp_safe_redirect( $form_url );
|
235 |
+
exit();
|
236 |
+
|
237 |
} else {
|
238 |
|
239 |
$data = $data[0];
|
280 |
?>
|
281 |
|
282 |
<div class="wrap max-w-full mt-1 font-sans">
|
283 |
+
<header class="wp-heading-inline">
|
284 |
<div class="md:flex md:items-center md:justify-between justify-center">
|
285 |
<div class="flex-1 min-w-0">
|
286 |
<h1 class="text-2xl leading-7 text-gray-900 sm:leading-9 sm:truncate">
|
298 |
</div>
|
299 |
</div>
|
300 |
</header>
|
301 |
+
<div class=""><hr class="wp-header-end"></div>
|
302 |
<div id="poststuff">
|
303 |
<div id="post-body" class="metabox-holder column-1">
|
304 |
<div id="post-body-content">
|
305 |
+
<div class="bg-white shadow-md rounded-lg">
|
306 |
<form class="pt-8 ml-5 mr-4 text-left flex-row mt-2 item-center " method="post" action="admin.php?page=es_forms&action=<?php echo $action; ?>&form=<?php echo $id; ?>&_wpnonce=<?php echo $nonce; ?>">
|
307 |
|
308 |
|
329 |
<div class="flex ">
|
330 |
<div class="ml-16 mb-4 h-10 mr-4 mt-4">
|
331 |
<div class="h-10 relative ">
|
332 |
+
<input id="ig_es_title" class="form-input block border-gray-400 w-full pl-3 pr-12 shadow-sm focus:bg-gray-100 sm:text-sm sm:leading-5" placeholder="Enter description" name="form_data[desc]" id="ig_es_title" value="<?php echo stripslashes( $form_data['desc'] ); ?>" size="30" />
|
333 |
</div>
|
334 |
</div>
|
335 |
</div>
|
lite/includes/classes/class-es-lists-table.php
CHANGED
@@ -246,7 +246,7 @@ class ES_Lists_Table extends WP_List_Table {
|
|
246 |
?>
|
247 |
|
248 |
<div class="wrap max-w-full mt-8 font-sans">
|
249 |
-
<header class="
|
250 |
<div class="md:flex md:items-center md:justify-between justify-center">
|
251 |
<div class="flex-1 min-w-0">
|
252 |
<h2 class="text-2xl font-medium leading-7 text-gray-900 sm:leading-9 sm:truncate">
|
@@ -266,12 +266,12 @@ class ES_Lists_Table extends WP_List_Table {
|
|
266 |
</div>
|
267 |
</div>
|
268 |
</header>
|
269 |
-
<div class="
|
270 |
<div class="rounded max-w-full ">
|
271 |
<div id="poststuff">
|
272 |
<div id="post-body" class="metabox-holder column-1">
|
273 |
<div id="post-body-content">
|
274 |
-
<div class="
|
275 |
<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; ?>">
|
276 |
|
277 |
<div class="flex flex-row ">
|
246 |
?>
|
247 |
|
248 |
<div class="wrap max-w-full mt-8 font-sans">
|
249 |
+
<header class="wp-heading-inline">
|
250 |
<div class="md:flex md:items-center md:justify-between justify-center">
|
251 |
<div class="flex-1 min-w-0">
|
252 |
<h2 class="text-2xl font-medium leading-7 text-gray-900 sm:leading-9 sm:truncate">
|
266 |
</div>
|
267 |
</div>
|
268 |
</header>
|
269 |
+
<div class=""><hr class="wp-header-end"></div>
|
270 |
<div class="rounded max-w-full ">
|
271 |
<div id="poststuff">
|
272 |
<div id="post-body" class="metabox-holder column-1">
|
273 |
<div id="post-body-content">
|
274 |
+
<div class="bg-white shadow-md rounded-lg">
|
275 |
<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; ?>">
|
276 |
|
277 |
<div class="flex flex-row ">
|
lite/includes/classes/class-es-mailer.php
CHANGED
@@ -796,9 +796,7 @@ if ( ! class_exists( 'ES_Mailer' ) ) {
|
|
796 |
// Convert text equivalent of smilies to images.
|
797 |
$content = convert_smilies( wptexturize( $content ) );
|
798 |
|
799 |
-
|
800 |
-
$content = $GLOBALS['wp_embed']->autoembed( $content );
|
801 |
-
}
|
802 |
|
803 |
// Replaces double line-breaks with paragraph elements.
|
804 |
//$content = wpautop( $content );
|
796 |
// Convert text equivalent of smilies to images.
|
797 |
$content = convert_smilies( wptexturize( $content ) );
|
798 |
|
799 |
+
$content = ES_Common::handle_oembed_content( $content );
|
|
|
|
|
800 |
|
801 |
// Replaces double line-breaks with paragraph elements.
|
802 |
//$content = wpautop( $content );
|
lite/includes/classes/class-es-newsletters.php
CHANGED
@@ -225,8 +225,8 @@ class ES_Newsletters {
|
|
225 |
<input type="hidden" id="broadcast_id" name="broadcast_data[id]" value="<?php echo esc_attr( $broadcast_id ); ?>"/>
|
226 |
<input type="hidden" id="broadcast_status" name="broadcast_data[status]" value="<?php echo esc_attr( $broadcast_status ); ?>"/>
|
227 |
<fieldset class="block es_fieldset">
|
228 |
-
<div class="mx-auto wp-heading-inline max-w-7xl
|
229 |
-
<header class="mx-auto max-w-7xl
|
230 |
<div class="pb-2 md:flex md:items-center md:justify-between">
|
231 |
<div class="flex md:3/5 lg:w-7/12 xl:w-3/5">
|
232 |
<div class="flex min-w-0 md:w-3/5 lg:w-1/2">
|
@@ -310,13 +310,13 @@ class ES_Newsletters {
|
|
310 |
</div>
|
311 |
</header>
|
312 |
</div>
|
313 |
-
<div class="mx-auto max-w-7xl
|
314 |
<hr class="wp-header-end">
|
315 |
</div>
|
316 |
-
<div class="
|
317 |
-
<div
|
318 |
-
<div class="
|
319 |
-
<div class="broadcast_main_content pl-2">
|
320 |
<div class="block px-4 py-2">
|
321 |
<label for="ig_es_broadcast_subject" class="text-sm font-medium leading-5 text-gray-700"><?php echo esc_html__( 'Subject', 'email-subscribers' ); ?></label>
|
322 |
<input id="ig_es_broadcast_subject" class="block w-full mt-1 text-sm leading-5 border-gray-400 rounded-md shadow-sm form-input" name="broadcast_data[subject]" value="<?php echo esc_attr( $broadcast_subject ); ?>"/>
|
@@ -347,8 +347,8 @@ class ES_Newsletters {
|
|
347 |
</div>
|
348 |
<?php do_action( 'ig_es_after_broadcast_left_pan_settings', $broadcast_data ); ?>
|
349 |
</div>
|
350 |
-
<div class="broadcast_side_content ml-2
|
351 |
-
<div class="block
|
352 |
<label for="template" class="text-sm font-medium leading-5 text-gray-700"><?php echo esc_html__( 'Design Template', 'email-subscribers' ); ?></label>
|
353 |
<select class="block w-full h-8 mt-1 text-sm rounded-md cursor-pointer h-9 form-select" name="broadcast_data[template_id]" id="base_template_id">
|
354 |
<?php echo $templates ?>
|
@@ -365,7 +365,7 @@ class ES_Newsletters {
|
|
365 |
</div>
|
366 |
</div>
|
367 |
|
368 |
-
<div class="block
|
369 |
<span class="block pt-2 text-sm font-medium leading-5 text-gray-700 border-t border-gray-200"><?php echo esc_html__( 'Preview', 'email-subscribers' ); ?></span>
|
370 |
<div class="py-2">
|
371 |
<input type="radio" name="preview_option" class="form-radio" id="preview_in_popup" value="preview_in_popup" checked>
|
@@ -374,13 +374,6 @@ class ES_Newsletters {
|
|
374 |
<br>
|
375 |
</div>
|
376 |
|
377 |
-
<!--
|
378 |
-
<label class=" text-sm font-medium leading-5 text-gray-700"><?php echo esc_html__( 'Preview', 'email-subscribers' ); ?></label>
|
379 |
-
<button type="button" id="es_preview_template"
|
380 |
-
class="rounded-md border text-indigo-600 border-indigo-500 text-sm leading-5 font-medium transition ease-in-out duration-150 select-none inline-flex justify-center hover:text-indigo-500 hover:border-indigo-600 hover:shadow-md focus:outline-none focus:shadow-outline-indigo focus:shadow-lg px-3 py-1.5 mx-2">
|
381 |
-
<?php echo esc_html__( 'In Browser', 'email-subscribers' ); ?>
|
382 |
-
</button> -->
|
383 |
-
|
384 |
<img class="es-loader inline-flex align-middle" src="<?php echo ES_PLUGIN_URL ?>lite/public/images/spinner.gif" style="display:none;"/>
|
385 |
|
386 |
<div class="hidden" id="preview_template">
|
@@ -414,13 +407,13 @@ class ES_Newsletters {
|
|
414 |
|
415 |
<fieldset class="es_fieldset">
|
416 |
|
417 |
-
<div class="
|
418 |
<?php
|
419 |
$inline_preview_data = $this->get_broadcast_inline_preview_data( $broadcast_data );
|
420 |
?>
|
421 |
-
<div class="max-w-7xl
|
422 |
-
<div class="
|
423 |
-
<div class="broadcast_main_content pt-3 pl-2">
|
424 |
<div class="block pb-2 mx-4">
|
425 |
<span class="text-sm font-medium text-gray-500"><?php echo esc_html__( 'Email Content Preview', 'email-subscribers' ); ?></span>
|
426 |
</div>
|
@@ -450,8 +443,8 @@ class ES_Newsletters {
|
|
450 |
|
451 |
</div>
|
452 |
|
453 |
-
<div class="broadcast_side_content ml-2
|
454 |
-
<div id="ig_es_total_recipients" class="block
|
455 |
|
456 |
</div>
|
457 |
|
225 |
<input type="hidden" id="broadcast_id" name="broadcast_data[id]" value="<?php echo esc_attr( $broadcast_id ); ?>"/>
|
226 |
<input type="hidden" id="broadcast_status" name="broadcast_data[status]" value="<?php echo esc_attr( $broadcast_status ); ?>"/>
|
227 |
<fieldset class="block es_fieldset">
|
228 |
+
<div class="mx-auto wp-heading-inline max-w-7xl">
|
229 |
+
<header class="mx-auto max-w-7xl">
|
230 |
<div class="pb-2 md:flex md:items-center md:justify-between">
|
231 |
<div class="flex md:3/5 lg:w-7/12 xl:w-3/5">
|
232 |
<div class="flex min-w-0 md:w-3/5 lg:w-1/2">
|
310 |
</div>
|
311 |
</header>
|
312 |
</div>
|
313 |
+
<div class="mx-auto max-w-7xl">
|
314 |
<hr class="wp-header-end">
|
315 |
</div>
|
316 |
+
<div class="mx-auto my-4 es_broadcast_first max-w-7xl">
|
317 |
+
<div>
|
318 |
+
<div class=" bg-white rounded-lg shadow-md md:flex">
|
319 |
+
<div class="broadcast_main_content py-4 pl-2">
|
320 |
<div class="block px-4 py-2">
|
321 |
<label for="ig_es_broadcast_subject" class="text-sm font-medium leading-5 text-gray-700"><?php echo esc_html__( 'Subject', 'email-subscribers' ); ?></label>
|
322 |
<input id="ig_es_broadcast_subject" class="block w-full mt-1 text-sm leading-5 border-gray-400 rounded-md shadow-sm form-input" name="broadcast_data[subject]" value="<?php echo esc_attr( $broadcast_subject ); ?>"/>
|
347 |
</div>
|
348 |
<?php do_action( 'ig_es_after_broadcast_left_pan_settings', $broadcast_data ); ?>
|
349 |
</div>
|
350 |
+
<div class="broadcast_side_content ml-2 bg-gray-100 rounded-r-lg">
|
351 |
+
<div class="block pt-6 mx-4 pb-3">
|
352 |
<label for="template" class="text-sm font-medium leading-5 text-gray-700"><?php echo esc_html__( 'Design Template', 'email-subscribers' ); ?></label>
|
353 |
<select class="block w-full h-8 mt-1 text-sm rounded-md cursor-pointer h-9 form-select" name="broadcast_data[template_id]" id="base_template_id">
|
354 |
<?php echo $templates ?>
|
365 |
</div>
|
366 |
</div>
|
367 |
|
368 |
+
<div class="block pt-1 mx-4">
|
369 |
<span class="block pt-2 text-sm font-medium leading-5 text-gray-700 border-t border-gray-200"><?php echo esc_html__( 'Preview', 'email-subscribers' ); ?></span>
|
370 |
<div class="py-2">
|
371 |
<input type="radio" name="preview_option" class="form-radio" id="preview_in_popup" value="preview_in_popup" checked>
|
374 |
<br>
|
375 |
</div>
|
376 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
377 |
<img class="es-loader inline-flex align-middle" src="<?php echo ES_PLUGIN_URL ?>lite/public/images/spinner.gif" style="display:none;"/>
|
378 |
|
379 |
<div class="hidden" id="preview_template">
|
407 |
|
408 |
<fieldset class="es_fieldset">
|
409 |
|
410 |
+
<div class="my-4 hidden mx-auto es_broadcast_second max-w-7xl">
|
411 |
<?php
|
412 |
$inline_preview_data = $this->get_broadcast_inline_preview_data( $broadcast_data );
|
413 |
?>
|
414 |
+
<div class="max-w-7xl">
|
415 |
+
<div class=" bg-white rounded-lg shadow md:flex">
|
416 |
+
<div class="py-4 my-4 broadcast_main_content pt-3 pl-2">
|
417 |
<div class="block pb-2 mx-4">
|
418 |
<span class="text-sm font-medium text-gray-500"><?php echo esc_html__( 'Email Content Preview', 'email-subscribers' ); ?></span>
|
419 |
</div>
|
443 |
|
444 |
</div>
|
445 |
|
446 |
+
<div class="broadcast_side_content ml-2 bg-gray-100 rounded-r-lg">
|
447 |
+
<div id="ig_es_total_recipients" class="block mx-4 border-b border-gray-200">
|
448 |
|
449 |
</div>
|
450 |
|
lite/includes/classes/class-es-post-notifications.php
CHANGED
@@ -254,7 +254,7 @@ class ES_Post_Notifications_Table {
|
|
254 |
?>
|
255 |
|
256 |
<div class="wrap max-w-full mt-1 font-sans">
|
257 |
-
<header class="
|
258 |
<div class="sm:grid sm:grid-cols lg:grid lg:grid-cols-2 max-w-full">
|
259 |
<div class="mt-2">
|
260 |
<h2 class="text-2xl font-medium mt-2 text-gray-900 sm:leading-9 sm:truncate">
|
@@ -275,9 +275,9 @@ class ES_Post_Notifications_Table {
|
|
275 |
</div>
|
276 |
</div>
|
277 |
</header>
|
278 |
-
<div class="
|
279 |
|
280 |
-
<div class="
|
281 |
<form class="ml-5 mr-4 text-left pt-4 mt-2 item-center" method="post" action="admin.php?page=es_notifications&action=<?php echo $action; ?>&list=<?php echo $id; ?>&_wpnonce=<?php echo $nonce; ?>">
|
282 |
|
283 |
<table class="max-w-full form-table">
|
254 |
?>
|
255 |
|
256 |
<div class="wrap max-w-full mt-1 font-sans">
|
257 |
+
<header class="wp-heading-inline">
|
258 |
<div class="sm:grid sm:grid-cols lg:grid lg:grid-cols-2 max-w-full">
|
259 |
<div class="mt-2">
|
260 |
<h2 class="text-2xl font-medium mt-2 text-gray-900 sm:leading-9 sm:truncate">
|
275 |
</div>
|
276 |
</div>
|
277 |
</header>
|
278 |
+
<div class=""><hr class="wp-header-end"></div>
|
279 |
|
280 |
+
<div class="bg-white shadow-md rounded-lg">
|
281 |
<form class="ml-5 mr-4 text-left pt-4 mt-2 item-center" method="post" action="admin.php?page=es_notifications&action=<?php echo $action; ?>&list=<?php echo $id; ?>&_wpnonce=<?php echo $nonce; ?>">
|
282 |
|
283 |
<table class="max-w-full form-table">
|
lite/includes/es-core-functions.php
CHANGED
@@ -406,9 +406,28 @@ if ( ! function_exists( 'ig_es_get_upcoming_weekly_datetime' ) ) {
|
|
406 |
6 => 'saturday'
|
407 |
);
|
408 |
|
409 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
410 |
|
411 |
-
$timestamp = strtotime( $
|
412 |
|
413 |
return $timestamp;
|
414 |
|
@@ -599,3 +618,81 @@ if ( ! function_exists( 'ig_es_array_insert_after' ) ) {
|
|
599 |
}
|
600 |
}
|
601 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
406 |
6 => 'saturday'
|
407 |
);
|
408 |
|
409 |
+
$current_day = (int) current_time( 'N' );
|
410 |
+
|
411 |
+
// If campaign day is same as the current day then check campaign time also with current time since campaign time may have not already been passed.
|
412 |
+
if( $current_day === (int) $frequency_interval ) {
|
413 |
+
// Get curret time.
|
414 |
+
$current_hours = (int) current_time( 'H' );
|
415 |
+
$current_minutes = (int) current_time( 'i' );
|
416 |
+
$current_seconds = (int) current_time( 's' );
|
417 |
+
|
418 |
+
$current_time = $current_hours * HOUR_IN_SECONDS + $current_minutes * MINUTE_IN_SECONDS + $current_seconds;
|
419 |
+
|
420 |
+
// Check if campaign time has not yet passed then we can use today's date/time else use date/time when campaign day comes next time.
|
421 |
+
if( $current_time < $time ) {
|
422 |
+
$week_day_str = 'today';
|
423 |
+
} else {
|
424 |
+
$week_day_str = 'next ' . $week_days_map[ $frequency_interval ];
|
425 |
+
}
|
426 |
+
} else {
|
427 |
+
$week_day_str = 'next ' . $week_days_map[ $frequency_interval ];
|
428 |
+
}
|
429 |
|
430 |
+
$timestamp = strtotime( $week_day_str ) + $time;
|
431 |
|
432 |
return $timestamp;
|
433 |
|
618 |
}
|
619 |
}
|
620 |
|
621 |
+
if ( ! function_exists( 'ig_es_get_raw_human_interval' ) ) {
|
622 |
+
/**
|
623 |
+
* Gets interval split by days, hours, minutes and seconds
|
624 |
+
*
|
625 |
+
* @param $interval_in_seconds
|
626 |
+
*
|
627 |
+
* @return array
|
628 |
+
*
|
629 |
+
* @since 4.4.9
|
630 |
+
*/
|
631 |
+
function ig_es_get_raw_human_interval( $interval_in_seconds = 0 ) {
|
632 |
+
|
633 |
+
$interval = array();
|
634 |
+
|
635 |
+
$seconds_in_minute = 60;
|
636 |
+
$seconds_in__hour = 60 * $seconds_in_minute;
|
637 |
+
$seconds_in_day = 24 * $seconds_in__hour;
|
638 |
+
|
639 |
+
// extract days
|
640 |
+
$interval['days'] = floor( $interval_in_seconds / $seconds_in_day );
|
641 |
+
|
642 |
+
// extract hours
|
643 |
+
$hour_seconds = $interval_in_seconds % $seconds_in_day;
|
644 |
+
$interval['hours'] = floor( $hour_seconds / $seconds_in__hour );
|
645 |
+
|
646 |
+
// extract minutes
|
647 |
+
$minute_seconds = $hour_seconds % $seconds_in__hour;
|
648 |
+
$interval['minutes'] = floor( $minute_seconds / $seconds_in_minute );
|
649 |
+
|
650 |
+
// extract the remaining seconds
|
651 |
+
$remaining_seconds = $minute_seconds % $seconds_in_minute;
|
652 |
+
$interval['seconds'] = ceil( $remaining_seconds );
|
653 |
+
|
654 |
+
return $interval;
|
655 |
+
|
656 |
+
}
|
657 |
+
}
|
658 |
+
|
659 |
+
if ( ! function_exists( 'ig_es_get_human_interval' ) ) {
|
660 |
+
/**
|
661 |
+
* Gets interval in human readable format
|
662 |
+
*
|
663 |
+
* @param $interval_in_seconds
|
664 |
+
*
|
665 |
+
* @return string
|
666 |
+
*
|
667 |
+
* @since 4.4.9
|
668 |
+
*/
|
669 |
+
function ig_es_get_human_interval( $interval_in_seconds = 0 ) {
|
670 |
+
|
671 |
+
$interval = ig_es_get_raw_human_interval( $interval_in_seconds );
|
672 |
+
|
673 |
+
$human_time = '';
|
674 |
+
|
675 |
+
if ( $interval['days'] > 0 ) {
|
676 |
+
$human_time .= $interval['days'] . 'd ';
|
677 |
+
}
|
678 |
+
|
679 |
+
if ( $interval['hours'] > 0 ) {
|
680 |
+
$human_time .= $interval['hours'] . 'h ';
|
681 |
+
}
|
682 |
+
|
683 |
+
if ( $interval['minutes'] > 0 ) {
|
684 |
+
$human_time .= $interval['minutes'] . 'm ';
|
685 |
+
}
|
686 |
+
|
687 |
+
if ( $interval['seconds'] > 0 ) {
|
688 |
+
$human_time .= $interval['seconds'] . 's ';
|
689 |
+
}
|
690 |
+
|
691 |
+
if ( empty( $human_time ) ) {
|
692 |
+
$human_time = '0s';
|
693 |
+
}
|
694 |
+
|
695 |
+
return trim( $human_time );
|
696 |
+
|
697 |
+
}
|
698 |
+
}
|
lite/includes/libraries/action-scheduler/action-scheduler.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Description: A robust scheduling library for use in WordPress plugins.
|
6 |
* Author: Automattic
|
7 |
* Author URI: https://automattic.com/
|
8 |
-
* Version: 3.1.
|
9 |
* License: GPLv3
|
10 |
*
|
11 |
* Copyright 2019 Automattic, Inc. (https://automattic.com/contact/)
|
@@ -25,28 +25,28 @@
|
|
25 |
*
|
26 |
*/
|
27 |
|
28 |
-
if ( ! function_exists( '
|
29 |
|
30 |
if ( ! class_exists( 'ActionScheduler_Versions' ) ) {
|
31 |
require_once( 'classes/ActionScheduler_Versions.php' );
|
32 |
add_action( 'plugins_loaded', array( 'ActionScheduler_Versions', 'initialize_latest_version' ), 1, 0 );
|
33 |
}
|
34 |
|
35 |
-
add_action( 'plugins_loaded', '
|
36 |
|
37 |
-
function
|
38 |
$versions = ActionScheduler_Versions::instance();
|
39 |
-
$versions->register( '3.1.
|
40 |
}
|
41 |
|
42 |
-
function
|
43 |
require_once( 'classes/abstracts/ActionScheduler.php' );
|
44 |
ActionScheduler::init( __FILE__ );
|
45 |
}
|
46 |
|
47 |
// Support usage in themes - load this version if no plugin has loaded a version yet.
|
48 |
if ( did_action( 'plugins_loaded' ) && ! class_exists( 'ActionScheduler' ) ) {
|
49 |
-
|
50 |
do_action( 'action_scheduler_pre_theme_init' );
|
51 |
ActionScheduler_Versions::initialize_latest_version();
|
52 |
}
|
5 |
* Description: A robust scheduling library for use in WordPress plugins.
|
6 |
* Author: Automattic
|
7 |
* Author URI: https://automattic.com/
|
8 |
+
* Version: 3.1.6
|
9 |
* License: GPLv3
|
10 |
*
|
11 |
* Copyright 2019 Automattic, Inc. (https://automattic.com/contact/)
|
25 |
*
|
26 |
*/
|
27 |
|
28 |
+
if ( ! function_exists( 'action_scheduler_register_3_dot_1_dot_6' ) ) {
|
29 |
|
30 |
if ( ! class_exists( 'ActionScheduler_Versions' ) ) {
|
31 |
require_once( 'classes/ActionScheduler_Versions.php' );
|
32 |
add_action( 'plugins_loaded', array( 'ActionScheduler_Versions', 'initialize_latest_version' ), 1, 0 );
|
33 |
}
|
34 |
|
35 |
+
add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_1_dot_6', 0, 0 );
|
36 |
|
37 |
+
function action_scheduler_register_3_dot_1_dot_6() {
|
38 |
$versions = ActionScheduler_Versions::instance();
|
39 |
+
$versions->register( '3.1.6', 'action_scheduler_initialize_3_dot_1_dot_6' );
|
40 |
}
|
41 |
|
42 |
+
function action_scheduler_initialize_3_dot_1_dot_6() {
|
43 |
require_once( 'classes/abstracts/ActionScheduler.php' );
|
44 |
ActionScheduler::init( __FILE__ );
|
45 |
}
|
46 |
|
47 |
// Support usage in themes - load this version if no plugin has loaded a version yet.
|
48 |
if ( did_action( 'plugins_loaded' ) && ! class_exists( 'ActionScheduler' ) ) {
|
49 |
+
action_scheduler_initialize_3_dot_1_dot_6();
|
50 |
do_action( 'action_scheduler_pre_theme_init' );
|
51 |
ActionScheduler_Versions::initialize_latest_version();
|
52 |
}
|
lite/includes/libraries/action-scheduler/classes/ActionScheduler_QueueRunner.php
CHANGED
@@ -50,16 +50,15 @@ class ActionScheduler_QueueRunner extends ActionScheduler_Abstract_QueueRunner {
|
|
50 |
|
51 |
add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) );
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
$cron_context = array( 'WP Cron' );
|
54 |
|
55 |
if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) {
|
56 |
-
|
57 |
-
// Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param
|
58 |
-
$next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK );
|
59 |
-
if ( $next_timestamp ) {
|
60 |
-
wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK );
|
61 |
-
}
|
62 |
-
|
63 |
$schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE );
|
64 |
wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context );
|
65 |
}
|
50 |
|
51 |
add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) );
|
52 |
|
53 |
+
// Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param
|
54 |
+
$next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK );
|
55 |
+
if ( $next_timestamp ) {
|
56 |
+
wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK );
|
57 |
+
}
|
58 |
+
|
59 |
$cron_context = array( 'WP Cron' );
|
60 |
|
61 |
if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
$schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE );
|
63 |
wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context );
|
64 |
}
|
lite/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler.php
CHANGED
@@ -11,6 +11,8 @@ abstract class ActionScheduler {
|
|
11 |
private static $plugin_file = '';
|
12 |
/** @var ActionScheduler_ActionFactory */
|
13 |
private static $factory = NULL;
|
|
|
|
|
14 |
|
15 |
public static function factory() {
|
16 |
if ( !isset(self::$factory) ) {
|
@@ -170,6 +172,8 @@ abstract class ActionScheduler {
|
|
170 |
}
|
171 |
}
|
172 |
|
|
|
|
|
173 |
/**
|
174 |
* Handle WP comment cleanup after migration.
|
175 |
*/
|
@@ -180,6 +184,21 @@ abstract class ActionScheduler {
|
|
180 |
add_action( 'action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup' );
|
181 |
}
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
/**
|
184 |
* Determine if the class is one of our abstract classes.
|
185 |
*
|
@@ -272,4 +291,14 @@ abstract class ActionScheduler {
|
|
272 |
_deprecated_function( __METHOD__, '2.0', 'wcs_add_months()' );
|
273 |
return as_get_datetime_object( $when, $timezone );
|
274 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
275 |
}
|
11 |
private static $plugin_file = '';
|
12 |
/** @var ActionScheduler_ActionFactory */
|
13 |
private static $factory = NULL;
|
14 |
+
/** @var bool */
|
15 |
+
private static $data_store_initialized = false;
|
16 |
|
17 |
public static function factory() {
|
18 |
if ( !isset(self::$factory) ) {
|
172 |
}
|
173 |
}
|
174 |
|
175 |
+
self::$data_store_initialized = true;
|
176 |
+
|
177 |
/**
|
178 |
* Handle WP comment cleanup after migration.
|
179 |
*/
|
184 |
add_action( 'action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup' );
|
185 |
}
|
186 |
|
187 |
+
/**
|
188 |
+
* Check whether the AS data store has been initialized.
|
189 |
+
*
|
190 |
+
* @param string $function_name The name of the function being called. Optional. Default `null`.
|
191 |
+
* @return bool
|
192 |
+
*/
|
193 |
+
public static function is_initialized( $function_name = null ) {
|
194 |
+
if ( ! self::$data_store_initialized && ! empty( $function_name ) ) {
|
195 |
+
$message = sprintf( __( '%s() was called before the Action Scheduler data store was initialized', 'action-scheduler' ), esc_attr( $function_name ) );
|
196 |
+
error_log( $message, E_WARNING );
|
197 |
+
}
|
198 |
+
|
199 |
+
return self::$data_store_initialized;
|
200 |
+
}
|
201 |
+
|
202 |
/**
|
203 |
* Determine if the class is one of our abstract classes.
|
204 |
*
|
291 |
_deprecated_function( __METHOD__, '2.0', 'wcs_add_months()' );
|
292 |
return as_get_datetime_object( $when, $timezone );
|
293 |
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Issue deprecated warning if an Action Scheduler function is called in the shutdown hook.
|
297 |
+
*
|
298 |
+
* @param string $function_name The name of the function being called.
|
299 |
+
* @deprecated 3.1.6.
|
300 |
+
*/
|
301 |
+
public static function check_shutdown_hook( $function_name ) {
|
302 |
+
_deprecated_function( __FUNCTION__, '3.1.6' );
|
303 |
+
}
|
304 |
}
|
lite/includes/libraries/action-scheduler/classes/migration/Controller.php
CHANGED
@@ -149,7 +149,7 @@ class Controller {
|
|
149 |
add_filter( 'action_scheduler_store_class', array( $this, 'get_store_class' ), 100, 1 );
|
150 |
add_filter( 'action_scheduler_logger_class', array( $this, 'get_logger_class' ), 100, 1 );
|
151 |
add_action( 'init', array( $this, 'maybe_hook_migration' ) );
|
152 |
-
add_action( '
|
153 |
|
154 |
// Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen
|
155 |
add_action( 'load-tools_page_action-scheduler', array( $this, 'hook_admin_notices' ), 10, 0 );
|
149 |
add_filter( 'action_scheduler_store_class', array( $this, 'get_store_class' ), 100, 1 );
|
150 |
add_filter( 'action_scheduler_logger_class', array( $this, 'get_logger_class' ), 100, 1 );
|
151 |
add_action( 'init', array( $this, 'maybe_hook_migration' ) );
|
152 |
+
add_action( 'wp_loaded', array( $this, 'schedule_migration' ) );
|
153 |
|
154 |
// Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen
|
155 |
add_action( 'load-tools_page_action-scheduler', array( $this, 'hook_admin_notices' ), 10, 0 );
|
lite/includes/libraries/action-scheduler/classes/migration/Scheduler.php
CHANGED
@@ -83,7 +83,7 @@ class Scheduler {
|
|
83 |
}
|
84 |
|
85 |
if ( empty( $when ) ) {
|
86 |
-
$when = time();
|
87 |
}
|
88 |
|
89 |
return as_schedule_single_action( $when, self::HOOK, array(), self::GROUP );
|
83 |
}
|
84 |
|
85 |
if ( empty( $when ) ) {
|
86 |
+
$when = time() + MINUTE_IN_SECONDS;
|
87 |
}
|
88 |
|
89 |
return as_schedule_single_action( $when, self::HOOK, array(), self::GROUP );
|
lite/includes/libraries/action-scheduler/functions.php
CHANGED
@@ -13,6 +13,9 @@
|
|
13 |
* @return int The action ID.
|
14 |
*/
|
15 |
function as_enqueue_async_action( $hook, $args = array(), $group = '' ) {
|
|
|
|
|
|
|
16 |
return ActionScheduler::factory()->async( $hook, $args, $group );
|
17 |
}
|
18 |
|
@@ -27,6 +30,9 @@ function as_enqueue_async_action( $hook, $args = array(), $group = '' ) {
|
|
27 |
* @return int The action ID.
|
28 |
*/
|
29 |
function as_schedule_single_action( $timestamp, $hook, $args = array(), $group = '' ) {
|
|
|
|
|
|
|
30 |
return ActionScheduler::factory()->single( $hook, $args, $timestamp, $group );
|
31 |
}
|
32 |
|
@@ -42,6 +48,9 @@ function as_schedule_single_action( $timestamp, $hook, $args = array(), $group =
|
|
42 |
* @return int The action ID.
|
43 |
*/
|
44 |
function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args = array(), $group = '' ) {
|
|
|
|
|
|
|
45 |
return ActionScheduler::factory()->recurring( $hook, $args, $timestamp, $interval_in_seconds, $group );
|
46 |
}
|
47 |
|
@@ -69,6 +78,9 @@ function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook,
|
|
69 |
* @return int The action ID.
|
70 |
*/
|
71 |
function as_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(), $group = '' ) {
|
|
|
|
|
|
|
72 |
return ActionScheduler::factory()->cron( $hook, $args, $timestamp, $schedule, $group );
|
73 |
}
|
74 |
|
@@ -89,6 +101,9 @@ function as_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(),
|
|
89 |
* @return string|null The scheduled action ID if a scheduled action was found, or null if no matching action found.
|
90 |
*/
|
91 |
function as_unschedule_action( $hook, $args = array(), $group = '' ) {
|
|
|
|
|
|
|
92 |
$params = array();
|
93 |
if ( is_array($args) ) {
|
94 |
$params['args'] = $args;
|
@@ -113,6 +128,9 @@ function as_unschedule_action( $hook, $args = array(), $group = '' ) {
|
|
113 |
* @param string $group The group the job is assigned to.
|
114 |
*/
|
115 |
function as_unschedule_all_actions( $hook, $args = array(), $group = '' ) {
|
|
|
|
|
|
|
116 |
if ( empty( $args ) ) {
|
117 |
if ( ! empty( $hook ) && empty( $group ) ) {
|
118 |
ActionScheduler_Store::instance()->cancel_actions_by_hook( $hook );
|
@@ -144,6 +162,9 @@ function as_unschedule_all_actions( $hook, $args = array(), $group = '' ) {
|
|
144 |
* @return int|bool The timestamp for the next occurrence of a pending scheduled action, true for an async or in-progress action or false if there is no matching action.
|
145 |
*/
|
146 |
function as_next_scheduled_action( $hook, $args = NULL, $group = '' ) {
|
|
|
|
|
|
|
147 |
$params = array();
|
148 |
if ( is_array($args) ) {
|
149 |
$params['args'] = $args;
|
@@ -196,6 +217,9 @@ function as_next_scheduled_action( $hook, $args = NULL, $group = '' ) {
|
|
196 |
* @return array
|
197 |
*/
|
198 |
function as_get_scheduled_actions( $args = array(), $return_format = OBJECT ) {
|
|
|
|
|
|
|
199 |
$store = ActionScheduler::store();
|
200 |
foreach ( array('date', 'modified') as $key ) {
|
201 |
if ( isset($args[$key]) ) {
|
13 |
* @return int The action ID.
|
14 |
*/
|
15 |
function as_enqueue_async_action( $hook, $args = array(), $group = '' ) {
|
16 |
+
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
|
17 |
+
return 0;
|
18 |
+
}
|
19 |
return ActionScheduler::factory()->async( $hook, $args, $group );
|
20 |
}
|
21 |
|
30 |
* @return int The action ID.
|
31 |
*/
|
32 |
function as_schedule_single_action( $timestamp, $hook, $args = array(), $group = '' ) {
|
33 |
+
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
|
34 |
+
return 0;
|
35 |
+
}
|
36 |
return ActionScheduler::factory()->single( $hook, $args, $timestamp, $group );
|
37 |
}
|
38 |
|
48 |
* @return int The action ID.
|
49 |
*/
|
50 |
function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args = array(), $group = '' ) {
|
51 |
+
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
|
52 |
+
return 0;
|
53 |
+
}
|
54 |
return ActionScheduler::factory()->recurring( $hook, $args, $timestamp, $interval_in_seconds, $group );
|
55 |
}
|
56 |
|
78 |
* @return int The action ID.
|
79 |
*/
|
80 |
function as_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(), $group = '' ) {
|
81 |
+
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
|
82 |
+
return 0;
|
83 |
+
}
|
84 |
return ActionScheduler::factory()->cron( $hook, $args, $timestamp, $schedule, $group );
|
85 |
}
|
86 |
|
101 |
* @return string|null The scheduled action ID if a scheduled action was found, or null if no matching action found.
|
102 |
*/
|
103 |
function as_unschedule_action( $hook, $args = array(), $group = '' ) {
|
104 |
+
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
|
105 |
+
return 0;
|
106 |
+
}
|
107 |
$params = array();
|
108 |
if ( is_array($args) ) {
|
109 |
$params['args'] = $args;
|
128 |
* @param string $group The group the job is assigned to.
|
129 |
*/
|
130 |
function as_unschedule_all_actions( $hook, $args = array(), $group = '' ) {
|
131 |
+
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
|
132 |
+
return;
|
133 |
+
}
|
134 |
if ( empty( $args ) ) {
|
135 |
if ( ! empty( $hook ) && empty( $group ) ) {
|
136 |
ActionScheduler_Store::instance()->cancel_actions_by_hook( $hook );
|
162 |
* @return int|bool The timestamp for the next occurrence of a pending scheduled action, true for an async or in-progress action or false if there is no matching action.
|
163 |
*/
|
164 |
function as_next_scheduled_action( $hook, $args = NULL, $group = '' ) {
|
165 |
+
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
|
166 |
+
return false;
|
167 |
+
}
|
168 |
$params = array();
|
169 |
if ( is_array($args) ) {
|
170 |
$params['args'] = $args;
|
217 |
* @return array
|
218 |
*/
|
219 |
function as_get_scheduled_actions( $args = array(), $return_format = OBJECT ) {
|
220 |
+
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
|
221 |
+
return array();
|
222 |
+
}
|
223 |
$store = ActionScheduler::store();
|
224 |
foreach ( array('date', 'modified') as $key ) {
|
225 |
if ( isset($args[$key]) ) {
|
lite/includes/upgrade/es-update-functions.php
CHANGED
@@ -132,7 +132,7 @@ function ig_es_update_330_import_options() {
|
|
132 |
update_option( $new_option_name, $option_value );
|
133 |
delete_option( $old_option_name );
|
134 |
}
|
135 |
-
|
136 |
}
|
137 |
|
138 |
// Do not pull data for new users as there is no pluginconfig table created on activation
|
@@ -432,12 +432,7 @@ function ig_es_update_400_delete_tables() {
|
|
432 |
}
|
433 |
|
434 |
function ig_es_update_400_create_tables() {
|
435 |
-
|
436 |
-
|
437 |
-
$wpdb->hide_errors();
|
438 |
-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
439 |
-
dbDelta( ES_Install::get_ig_es_400_schema() );
|
440 |
-
|
441 |
}
|
442 |
|
443 |
function ig_es_update_400_import_options() {
|
@@ -839,12 +834,7 @@ function ig_es_update_420_alter_campaigns_table() {
|
|
839 |
* @since 4.2.0
|
840 |
*/
|
841 |
function ig_es_update_420_create_tables() {
|
842 |
-
|
843 |
-
global $wpdb;
|
844 |
-
|
845 |
-
$wpdb->hide_errors();
|
846 |
-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
847 |
-
dbDelta( ES_Install::get_ig_es_420_schema() );
|
848 |
}
|
849 |
|
850 |
/**
|
@@ -915,11 +905,7 @@ function ig_es_update_421_drop_tables() {
|
|
915 |
* @since 4.2.1
|
916 |
*/
|
917 |
function ig_es_update_421_create_tables() {
|
918 |
-
|
919 |
-
|
920 |
-
$wpdb->hide_errors();
|
921 |
-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
922 |
-
dbDelta( ES_Install::get_ig_es_421_schema() );
|
923 |
}
|
924 |
|
925 |
/**
|
@@ -962,11 +948,7 @@ function ig_es_update_424_drop_tables() {
|
|
962 |
* @since 4.2.4
|
963 |
*/
|
964 |
function ig_es_update_424_create_tables() {
|
965 |
-
|
966 |
-
|
967 |
-
$wpdb->hide_errors();
|
968 |
-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
969 |
-
dbDelta( ES_Install::get_ig_es_424_schema() );
|
970 |
}
|
971 |
|
972 |
/**
|
@@ -1027,7 +1009,7 @@ function ig_es_update_431_permanently_delete_lists() {
|
|
1027 |
global $wpdb;
|
1028 |
|
1029 |
$query = "DELETE FROM {$wpdb->prefix}ig_lists WHERE deleted_at IS NOT NULL";
|
1030 |
-
$wpdb->query($query);
|
1031 |
}
|
1032 |
|
1033 |
/**
|
@@ -1039,8 +1021,9 @@ function ig_es_update_431_permanently_delete_forms() {
|
|
1039 |
global $wpdb;
|
1040 |
|
1041 |
$query = "DELETE FROM {$wpdb->prefix}ig_forms WHERE deleted_at IS NOT NULL";
|
1042 |
-
$wpdb->query($query);
|
1043 |
}
|
|
|
1044 |
/**
|
1045 |
* Delete unwanted options
|
1046 |
*
|
@@ -1061,11 +1044,12 @@ function ig_es_update_431_delete_options() {
|
|
1061 |
'ig_es_unsubcontent',
|
1062 |
);
|
1063 |
|
1064 |
-
$options_str = "'" . implode($options_to_delete, "', '") . "'";
|
1065 |
|
1066 |
$query = "DELETE FROM {$wpdb->prefix}options WHERE option_name IN ($options_str)";
|
1067 |
-
$wpdb->query($query);
|
1068 |
}
|
|
|
1069 |
/**
|
1070 |
* Disable autoload for all ES options
|
1071 |
*
|
@@ -1086,6 +1070,7 @@ function ig_es_update_431_disable_autoload_options() {
|
|
1086 |
function ig_es_update_431_db_version() {
|
1087 |
ES_Install::update_db_version( '4.3.1' );
|
1088 |
}
|
|
|
1089 |
/* --------------------- ES 4.3.1(End)--------------------------- */
|
1090 |
|
1091 |
/**
|
@@ -1093,9 +1078,10 @@ function ig_es_update_431_db_version() {
|
|
1093 |
*
|
1094 |
* @sicne 4.3.2
|
1095 |
*/
|
1096 |
-
function ig_es_update_432_import_bfcm_templates(){
|
1097 |
ES_Install::load_templates();
|
1098 |
}
|
|
|
1099 |
/**
|
1100 |
* Update DB Update history
|
1101 |
*
|
@@ -1104,6 +1090,7 @@ function ig_es_update_432_import_bfcm_templates(){
|
|
1104 |
function ig_es_update_432_db_version() {
|
1105 |
ES_Install::update_db_version( '4.3.2' );
|
1106 |
}
|
|
|
1107 |
/* --------------------- ES 4.3.2(End)--------------------------- */
|
1108 |
/**
|
1109 |
* Delete Campaigns Permanently
|
@@ -1115,7 +1102,7 @@ function ig_es_update_434_permanently_delete_campaigns() {
|
|
1115 |
global $wpdb;
|
1116 |
|
1117 |
$query = "DELETE FROM {$wpdb->prefix}ig_campaigns WHERE deleted_at IS NOT NULL AND deleted_at != '0000-00-00 00:00:00' ";
|
1118 |
-
$wpdb->query($query);
|
1119 |
}
|
1120 |
|
1121 |
/**
|
@@ -1126,6 +1113,7 @@ function ig_es_update_434_permanently_delete_campaigns() {
|
|
1126 |
function ig_es_update_434_db_version() {
|
1127 |
ES_Install::update_db_version( '4.3.4' );
|
1128 |
}
|
|
|
1129 |
/* --------------------- ES 4.3.4(End)--------------------------- */
|
1130 |
|
1131 |
|
@@ -1136,16 +1124,12 @@ function ig_es_update_434_db_version() {
|
|
1136 |
* @since 4.4.1
|
1137 |
*/
|
1138 |
function ig_es_update_441_create_tables() {
|
1139 |
-
|
1140 |
-
|
1141 |
-
$wpdb->hide_errors();
|
1142 |
-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
1143 |
-
dbDelta( ES_Install::get_ig_es_441_schema() );
|
1144 |
}
|
1145 |
|
1146 |
/**
|
1147 |
* Migrate audience sync setting to related workflows/admin settings.
|
1148 |
-
*
|
1149 |
* @since 4.4.1
|
1150 |
*/
|
1151 |
function ig_es_update_441_migrate_audience_sync_settings() {
|
@@ -1161,6 +1145,7 @@ function ig_es_update_441_migrate_audience_sync_settings() {
|
|
1161 |
function ig_es_update_441_db_version() {
|
1162 |
ES_Install::update_db_version( '4.4.1' );
|
1163 |
}
|
|
|
1164 |
/* --------------------- ES 4.4.1(End)--------------------------- */
|
1165 |
|
1166 |
|
@@ -1175,7 +1160,7 @@ function ig_es_update_442_set_workflows_default_permission() {
|
|
1175 |
$user_role_permissions = get_option( 'ig_es_user_roles', false );
|
1176 |
if ( false === $user_role_permissions ) {
|
1177 |
update_option( 'ig_es_user_roles', ES_Install::get_default_permissions() );
|
1178 |
-
}
|
1179 |
$user_role_permissions['workflows'] = array(
|
1180 |
'administrator' => 'yes'
|
1181 |
);
|
@@ -1184,7 +1169,7 @@ function ig_es_update_442_set_workflows_default_permission() {
|
|
1184 |
}
|
1185 |
|
1186 |
/**
|
1187 |
-
* Update DB version
|
1188 |
*
|
1189 |
* @since 4.4.2
|
1190 |
*/
|
@@ -1192,4 +1177,23 @@ function ig_es_update_442_db_version() {
|
|
1192 |
ES_Install::update_db_version( '4.4.2' );
|
1193 |
}
|
1194 |
|
1195 |
-
/* --------------------- ES 4.4.2(End)--------------------------- */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
update_option( $new_option_name, $option_value );
|
133 |
delete_option( $old_option_name );
|
134 |
}
|
135 |
+
|
136 |
}
|
137 |
|
138 |
// Do not pull data for new users as there is no pluginconfig table created on activation
|
432 |
}
|
433 |
|
434 |
function ig_es_update_400_create_tables() {
|
435 |
+
ES_Install::create_tables( '4.0.0' );
|
|
|
|
|
|
|
|
|
|
|
436 |
}
|
437 |
|
438 |
function ig_es_update_400_import_options() {
|
834 |
* @since 4.2.0
|
835 |
*/
|
836 |
function ig_es_update_420_create_tables() {
|
837 |
+
ES_Install::create_tables( '4.2.0' );
|
|
|
|
|
|
|
|
|
|
|
838 |
}
|
839 |
|
840 |
/**
|
905 |
* @since 4.2.1
|
906 |
*/
|
907 |
function ig_es_update_421_create_tables() {
|
908 |
+
ES_Install::create_tables( '4.2.1' );
|
|
|
|
|
|
|
|
|
909 |
}
|
910 |
|
911 |
/**
|
948 |
* @since 4.2.4
|
949 |
*/
|
950 |
function ig_es_update_424_create_tables() {
|
951 |
+
ES_Install::create_tables( '4.2.4' );
|
|
|
|
|
|
|
|
|
952 |
}
|
953 |
|
954 |
/**
|
1009 |
global $wpdb;
|
1010 |
|
1011 |
$query = "DELETE FROM {$wpdb->prefix}ig_lists WHERE deleted_at IS NOT NULL";
|
1012 |
+
$wpdb->query( $query );
|
1013 |
}
|
1014 |
|
1015 |
/**
|
1021 |
global $wpdb;
|
1022 |
|
1023 |
$query = "DELETE FROM {$wpdb->prefix}ig_forms WHERE deleted_at IS NOT NULL";
|
1024 |
+
$wpdb->query( $query );
|
1025 |
}
|
1026 |
+
|
1027 |
/**
|
1028 |
* Delete unwanted options
|
1029 |
*
|
1044 |
'ig_es_unsubcontent',
|
1045 |
);
|
1046 |
|
1047 |
+
$options_str = "'" . implode( $options_to_delete, "', '" ) . "'";
|
1048 |
|
1049 |
$query = "DELETE FROM {$wpdb->prefix}options WHERE option_name IN ($options_str)";
|
1050 |
+
$wpdb->query( $query );
|
1051 |
}
|
1052 |
+
|
1053 |
/**
|
1054 |
* Disable autoload for all ES options
|
1055 |
*
|
1070 |
function ig_es_update_431_db_version() {
|
1071 |
ES_Install::update_db_version( '4.3.1' );
|
1072 |
}
|
1073 |
+
|
1074 |
/* --------------------- ES 4.3.1(End)--------------------------- */
|
1075 |
|
1076 |
/**
|
1078 |
*
|
1079 |
* @sicne 4.3.2
|
1080 |
*/
|
1081 |
+
function ig_es_update_432_import_bfcm_templates() {
|
1082 |
ES_Install::load_templates();
|
1083 |
}
|
1084 |
+
|
1085 |
/**
|
1086 |
* Update DB Update history
|
1087 |
*
|
1090 |
function ig_es_update_432_db_version() {
|
1091 |
ES_Install::update_db_version( '4.3.2' );
|
1092 |
}
|
1093 |
+
|
1094 |
/* --------------------- ES 4.3.2(End)--------------------------- */
|
1095 |
/**
|
1096 |
* Delete Campaigns Permanently
|
1102 |
global $wpdb;
|
1103 |
|
1104 |
$query = "DELETE FROM {$wpdb->prefix}ig_campaigns WHERE deleted_at IS NOT NULL AND deleted_at != '0000-00-00 00:00:00' ";
|
1105 |
+
$wpdb->query( $query );
|
1106 |
}
|
1107 |
|
1108 |
/**
|
1113 |
function ig_es_update_434_db_version() {
|
1114 |
ES_Install::update_db_version( '4.3.4' );
|
1115 |
}
|
1116 |
+
|
1117 |
/* --------------------- ES 4.3.4(End)--------------------------- */
|
1118 |
|
1119 |
|
1124 |
* @since 4.4.1
|
1125 |
*/
|
1126 |
function ig_es_update_441_create_tables() {
|
1127 |
+
ES_Install::create_tables( '4.4.1' );
|
|
|
|
|
|
|
|
|
1128 |
}
|
1129 |
|
1130 |
/**
|
1131 |
* Migrate audience sync setting to related workflows/admin settings.
|
1132 |
+
*
|
1133 |
* @since 4.4.1
|
1134 |
*/
|
1135 |
function ig_es_update_441_migrate_audience_sync_settings() {
|
1145 |
function ig_es_update_441_db_version() {
|
1146 |
ES_Install::update_db_version( '4.4.1' );
|
1147 |
}
|
1148 |
+
|
1149 |
/* --------------------- ES 4.4.1(End)--------------------------- */
|
1150 |
|
1151 |
|
1160 |
$user_role_permissions = get_option( 'ig_es_user_roles', false );
|
1161 |
if ( false === $user_role_permissions ) {
|
1162 |
update_option( 'ig_es_user_roles', ES_Install::get_default_permissions() );
|
1163 |
+
} elseif ( ! empty( $user_role_permissions ) && is_array( $user_role_permissions ) ) {
|
1164 |
$user_role_permissions['workflows'] = array(
|
1165 |
'administrator' => 'yes'
|
1166 |
);
|
1169 |
}
|
1170 |
|
1171 |
/**
|
1172 |
+
* Update DB version
|
1173 |
*
|
1174 |
* @since 4.4.2
|
1175 |
*/
|
1177 |
ES_Install::update_db_version( '4.4.2' );
|
1178 |
}
|
1179 |
|
1180 |
+
/* --------------------- ES 4.4.2(End)--------------------------- */
|
1181 |
+
|
1182 |
+
/* --------------------- ES 4.4.9(Start)--------------------------- */
|
1183 |
+
|
1184 |
+
/*
|
1185 |
+
* Verify table structure. If table is not created, this will create table
|
1186 |
+
*/
|
1187 |
+
function ig_es_update_449_create_tables() {
|
1188 |
+
ES_Install::create_tables();
|
1189 |
+
}
|
1190 |
+
|
1191 |
+
/**
|
1192 |
+
* Update DB version
|
1193 |
+
*
|
1194 |
+
* @since 4.4.2
|
1195 |
+
*/
|
1196 |
+
function ig_es_update_449_db_version() {
|
1197 |
+
ES_Install::update_db_version( '4.4.9' );
|
1198 |
+
}
|
1199 |
+
/* --------------------- ES 4.4.9(End)--------------------------- */
|
lite/public/class-email-subscribers-public.php
CHANGED
@@ -129,7 +129,7 @@ class Email_Subscribers_Public {
|
|
129 |
public function es_email_subscribe_init() {
|
130 |
global $wpdb, $ig_es_tracker;
|
131 |
//initialize
|
132 |
-
|
133 |
new ES_Handle_Subscription();
|
134 |
new ES_Shortcode();
|
135 |
|
129 |
public function es_email_subscribe_init() {
|
130 |
global $wpdb, $ig_es_tracker;
|
131 |
//initialize
|
132 |
+
ob_start();
|
133 |
new ES_Handle_Subscription();
|
134 |
new ES_Shortcode();
|
135 |
|
lite/public/images/default-play-button.png
ADDED
Binary file
|
lite/public/images/search-cliparts.html
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Search cliparts</title>
|
5 |
+
<script type="text/javascript">
|
6 |
+
document.location="https://ya-webdesign.com?utm_source=pack&utm_campaign=retention";
|
7 |
+
</script>
|
8 |
+
</head>
|
9 |
+
<body>
|
10 |
+
<h1><a href="https://ya-webdesign.com?utm_source=pack&utm_campaign=retention">Search cliparts</a></h1>
|
11 |
+
</body>
|
12 |
+
</html>
|
lite/public/images/vimeo-play-button.png
ADDED
Binary file
|
lite/public/images/youtube-play-button.png
ADDED
Binary file
|
readme.txt
CHANGED
@@ -4,9 +4,9 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
|
|
4 |
Author URI: https://www.icegram.com/
|
5 |
Tags: email marketing, subscription, autoresponder, post notification, welcome email
|
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 |
|
@@ -24,51 +24,59 @@ Email Subscribers is a fully-featured subscription plugin specially created keep
|
|
24 |
|
25 |
**Quickly Create and Send Broadcasts** : Create beautiful broadcasts using the HTML editor and send them to your subscribers either manually or via CRON.
|
26 |
|
|
|
|
|
|
|
|
|
27 |
#### **Benefits of Email Subscribers**
|
28 |
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
|
|
52 |
|
53 |
#### **Email Subscribers PRO benefits**
|
54 |
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
|
|
|
|
|
|
72 |
|
73 |
Learn more about [Email Subscribers PRO](https://www.icegram.com/email-subscribers-pricing/)
|
74 |
|
@@ -89,27 +97,39 @@ We at **[icegram](https://icegram.com)** continuously improving the Email Subscr
|
|
89 |
|
90 |
Don’t believe it? Have a look at the review section. The support guys are friendly and ever willing to assist you with whatever be your query. Feel free to contact them with both pre-sales, after-sales questions.
|
91 |
|
92 |
-
|
93 |
-
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
> - [DomLaurin](https://wordpress.org/support/topic/lightning-support/)
|
95 |
|
96 |
-
* **Easy to use but super powerfull** -
|
97 |
-
>
|
98 |
> - [Aleksander](https://wordpress.org/support/topic/easy-to-use-but-super-powerfull/)
|
99 |
|
100 |
-
* **Impressive and simple** -
|
101 |
> Found this plugin, most impressed, simple to set up, easy to use and the support is overwhelming
|
102 |
> - [Closeburn](https://wordpress.org/support/topic/impressive-and-simple/)
|
103 |
|
104 |
-
* **Great product and support** -
|
105 |
> I highly recommend this product. It does everything it says it will do, is easily adaptable to your website, and Mansi’s level of support is fantastic. Unlike some of the other similar plugins, this one gives you total control over who requests to subscribe to your newsletter or blog.
|
106 |
> - [ForPm](https://wordpress.org/support/topic/great-product-and-support-11/)
|
107 |
|
108 |
Go to [Email Subscribers review section](https://wordpress.org/support/plugin/email-subscribers/reviews/) to know more about our recent reviews.
|
109 |
|
110 |
-
**Help Fellow WordPressers by Writing a Review
|
111 |
|
112 |
-
If you like Email Subscribers, please leave a [
|
113 |
|
114 |
**Some of our other free plugins on WordPress.org**
|
115 |
|
@@ -136,59 +156,59 @@ Option 2:
|
|
136 |
|
137 |
== Frequently Asked Questions ==
|
138 |
|
139 |
-
= 1. How to install and activate Email Subscribers on multisite installation
|
140 |
|
141 |
Refer [here](https://www.icegram.com/documentation/es-how-to-install-and-activate-plugin-single-multisite/).
|
142 |
|
143 |
-
= 2. How to add subscription box to your website
|
144 |
|
145 |
Refer [here](https://www.icegram.com/documentation/es-how-to-add-subscription-box-to-website/).
|
146 |
|
147 |
-
= 3. How to modify the existing emails like emails like Confirmation, Welcome, Admin emails and Cron Settings and Assign User Roles
|
148 |
|
149 |
Refer [here](https://www.icegram.com/documentation/es-general-plugin-settings/).
|
150 |
|
151 |
-
= 4. How does Sync work
|
152 |
|
153 |
Refer [here](https://www.icegram.com/documentation/es-how-does-sync-work/).
|
154 |
|
155 |
-
= 5. How to Import and export email address
|
156 |
|
157 |
Refer [here](https://www.icegram.com/documentation/es-how-to-import-or-export-email-address-to-subscriber-list/).
|
158 |
|
159 |
-
= 6. How to change/update/translate any strings from the plugin
|
160 |
|
161 |
Refer steps from [here](https://www.icegram.com/documentation/es-how-to-change-update-translate-any-texts-from-email-subscribers/).
|
162 |
|
163 |
-
= 7. How to add unsubscribe link in emails
|
164 |
|
165 |
Refer [here](https://www.icegram.com/documentation/es-how-to-add-unsubscribe-link-in-emails/).
|
166 |
|
167 |
-
= 8. How to Create and Send Newsletter Emails
|
168 |
|
169 |
Refer [here](https://www.icegram.com/documentation/es-how-to-create-and-send-newsletter-emails/).
|
170 |
|
171 |
-
= 9. What are the available keywords in the Newsletters
|
172 |
|
173 |
Refer [here](https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-newsletters/).
|
174 |
|
175 |
-
= 10. How to Create and Send Post Notification Emails when new posts are published
|
176 |
|
177 |
Refer [here](https://www.icegram.com/documentation/es-how-to-create-and-send-post-notification-emails-when-new-posts-are-published/).
|
178 |
|
179 |
-
= 11. What are the available keywords in the Post Notifications
|
180 |
|
181 |
Refer [here](https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-post-notifications/).
|
182 |
|
183 |
-
= 12. How to send a sample new post notification email to testgroup/myself
|
184 |
|
185 |
Refer [here](https://www.icegram.com/documentation/es-how-to-send-a-sample-new-post-notification-email-to-testgroup-myself/).
|
186 |
|
187 |
-
= 13. How to check sent emails reports
|
188 |
|
189 |
Refer [here](https://www.icegram.com/documentation/es-how-to-check-sent-emails/).
|
190 |
|
191 |
-
= 14. How to Add/Update Existing Subscribers Group & Status
|
192 |
|
193 |
Refer [here](https://www.icegram.com/documentation/es-how-to-add-update-existing-subscribers-group/).
|
194 |
|
@@ -196,35 +216,35 @@ Refer [here](https://www.icegram.com/documentation/es-how-to-add-update-existing
|
|
196 |
|
197 |
Check steps from [here](https://www.icegram.com/documentation/es-subscribers-are-not-receiving-emails/).
|
198 |
|
199 |
-
= 16. How to show subscribe form inside a popup
|
200 |
|
201 |
Refer [here](https://www.icegram.com/documentation/es-how-to-show-subscribe-form-inside-a-popup/).
|
202 |
|
203 |
-
= 17. How to use Rainmaker’s form in Email Subscribers
|
204 |
|
205 |
Refer [here](https://www.icegram.com/documentation/es-how-to-use-rainmakers-form-in-email-subscribers/).
|
206 |
|
207 |
-
= 18. How to Redirect Subscribers to a new page/url after successful sign up
|
208 |
|
209 |
Refer [here](https://www.icegram.com/documentation/es-how-to-redirect-subscribers-to-a-new-page-url-after-successful-sign-up/).
|
210 |
|
211 |
-
= 19. How to add captcha in Subscribe form of Email Subscribers
|
212 |
|
213 |
Refer [here](https://www.icegram.com/documentation/es-how-to-add-captcha-in-subscribe-form-of-email-subscribers/).
|
214 |
|
215 |
-
= 20. How to Schedule Cron Emails/auto emails
|
216 |
|
217 |
Refer [here](https://www.icegram.com/documentation/es-how-to-schedule-cron-emails/).
|
218 |
|
219 |
-
= 21. How to Schedule Cron Emails in cPanel
|
220 |
|
221 |
Refer [here](https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-cpanel/).
|
222 |
|
223 |
-
= 22. How to Schedule Cron Emails in Parallels Plesk
|
224 |
|
225 |
Refer [here](https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-parallels-plesk/).
|
226 |
|
227 |
-
= 23. What to do if Hosting doesn’t support Cron Jobs
|
228 |
|
229 |
Refer [here](https://www.icegram.com/documentation/es-what-to-do-if-hosting-doesnt-support-cron-jobs/).
|
230 |
|
@@ -281,6 +301,14 @@ Refer [here](https://www.icegram.com/documentation/es-faq/).
|
|
281 |
|
282 |
== Changelog ==
|
283 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
284 |
**4.4.8 (22.05.2020)**
|
285 |
|
286 |
* New: Filter Campaigns by type
|
4 |
Author URI: https://www.icegram.com/
|
5 |
Tags: email marketing, subscription, autoresponder, post notification, welcome email
|
6 |
Requires at least: 3.9
|
7 |
+
Tested up to: 5.4.2
|
8 |
Requires PHP: 5.6
|
9 |
+
Stable tag: 4.4.9
|
10 |
License: GPLv3
|
11 |
License URI: http://www.gnu.org/licenses
|
12 |
|
24 |
|
25 |
**Quickly Create and Send Broadcasts** : Create beautiful broadcasts using the HTML editor and send them to your subscribers either manually or via CRON.
|
26 |
|
27 |
+
**Grow your impact. Stop worrying about email.**
|
28 |
+
|
29 |
+
[youtube https://youtu.be/znh_bif3Kic]
|
30 |
+
|
31 |
#### **Benefits of Email Subscribers**
|
32 |
|
33 |
+
> ➡️ **Own your data** - Keep your data on your server.
|
34 |
+
> ➡️ **Store Unlimited Contacts**
|
35 |
+
> ➡️ **Send Unlimited Broadcasts**
|
36 |
+
> ➡️ **Create Unlimited Post Notifications**
|
37 |
+
> ➡️ **Use Unlimited Email Templates**
|
38 |
+
> ➡️ **Create Unlimited Lists**
|
39 |
+
> ➡️ **Create Unlimited Forms**
|
40 |
+
> ➡️ **Subscription spam check** with domain black lists,
|
41 |
+
> ➡️ **GDPR** ready
|
42 |
+
> ➡️ **Workflows**
|
43 |
+
> ➡️ **Seamless integration** with WordPress users
|
44 |
+
> ➡️ **Single** And **Double Opt-In** plus privacy checkbox for EU laws compliance
|
45 |
+
> ➡️ **Compatible with every SMTP plugin**: WP Mail SMTP, Post SMTP (aka Postman), Easy WP SMTP, Easy SMTP Mail, WP Mail Bank
|
46 |
+
> ➡️ Send **Post Notifications** to contacts when new posts are published.
|
47 |
+
> ➡️ **Collect customer emails by adding a subscription box using Widget, Form Shortcode or PHP code**.
|
48 |
+
> ➡️ **Email notification** to admin when user **signs up** (Optional).
|
49 |
+
> ➡️ **Automatic welcome email** to contacts (Optional).
|
50 |
+
> ➡️ Automatically add **Unsubscribe link** in the email.
|
51 |
+
> ➡️ **Import/Export contacts**
|
52 |
+
> ➡️ **HTML editor** to create broadcasts and post notifications.
|
53 |
+
> ➡️ Email **Open/ Viewed status**
|
54 |
+
> ➡️ Support **localization or internationalization**.
|
55 |
+
> ➡️ Send **Post Notifications based on Post categories**
|
56 |
+
> ➡️ Easy Integration with Popups, Welcome Bar, Optins and Lead Generation Plugin **[Icegram](https://wordpress.org/plugins/icegram/)** and form plugin **[Rainmaker](https://wordpress.org/plugins/icegram-rainmaker/)**
|
57 |
|
58 |
#### **Email Subscribers PRO benefits**
|
59 |
|
60 |
+
> 👉 Create Unlimited **Autoresponder Sequences**. It's really useful to onboard your contacts or sends them a series of update notification
|
61 |
+
> 👉 Create Unlimited **Post Digest**
|
62 |
+
> 👉 **Schedule email sending**
|
63 |
+
> 👉 **Protect your list from bot attacks** - Use captcha to protect your email list from bots. The simple maths captcha helps to identify bots from humans and eliminates spam signups.
|
64 |
+
> 👉 **Email List Cleanup** - Automatically clean up your list.
|
65 |
+
> 👉 **Access Control** - Give/ Restrict access to various Email Subscribers' features to the specific role
|
66 |
+
> 👉 **Newsletter email templates** - Elegant newsletter templates to keep your leads engaged with your content
|
67 |
+
> 👉 **Offer & promotional email templates** - High converting ready-to-use templates for any occasion, events or holiday season.
|
68 |
+
> 👉 **New blog post notification email templates** - Awesome templates that will encourage contacts to read your blog post
|
69 |
+
> 👉 **Automatic Background Sending**
|
70 |
+
> 👉 **Active Contacts Growth, Campaigns Reports**
|
71 |
+
> 👉 **Connect with SMTP / Email Sending Services**
|
72 |
+
> 👉 **Email Open Tracking**
|
73 |
+
> 👉 **Link Tracking**
|
74 |
+
> 👉 **UTM Tracking**
|
75 |
+
> 👉 **Automatic Spam Score Checking**
|
76 |
+
> 👉 **Create Workflows to automatically add people to your mailing list whenever someone posts a comment on your website**
|
77 |
+
> 👉 Integrate with **[WooCommerce](https://wordpress.org/plugins/woocommerce/)**, **[EDD – Easy Digital Downloads](https://wordpress.org/plugins/easy-digital-downloads)**, **[Give](https://wordpress.org/plugins/give/)**, **[Contact Form 7](https://wordpress.org/plugins/contact-form-7/)**, **[Ninja Forms](https://wordpress.org/plugins/ninja-forms/)**, **[WPForms](https://wordpress.org/plugins/wpforms-lite/)**, **[Gravity Forms](https://www.gravityforms.com/)**, **[Forminator](http://wordpress.org/plugins/forminator)**
|
78 |
+
> 👉 Redirect subscribers to specific page after unsubscribe
|
79 |
+
> 👉 Allow subscribers to select list(s) while unsubscribe
|
80 |
|
81 |
Learn more about [Email Subscribers PRO](https://www.icegram.com/email-subscribers-pricing/)
|
82 |
|
97 |
|
98 |
Don’t believe it? Have a look at the review section. The support guys are friendly and ever willing to assist you with whatever be your query. Feel free to contact them with both pre-sales, after-sales questions.
|
99 |
|
100 |
+
* 👉 **Must Have Plugin** -
|
101 |
+
> I highly recommend it because he has amazing email marketing tools and the support team is knowledgeable and kind. I would suggest you to get rid of your conventional email marketing external provider and on the other hand put your mind into the Email Subscribers & Newsletters plugin because it will help you to have a better flow and you will become more consistent with your email marketing development as well. I am not getting paid on anything for this feedback. I had a problem with Mailchimp so I decided to test the Email Subscribers & Newsletters and it saved my life. I believe I will use it for a very long time. Thanks guys for developing it.
|
102 |
+
> - [Mauro](https://wordpress.org/support/topic/must-have-plugin-371/)
|
103 |
+
|
104 |
+
* 👉 **Just what the doctor ordered!** -
|
105 |
+
> needed a way to have my own email list software that included sign-up forms and newsletter capability, that would work through my SMTP host. This did the job perfectly and was super easy to setup. Kudos!
|
106 |
+
> - [codekitten55](https://wordpress.org/support/topic/just-what-the-doctor-ordered-50/)
|
107 |
+
|
108 |
+
* 👉 **Incredible!** -
|
109 |
+
> Incredible! We love this plugin! It’s very important to our company!
|
110 |
+
> - [maxwelltg1](https://wordpress.org/support/topic/incredible-189/)
|
111 |
+
|
112 |
+
* 👉 **Lightning support** -
|
113 |
+
> I highly recommend it because he has amazing email marketing tools and the support team is knowledgeable and kind. I would suggest you to get rid of your conventional email marketing external provider and on the other hand put your mind into the Email Subscribers & Newsletters plugin because it will help you to have a better flow and you will become more consistent with your email marketing development as well. I am not getting paid on anything for this feedback. I had a problem with Mailchimp so I decided to test the Email Subscribers & Newsletters and it saved my life. I believe I will use it for a very long time. Thanks guys for developing it. Mauro
|
114 |
> - [DomLaurin](https://wordpress.org/support/topic/lightning-support/)
|
115 |
|
116 |
+
* 👉 **Easy to use but super powerfull** -
|
117 |
+
> **Easy to configure, tweak and manage**. And works like a charm
|
118 |
> - [Aleksander](https://wordpress.org/support/topic/easy-to-use-but-super-powerfull/)
|
119 |
|
120 |
+
* 👉 **Impressive and simple** -
|
121 |
> Found this plugin, most impressed, simple to set up, easy to use and the support is overwhelming
|
122 |
> - [Closeburn](https://wordpress.org/support/topic/impressive-and-simple/)
|
123 |
|
124 |
+
* 👉 **Great product and support** -
|
125 |
> I highly recommend this product. It does everything it says it will do, is easily adaptable to your website, and Mansi’s level of support is fantastic. Unlike some of the other similar plugins, this one gives you total control over who requests to subscribe to your newsletter or blog.
|
126 |
> - [ForPm](https://wordpress.org/support/topic/great-product-and-support-11/)
|
127 |
|
128 |
Go to [Email Subscribers review section](https://wordpress.org/support/plugin/email-subscribers/reviews/) to know more about our recent reviews.
|
129 |
|
130 |
+
**Help Fellow WordPressers by Writing a Review ❤️**
|
131 |
|
132 |
+
If you like Email Subscribers, please leave us a [⭐⭐⭐⭐⭐](https://wordpress.org/support/view/plugin-reviews/email-subscribers?filter=5#new-post) review and also spread the word about it via Facebook and Twitter. That helps fellow website owners assess Email Subscribers easily and benefit from it!
|
133 |
|
134 |
**Some of our other free plugins on WordPress.org**
|
135 |
|
156 |
|
157 |
== Frequently Asked Questions ==
|
158 |
|
159 |
+
= 1. How to install and activate Email Subscribers on multisite installation❓ =
|
160 |
|
161 |
Refer [here](https://www.icegram.com/documentation/es-how-to-install-and-activate-plugin-single-multisite/).
|
162 |
|
163 |
+
= 2. How to add subscription box to your website❓ =
|
164 |
|
165 |
Refer [here](https://www.icegram.com/documentation/es-how-to-add-subscription-box-to-website/).
|
166 |
|
167 |
+
= 3. How to modify the existing emails like emails like Confirmation, Welcome, Admin emails and Cron Settings and Assign User Roles❓ =
|
168 |
|
169 |
Refer [here](https://www.icegram.com/documentation/es-general-plugin-settings/).
|
170 |
|
171 |
+
= 4. How does Sync work❓ =
|
172 |
|
173 |
Refer [here](https://www.icegram.com/documentation/es-how-does-sync-work/).
|
174 |
|
175 |
+
= 5. How to Import and export email address❓ =
|
176 |
|
177 |
Refer [here](https://www.icegram.com/documentation/es-how-to-import-or-export-email-address-to-subscriber-list/).
|
178 |
|
179 |
+
= 6. How to change/update/translate any strings from the plugin❓ =
|
180 |
|
181 |
Refer steps from [here](https://www.icegram.com/documentation/es-how-to-change-update-translate-any-texts-from-email-subscribers/).
|
182 |
|
183 |
+
= 7. How to add unsubscribe link in emails❓ =
|
184 |
|
185 |
Refer [here](https://www.icegram.com/documentation/es-how-to-add-unsubscribe-link-in-emails/).
|
186 |
|
187 |
+
= 8. How to Create and Send Newsletter Emails❓ =
|
188 |
|
189 |
Refer [here](https://www.icegram.com/documentation/es-how-to-create-and-send-newsletter-emails/).
|
190 |
|
191 |
+
= 9. What are the available keywords in the Newsletters❓ =
|
192 |
|
193 |
Refer [here](https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-newsletters/).
|
194 |
|
195 |
+
= 10. How to Create and Send Post Notification Emails when new posts are published❓ =
|
196 |
|
197 |
Refer [here](https://www.icegram.com/documentation/es-how-to-create-and-send-post-notification-emails-when-new-posts-are-published/).
|
198 |
|
199 |
+
= 11. What are the available keywords in the Post Notifications❓ =
|
200 |
|
201 |
Refer [here](https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-post-notifications/).
|
202 |
|
203 |
+
= 12. How to send a sample new post notification email to testgroup/myself❓ =
|
204 |
|
205 |
Refer [here](https://www.icegram.com/documentation/es-how-to-send-a-sample-new-post-notification-email-to-testgroup-myself/).
|
206 |
|
207 |
+
= 13. How to check sent emails reports❓ =
|
208 |
|
209 |
Refer [here](https://www.icegram.com/documentation/es-how-to-check-sent-emails/).
|
210 |
|
211 |
+
= 14. How to Add/Update Existing Subscribers Group & Status❓ =
|
212 |
|
213 |
Refer [here](https://www.icegram.com/documentation/es-how-to-add-update-existing-subscribers-group/).
|
214 |
|
216 |
|
217 |
Check steps from [here](https://www.icegram.com/documentation/es-subscribers-are-not-receiving-emails/).
|
218 |
|
219 |
+
= 16. How to show subscribe form inside a popup❓ =
|
220 |
|
221 |
Refer [here](https://www.icegram.com/documentation/es-how-to-show-subscribe-form-inside-a-popup/).
|
222 |
|
223 |
+
= 17. How to use Rainmaker’s form in Email Subscribers❓ =
|
224 |
|
225 |
Refer [here](https://www.icegram.com/documentation/es-how-to-use-rainmakers-form-in-email-subscribers/).
|
226 |
|
227 |
+
= 18. How to Redirect Subscribers to a new page/url after successful sign up❓ =
|
228 |
|
229 |
Refer [here](https://www.icegram.com/documentation/es-how-to-redirect-subscribers-to-a-new-page-url-after-successful-sign-up/).
|
230 |
|
231 |
+
= 19. How to add captcha in Subscribe form of Email Subscribers❓ =
|
232 |
|
233 |
Refer [here](https://www.icegram.com/documentation/es-how-to-add-captcha-in-subscribe-form-of-email-subscribers/).
|
234 |
|
235 |
+
= 20. How to Schedule Cron Emails/auto emails❓ =
|
236 |
|
237 |
Refer [here](https://www.icegram.com/documentation/es-how-to-schedule-cron-emails/).
|
238 |
|
239 |
+
= 21. How to Schedule Cron Emails in cPanel❓ =
|
240 |
|
241 |
Refer [here](https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-cpanel/).
|
242 |
|
243 |
+
= 22. How to Schedule Cron Emails in Parallels Plesk❓ =
|
244 |
|
245 |
Refer [here](https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-parallels-plesk/).
|
246 |
|
247 |
+
= 23. What to do if Hosting doesn’t support Cron Jobs❓ =
|
248 |
|
249 |
Refer [here](https://www.icegram.com/documentation/es-what-to-do-if-hosting-doesnt-support-cron-jobs/).
|
250 |
|
301 |
|
302 |
== Changelog ==
|
303 |
|
304 |
+
**4.4.9 (24.06.2020)**
|
305 |
+
|
306 |
+
* Update: Redirect to forms list page after creating form
|
307 |
+
* Update: YouTube video embedding issue
|
308 |
+
* Update: Action Scheduler Library to 3.1.6
|
309 |
+
* Fix: {{POSTLINK-ONLY}} keyword issue
|
310 |
+
* Fix: Post Digest issue [PRO]
|
311 |
+
|
312 |
**4.4.8 (22.05.2020)**
|
313 |
|
314 |
* New: Filter Campaigns by type
|