Version Description
Download this release
Release Info
Developer | sandesh055 |
Plugin | WooCommerce Cart Abandonment Recovery |
Version | 1.1.0 |
Comparing to | |
See all releases |
Code changes from version 1.0.0 to 1.1.0
- admin/assets/css/admin-cart-abandonment-rtl.css +208 -3
- admin/assets/css/admin-cart-abandonment.css +208 -3
- admin/assets/js/admin-email-templates.js +13 -0
- changelog.txt +4 -1
- classes/class-cartflows-ca-loader.php +2 -2
- languages/cartflows-ca.pot +514 -416
- modules/cart-abandonment/class-cartflows-ca-cart-abandonment-db.php +63 -57
- modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php +13 -14
- modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php +152 -29
- modules/cart-abandonment/class-cartflows-ca-email-templates.php +1 -1
- modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php +178 -0
- modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-tabs.php +17 -1
- readme.txt +4 -1
- woo-cart-abandonment-recovery.php +1 -1
admin/assets/css/admin-cart-abandonment-rtl.css
CHANGED
@@ -129,8 +129,213 @@
|
|
129 |
}
|
130 |
|
131 |
.wcf-ca-left-report-field-group {
|
132 |
-
display: table-cell; text-align: right
|
133 |
}
|
134 |
.wcf-ca-right-report-field-group {
|
135 |
-
display: table-cell; text-align: left
|
136 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
}
|
130 |
|
131 |
.wcf-ca-left-report-field-group {
|
132 |
+
display: table-cell; text-align: right;
|
133 |
}
|
134 |
.wcf-ca-right-report-field-group {
|
135 |
+
display: table-cell; text-align: left;
|
136 |
+
}
|
137 |
+
.wcf-ca-report-table-row {
|
138 |
+
color: #636363;
|
139 |
+
border: 1px solid #e5e5e5;
|
140 |
+
}
|
141 |
+
|
142 |
+
/* Newly Added for the modification of the User Order detail window UI */
|
143 |
+
|
144 |
+
/* Column Classes */
|
145 |
+
|
146 |
+
.wcf-ca-column-one{
|
147 |
+
width: 100%;
|
148 |
+
}
|
149 |
+
|
150 |
+
.wcf-ca-column-two,
|
151 |
+
.wcf-ca-user-address{
|
152 |
+
width: 50%;
|
153 |
+
}
|
154 |
+
|
155 |
+
.wcf-pull-left{
|
156 |
+
float: right;
|
157 |
+
}
|
158 |
+
.wcf-ca-email-data,
|
159 |
+
.wcf-ca-user-detail{
|
160 |
+
border-radius: 3px;
|
161 |
+
padding: 20px 25px;
|
162 |
+
min-height: 330px;
|
163 |
+
max-height: 420px;
|
164 |
+
width: 100%;
|
165 |
+
overflow: auto;
|
166 |
+
}
|
167 |
+
|
168 |
+
.wcf-ca-user-detail{
|
169 |
+
max-height: 100%;
|
170 |
+
}
|
171 |
+
|
172 |
+
.wcf-ca-user-order{
|
173 |
+
border-radius: 3px;
|
174 |
+
padding: 20px 25px;
|
175 |
+
overflow: hidden;
|
176 |
+
height: auto;
|
177 |
+
width: 100%;
|
178 |
+
min-height: 100%;
|
179 |
+
max-height: 100%;
|
180 |
+
}
|
181 |
+
|
182 |
+
/* Column Classes */
|
183 |
+
|
184 |
+
/* Section classes */
|
185 |
+
|
186 |
+
.wcf-ca-column:first-of-type{
|
187 |
+
margin-left: 13px;
|
188 |
+
}
|
189 |
+
.wcf-ca-column:second-of-type{
|
190 |
+
margin-right: 13px;
|
191 |
+
}
|
192 |
+
|
193 |
+
.wcf-ca-column{
|
194 |
+
background-color: #fff;
|
195 |
+
border-radius: 3px;
|
196 |
+
display: flex;
|
197 |
+
}
|
198 |
+
|
199 |
+
/* Section Classes */
|
200 |
+
|
201 |
+
|
202 |
+
.wcf-ca-right-report-field-group .back-button{
|
203 |
+
height: auto;
|
204 |
+
padding: 3px 5px 3px 10px;
|
205 |
+
}
|
206 |
+
|
207 |
+
.wcf-ca-left-report-field-group .back-button .dashicons{
|
208 |
+
vertical-align: middle;
|
209 |
+
}
|
210 |
+
|
211 |
+
.wcf-ca-panel{
|
212 |
+
cursor: default;
|
213 |
+
/*background-color: #fff;*/
|
214 |
+
border-radius: 5px;
|
215 |
+
display: flex;
|
216 |
+
padding: 0px;
|
217 |
+
margin: 10px 0 25px;
|
218 |
+
}
|
219 |
+
|
220 |
+
.wcf-table{
|
221 |
+
border: none;
|
222 |
+
text-align: right;
|
223 |
+
width: 100%;
|
224 |
+
}
|
225 |
+
.wcf-table tr,
|
226 |
+
.wcf-table tr th,
|
227 |
+
.wcf-table tr td{
|
228 |
+
border: none;
|
229 |
+
}
|
230 |
+
|
231 |
+
.wcf-table tr th a,
|
232 |
+
.wcf-table tr td a{
|
233 |
+
text-decoration: none;
|
234 |
+
cursor: pointer;
|
235 |
+
}
|
236 |
+
|
237 |
+
.wcf-table tr th{
|
238 |
+
vertical-align: bottom;
|
239 |
+
border-bottom: 2px solid #ddd;
|
240 |
+
}
|
241 |
+
|
242 |
+
.wcf-table tr td{
|
243 |
+
border-bottom: 1px solid #ddd;
|
244 |
+
line-height: 1.42857143;
|
245 |
+
vertical-align: top;
|
246 |
+
position: relative;
|
247 |
+
}
|
248 |
+
|
249 |
+
.wcf-ca-panel h2{
|
250 |
+
margin: 0;
|
251 |
+
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
|
252 |
+
font-size: 21px;
|
253 |
+
font-weight: 400;
|
254 |
+
line-height: 1.2;
|
255 |
+
text-shadow: -1px 1px 1px #fff;
|
256 |
+
padding: 10px 0 15px;
|
257 |
+
margin: 0;
|
258 |
+
}
|
259 |
+
|
260 |
+
.wcf-ca-user-order table{
|
261 |
+
width: 100%;
|
262 |
+
}
|
263 |
+
|
264 |
+
.wcf-ca-user-order table thead th{
|
265 |
+
text-align: center;
|
266 |
+
padding: 1em 3em;
|
267 |
+
font-weight: 400;
|
268 |
+
color: #999;
|
269 |
+
/*background: #f8f8f8;*/
|
270 |
+
-webkit-touch-callout: none;
|
271 |
+
-webkit-user-select: none;
|
272 |
+
-moz-user-select: none;
|
273 |
+
-ms-user-select: none;
|
274 |
+
user-select: none;
|
275 |
+
}
|
276 |
+
|
277 |
+
.wcf-ca-user-order table thead th:first-of-type{
|
278 |
+
padding-right: 3.6em;
|
279 |
+
text-align: right;
|
280 |
+
}
|
281 |
+
|
282 |
+
.wcf-ca-user-order table tbody tr td {
|
283 |
+
text-align: center;
|
284 |
+
padding: 1em 3em;
|
285 |
+
vertical-align: middle;
|
286 |
+
}
|
287 |
+
|
288 |
+
.wcf-ca-user-order table tbody tr td:first-of-type{
|
289 |
+
text-align: right;
|
290 |
+
/*width: 38px;*/
|
291 |
+
padding-right: 3em;
|
292 |
+
}
|
293 |
+
|
294 |
+
|
295 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-discount td:first-of-type,
|
296 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-other td:first-of-type,
|
297 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-shipping td:first-of-type,
|
298 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-cart-total td:first-of-type {
|
299 |
+
text-align: left;
|
300 |
+
font-weight: 600;
|
301 |
+
width: 82%;
|
302 |
+
}
|
303 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-discount td {
|
304 |
+
border-top: 1px solid #ccc;
|
305 |
+
}
|
306 |
+
|
307 |
+
.wcf-ca-tooltip-text.display_tool_tip{
|
308 |
+
display: block;
|
309 |
+
}
|
310 |
+
|
311 |
+
.wcf-ca-tooltip-text::before {
|
312 |
+
border-right: 5px solid transparent;
|
313 |
+
border-left: 5px solid transparent;
|
314 |
+
border-top: 5px solid transparent;
|
315 |
+
border-bottom: 5px solid #444;
|
316 |
+
bottom: auto;
|
317 |
+
content: " ";
|
318 |
+
font-size: 0;
|
319 |
+
right: 25px;
|
320 |
+
line-height: 0;
|
321 |
+
margin-right: -5px;
|
322 |
+
position: absolute;
|
323 |
+
top: -10px;
|
324 |
+
width: 0;
|
325 |
+
}
|
326 |
+
|
327 |
+
.wcf-ca-tooltip-text {
|
328 |
+
background: #444;
|
329 |
+
border-radius: 3px;
|
330 |
+
color: #fff;
|
331 |
+
height: auto;
|
332 |
+
right: 0;
|
333 |
+
margin-top: 10px;
|
334 |
+
max-width: 150px;
|
335 |
+
position: absolute;
|
336 |
+
padding: 6px 10px;
|
337 |
+
width: 100%;
|
338 |
+
display: none;
|
339 |
+
z-index: 10000;
|
340 |
+
}
|
341 |
+
/* Newly Added for the modification of the User Order detail window UI */
|
admin/assets/css/admin-cart-abandonment.css
CHANGED
@@ -129,8 +129,213 @@
|
|
129 |
}
|
130 |
|
131 |
.wcf-ca-left-report-field-group {
|
132 |
-
display: table-cell; text-align: left
|
133 |
}
|
134 |
.wcf-ca-right-report-field-group {
|
135 |
-
display: table-cell; text-align: right
|
136 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
}
|
130 |
|
131 |
.wcf-ca-left-report-field-group {
|
132 |
+
display: table-cell; text-align: left;
|
133 |
}
|
134 |
.wcf-ca-right-report-field-group {
|
135 |
+
display: table-cell; text-align: right;
|
136 |
+
}
|
137 |
+
.wcf-ca-report-table-row {
|
138 |
+
color: #636363;
|
139 |
+
border: 1px solid #e5e5e5;
|
140 |
+
}
|
141 |
+
|
142 |
+
/* Newly Added for the modification of the User Order detail window UI */
|
143 |
+
|
144 |
+
/* Column Classes */
|
145 |
+
|
146 |
+
.wcf-ca-column-one{
|
147 |
+
width: 100%;
|
148 |
+
}
|
149 |
+
|
150 |
+
.wcf-ca-column-two,
|
151 |
+
.wcf-ca-user-address{
|
152 |
+
width: 50%;
|
153 |
+
}
|
154 |
+
|
155 |
+
.wcf-pull-left{
|
156 |
+
float: left;
|
157 |
+
}
|
158 |
+
.wcf-ca-email-data,
|
159 |
+
.wcf-ca-user-detail{
|
160 |
+
border-radius: 3px;
|
161 |
+
padding: 20px 25px;
|
162 |
+
min-height: 330px;
|
163 |
+
max-height: 420px;
|
164 |
+
width: 100%;
|
165 |
+
overflow: auto;
|
166 |
+
}
|
167 |
+
|
168 |
+
.wcf-ca-user-detail{
|
169 |
+
max-height: 100%;
|
170 |
+
}
|
171 |
+
|
172 |
+
.wcf-ca-user-order{
|
173 |
+
border-radius: 3px;
|
174 |
+
padding: 20px 25px;
|
175 |
+
overflow: hidden;
|
176 |
+
height: auto;
|
177 |
+
width: 100%;
|
178 |
+
min-height: 100%;
|
179 |
+
max-height: 100%;
|
180 |
+
}
|
181 |
+
|
182 |
+
/* Column Classes */
|
183 |
+
|
184 |
+
/* Section classes */
|
185 |
+
|
186 |
+
.wcf-ca-column:first-of-type{
|
187 |
+
margin-right: 13px;
|
188 |
+
}
|
189 |
+
.wcf-ca-column:second-of-type{
|
190 |
+
margin-left: 13px;
|
191 |
+
}
|
192 |
+
|
193 |
+
.wcf-ca-column{
|
194 |
+
background-color: #fff;
|
195 |
+
border-radius: 3px;
|
196 |
+
display: flex;
|
197 |
+
}
|
198 |
+
|
199 |
+
/* Section Classes */
|
200 |
+
|
201 |
+
|
202 |
+
.wcf-ca-right-report-field-group .back-button{
|
203 |
+
height: auto;
|
204 |
+
padding: 3px 10px 3px 5px;
|
205 |
+
}
|
206 |
+
|
207 |
+
.wcf-ca-left-report-field-group .back-button .dashicons{
|
208 |
+
vertical-align: middle;
|
209 |
+
}
|
210 |
+
|
211 |
+
.wcf-ca-panel{
|
212 |
+
cursor: default;
|
213 |
+
/*background-color: #fff;*/
|
214 |
+
border-radius: 5px;
|
215 |
+
display: flex;
|
216 |
+
padding: 0px;
|
217 |
+
margin: 10px 0 25px;
|
218 |
+
}
|
219 |
+
|
220 |
+
.wcf-table{
|
221 |
+
border: none;
|
222 |
+
text-align: left;
|
223 |
+
width: 100%;
|
224 |
+
}
|
225 |
+
.wcf-table tr,
|
226 |
+
.wcf-table tr th,
|
227 |
+
.wcf-table tr td{
|
228 |
+
border: none;
|
229 |
+
}
|
230 |
+
|
231 |
+
.wcf-table tr th a,
|
232 |
+
.wcf-table tr td a{
|
233 |
+
text-decoration: none;
|
234 |
+
cursor: pointer;
|
235 |
+
}
|
236 |
+
|
237 |
+
.wcf-table tr th{
|
238 |
+
vertical-align: bottom;
|
239 |
+
border-bottom: 2px solid #ddd;
|
240 |
+
}
|
241 |
+
|
242 |
+
.wcf-table tr td{
|
243 |
+
border-bottom: 1px solid #ddd;
|
244 |
+
line-height: 1.42857143;
|
245 |
+
vertical-align: top;
|
246 |
+
position: relative;
|
247 |
+
}
|
248 |
+
|
249 |
+
.wcf-ca-panel h2{
|
250 |
+
margin: 0;
|
251 |
+
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
|
252 |
+
font-size: 21px;
|
253 |
+
font-weight: 400;
|
254 |
+
line-height: 1.2;
|
255 |
+
text-shadow: 1px 1px 1px #fff;
|
256 |
+
padding: 10px 0 15px;
|
257 |
+
margin: 0;
|
258 |
+
}
|
259 |
+
|
260 |
+
.wcf-ca-user-order table{
|
261 |
+
width: 100%;
|
262 |
+
}
|
263 |
+
|
264 |
+
.wcf-ca-user-order table thead th{
|
265 |
+
text-align: center;
|
266 |
+
padding: 1em 3em;
|
267 |
+
font-weight: 400;
|
268 |
+
color: #999;
|
269 |
+
/*background: #f8f8f8;*/
|
270 |
+
-webkit-touch-callout: none;
|
271 |
+
-webkit-user-select: none;
|
272 |
+
-moz-user-select: none;
|
273 |
+
-ms-user-select: none;
|
274 |
+
user-select: none;
|
275 |
+
}
|
276 |
+
|
277 |
+
.wcf-ca-user-order table thead th:first-of-type{
|
278 |
+
padding-left: 3.6em;
|
279 |
+
text-align: left;
|
280 |
+
}
|
281 |
+
|
282 |
+
.wcf-ca-user-order table tbody tr td {
|
283 |
+
text-align: center;
|
284 |
+
padding: 1em 3em;
|
285 |
+
vertical-align: middle;
|
286 |
+
}
|
287 |
+
|
288 |
+
.wcf-ca-user-order table tbody tr td:first-of-type{
|
289 |
+
text-align: left;
|
290 |
+
/*width: 38px;*/
|
291 |
+
padding-left: 3em;
|
292 |
+
}
|
293 |
+
|
294 |
+
|
295 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-discount td:first-of-type,
|
296 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-other td:first-of-type,
|
297 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-shipping td:first-of-type,
|
298 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-cart-total td:first-of-type {
|
299 |
+
text-align: right;
|
300 |
+
font-weight: 600;
|
301 |
+
width: 82%;
|
302 |
+
}
|
303 |
+
.wcf-ca-user-order table tbody tr#wcf-ca-discount td {
|
304 |
+
border-top: 1px solid #ccc;
|
305 |
+
}
|
306 |
+
|
307 |
+
.wcf-ca-tooltip-text.display_tool_tip{
|
308 |
+
display: block;
|
309 |
+
}
|
310 |
+
|
311 |
+
.wcf-ca-tooltip-text::before {
|
312 |
+
border-left: 5px solid transparent;
|
313 |
+
border-right: 5px solid transparent;
|
314 |
+
border-top: 5px solid transparent;
|
315 |
+
border-bottom: 5px solid #444;
|
316 |
+
bottom: auto;
|
317 |
+
content: " ";
|
318 |
+
font-size: 0;
|
319 |
+
left: 25px;
|
320 |
+
line-height: 0;
|
321 |
+
margin-left: -5px;
|
322 |
+
position: absolute;
|
323 |
+
top: -10px;
|
324 |
+
width: 0;
|
325 |
+
}
|
326 |
+
|
327 |
+
.wcf-ca-tooltip-text {
|
328 |
+
background: #444;
|
329 |
+
border-radius: 3px;
|
330 |
+
color: #fff;
|
331 |
+
height: auto;
|
332 |
+
left: 0;
|
333 |
+
margin-top: 10px;
|
334 |
+
max-width: 150px;
|
335 |
+
position: absolute;
|
336 |
+
padding: 6px 10px;
|
337 |
+
width: 100%;
|
338 |
+
display: none;
|
339 |
+
z-index: 10000;
|
340 |
+
}
|
341 |
+
/* Newly Added for the modification of the User Order detail window UI */
|
admin/assets/js/admin-email-templates.js
CHANGED
@@ -232,11 +232,24 @@
|
|
232 |
},
|
233 |
}
|
234 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
235 |
$(document).ready(
|
236 |
function () {
|
237 |
EmailTemplatesAdmin.init();
|
238 |
CartAbandonmentSettings.init();
|
239 |
ZapierSettings.init();
|
|
|
|
|
240 |
}
|
241 |
);
|
242 |
|
232 |
},
|
233 |
}
|
234 |
|
235 |
+
ToolTipHover = {
|
236 |
+
init: function () {
|
237 |
+
|
238 |
+
$(".wcf-ca-report-table-row .wcf-ca-icon-row").hover(function(){
|
239 |
+
$(this).find('.wcf-ca-tooltip-text').toggleClass("display_tool_tip");
|
240 |
+
});
|
241 |
+
},
|
242 |
+
|
243 |
+
|
244 |
+
}
|
245 |
+
|
246 |
$(document).ready(
|
247 |
function () {
|
248 |
EmailTemplatesAdmin.init();
|
249 |
CartAbandonmentSettings.init();
|
250 |
ZapierSettings.init();
|
251 |
+
|
252 |
+
ToolTipHover.init();
|
253 |
}
|
254 |
);
|
255 |
|
changelog.txt
CHANGED
@@ -1,2 +1,5 @@
|
|
|
|
|
|
|
|
1 |
Version 1.0.0 - Monday, 27th May 2019
|
2 |
-
- Initial Release
|
1 |
+
Version 1.1.0 - Thursday, 30th May 2019
|
2 |
+
- Added a view for admin to check email status specific to the particular abandoned user.
|
3 |
+
|
4 |
Version 1.0.0 - Monday, 27th May 2019
|
5 |
+
- Initial Release
|
classes/class-cartflows-ca-loader.php
CHANGED
@@ -77,7 +77,7 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
|
|
77 |
define( 'CARTFLOWS_CA_BASE', plugin_basename( CARTFLOWS_CA_FILE ) );
|
78 |
define( 'CARTFLOWS_CA_DIR', plugin_dir_path( CARTFLOWS_CA_FILE ) );
|
79 |
define( 'CARTFLOWS_CA_URL', plugins_url( '/', CARTFLOWS_CA_FILE ) );
|
80 |
-
define( 'CARTFLOWS_CA_VER', '1.
|
81 |
define( 'CARTFLOWS_CA_SLUG', 'cartflows_ca' );
|
82 |
|
83 |
define( 'CARTFLOWS_CA_CART_ABANDONMENT_TABLE', 'cartflows_ca_cart_abandonment' );
|
@@ -131,7 +131,7 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
|
|
131 |
|
132 |
$class = 'notice notice-error';
|
133 |
/* translators: %s: html tags */
|
134 |
-
$message = sprintf( __( 'The %1$
|
135 |
|
136 |
$plugin = 'woocommerce/woocommerce.php';
|
137 |
|
77 |
define( 'CARTFLOWS_CA_BASE', plugin_basename( CARTFLOWS_CA_FILE ) );
|
78 |
define( 'CARTFLOWS_CA_DIR', plugin_dir_path( CARTFLOWS_CA_FILE ) );
|
79 |
define( 'CARTFLOWS_CA_URL', plugins_url( '/', CARTFLOWS_CA_FILE ) );
|
80 |
+
define( 'CARTFLOWS_CA_VER', '1.1.0' );
|
81 |
define( 'CARTFLOWS_CA_SLUG', 'cartflows_ca' );
|
82 |
|
83 |
define( 'CARTFLOWS_CA_CART_ABANDONMENT_TABLE', 'cartflows_ca_cart_abandonment' );
|
131 |
|
132 |
$class = 'notice notice-error';
|
133 |
/* translators: %s: html tags */
|
134 |
+
$message = sprintf( __( 'The %1$sWooCommerce Cart Abandonment Recovery%2$s plugin requires %1$sWooCommerce%2$s plugin installed & activated.', 'cartflows-ca' ), '<strong>', '</strong>' );
|
135 |
|
136 |
$plugin = 'woocommerce/woocommerce.php';
|
137 |
|
languages/cartflows-ca.pot
CHANGED
@@ -1,417 +1,515 @@
|
|
1 |
-
# Copyright (C) 2019 CartFlows Inc
|
2 |
-
# This file is distributed under the same license as the
|
3 |
-
msgid ""
|
4 |
-
msgstr ""
|
5 |
-
"Project-Id-Version:
|
6 |
-
"Report-Msgid-Bugs-To: "
|
7 |
-
"https://wordpress.org/support/plugin/
|
8 |
-
"POT-Creation-Date: 2019-05-
|
9 |
-
"MIME-Version: 1.0\n"
|
10 |
-
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
-
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
13 |
-
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14 |
-
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15 |
-
"Language: en\n"
|
16 |
-
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
17 |
-
"X-Poedit-Country: United States\n"
|
18 |
-
"X-Poedit-SourceCharset: UTF-8\n"
|
19 |
-
"X-Poedit-KeywordsList: "
|
20 |
-
"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
|
21 |
-
"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
|
22 |
-
"X-Poedit-Basepath: ../\n"
|
23 |
-
"X-Poedit-SearchPath-0: .\n"
|
24 |
-
"X-Poedit-Bookmarks: \n"
|
25 |
-
"X-Textdomain-Support: yes\n"
|
26 |
-
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
27 |
-
|
28 |
-
#: classes/class-cartflows-ca-loader.php:134
|
29 |
-
#. translators: %s: html tags
|
30 |
-
msgid ""
|
31 |
-
"The %1$
|
32 |
-
"%1$sWooCommerce%2$s plugin installed & activated."
|
33 |
-
msgstr ""
|
34 |
-
|
35 |
-
#: classes/class-cartflows-ca-loader.php:144
|
36 |
-
msgid "Activate WooCommerce"
|
37 |
-
msgstr ""
|
38 |
-
|
39 |
-
#: classes/class-cartflows-ca-loader.php:152
|
40 |
-
msgid "Install WooCommerce"
|
41 |
-
msgstr ""
|
42 |
-
|
43 |
-
#: classes/class-cartflows-ca-settings.php:53
|
44 |
-
msgid "Cart Abandonment Settings"
|
45 |
-
msgstr ""
|
46 |
-
|
47 |
-
#: classes/class-cartflows-ca-settings.php:60
|
48 |
-
msgid "Enable Cart Abandonment Tracking"
|
49 |
-
msgstr ""
|
50 |
-
|
51 |
-
#: classes/class-cartflows-ca-settings.php:64
|
52 |
-
msgid ""
|
53 |
-
"Start capturing abandoned carts. <br/><br/> <span "
|
54 |
-
"class=\"description\"><strong>Note:</strong> Cart will be considered "
|
55 |
-
"abandoned if order is not completed in <strong>15 minutes</strong>.</span>"
|
56 |
-
msgstr ""
|
57 |
-
|
58 |
-
#: classes/class-cartflows-ca-settings.php:76
|
59 |
-
msgid "Email settings"
|
60 |
-
msgstr ""
|
61 |
-
|
62 |
-
#: classes/class-cartflows-ca-settings.php:83
|
63 |
-
msgid "\"From\" Name"
|
64 |
-
msgstr ""
|
65 |
-
|
66 |
-
#: classes/class-cartflows-ca-settings.php:92
|
67 |
-
msgid "\"From\" Address"
|
68 |
-
msgstr ""
|
69 |
-
|
70 |
-
#: classes/class-cartflows-ca-settings.php:101
|
71 |
-
msgid "Send Reply Emails to"
|
72 |
-
msgstr ""
|
73 |
-
|
74 |
-
#: classes/class-cartflows-ca-settings.php:128
|
75 |
-
msgid "Enable Webhook"
|
76 |
-
msgstr ""
|
77 |
-
|
78 |
-
#: classes/class-cartflows-ca-settings.php:132
|
79 |
-
msgid ""
|
80 |
-
"Allows you to trigger webhooks automatically upon cart abandonment and "
|
81 |
-
"recovery."
|
82 |
-
msgstr ""
|
83 |
-
|
84 |
-
#: classes/class-cartflows-ca-settings.php:137
|
85 |
-
msgid "Webhook URL"
|
86 |
-
msgstr ""
|
87 |
-
|
88 |
-
#: classes/class-cartflows-ca-settings.php:156
|
89 |
-
msgid "Coupon Code Settings"
|
90 |
-
msgstr ""
|
91 |
-
|
92 |
-
#: classes/class-cartflows-ca-settings.php:163
|
93 |
-
msgid "Create Coupon Code"
|
94 |
-
msgstr ""
|
95 |
-
|
96 |
-
#: classes/class-cartflows-ca-settings.php:167
|
97 |
-
msgid ""
|
98 |
-
"Auto-create the special coupon for the abandoned cart to send over the "
|
99 |
-
"emails."
|
100 |
-
msgstr ""
|
101 |
-
|
102 |
-
#: classes/class-cartflows-ca-settings.php:172
|
103 |
-
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:491
|
104 |
-
msgid "Discount Type"
|
105 |
-
msgstr ""
|
106 |
-
|
107 |
-
#: classes/class-cartflows-ca-settings.php:181
|
108 |
-
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:523
|
109 |
-
msgid "Coupon Amount"
|
110 |
-
msgstr ""
|
111 |
-
|
112 |
-
#: classes/class-cartflows-ca-settings.php:190
|
113 |
-
msgid "Coupon Expires After"
|
114 |
-
msgstr ""
|
115 |
-
|
116 |
-
#: classes/class-cartflows-ca-settings.php:225
|
117 |
-
msgid "Webhook Settings"
|
118 |
-
msgstr ""
|
119 |
-
|
120 |
-
#: classes/class-cartflows-ca-settings.php:234
|
121 |
-
msgid "GDPR Settings"
|
122 |
-
msgstr ""
|
123 |
-
|
124 |
-
#: classes/class-cartflows-ca-settings.php:241
|
125 |
-
msgid "Enable GDPR integration"
|
126 |
-
msgstr ""
|
127 |
-
|
128 |
-
#: classes/class-cartflows-ca-settings.php:245
|
129 |
-
msgid ""
|
130 |
-
"Ask confirmation from the user before tracking data. <br/><br/> <span "
|
131 |
-
"class=\"description\"><strong>Note:</strong> By checking this, it will show "
|
132 |
-
"up confirmation text below the email id on checkout page.</span>"
|
133 |
-
msgstr ""
|
134 |
-
|
135 |
-
#: classes/class-cartflows-ca-settings.php:250
|
136 |
-
msgid "GDPR Message"
|
137 |
-
msgstr ""
|
138 |
-
|
139 |
-
#: classes/class-cartflows-ca-settings.php:421
|
140 |
-
msgid "Coupon code should be numeric and has to be greater than or equals to 1."
|
141 |
-
msgstr ""
|
142 |
-
|
143 |
-
#: classes/class-cartflows-ca-settings.php:531
|
144 |
-
msgid "Invalid email \"From\" address field"
|
145 |
-
msgstr ""
|
146 |
-
|
147 |
-
#: classes/class-cartflows-ca-settings.php:549
|
148 |
-
msgid "Invalid email \"Reply\" address field"
|
149 |
-
msgstr ""
|
150 |
-
|
151 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
#: modules/cart-abandonment/class-cartflows-ca-
|
159 |
-
msgid "
|
160 |
-
msgstr ""
|
161 |
-
|
162 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
246 |
-
msgid "
|
247 |
-
msgstr ""
|
248 |
-
|
249 |
-
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
#: modules/cart-abandonment/class-cartflows-ca-
|
266 |
-
msgid "
|
267 |
-
msgstr ""
|
268 |
-
|
269 |
-
#: modules/cart-abandonment/class-cartflows-ca-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
msgid ""
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
417 |
msgstr ""
|
1 |
+
# Copyright (C) 2019 CartFlows Inc
|
2 |
+
# This file is distributed under the same license as the WooCommerce Cart Abandonment Recovery package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: WooCommerce Cart Abandonment Recovery 1.1.0\n"
|
6 |
+
"Report-Msgid-Bugs-To: "
|
7 |
+
"https://wordpress.org/support/plugin/woo-cart-abandonment-recovery\n"
|
8 |
+
"POT-Creation-Date: 2019-05-30 05:42:46+00:00\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
13 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15 |
+
"Language: en\n"
|
16 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
17 |
+
"X-Poedit-Country: United States\n"
|
18 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
19 |
+
"X-Poedit-KeywordsList: "
|
20 |
+
"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
|
21 |
+
"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
|
22 |
+
"X-Poedit-Basepath: ../\n"
|
23 |
+
"X-Poedit-SearchPath-0: .\n"
|
24 |
+
"X-Poedit-Bookmarks: \n"
|
25 |
+
"X-Textdomain-Support: yes\n"
|
26 |
+
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
27 |
+
|
28 |
+
#: classes/class-cartflows-ca-loader.php:134
|
29 |
+
#. translators: %s: html tags
|
30 |
+
msgid ""
|
31 |
+
"The %1$sWooCommerce Cart Abandonment Recovery%2$s plugin requires "
|
32 |
+
"%1$sWooCommerce%2$s plugin installed & activated."
|
33 |
+
msgstr ""
|
34 |
+
|
35 |
+
#: classes/class-cartflows-ca-loader.php:144
|
36 |
+
msgid "Activate WooCommerce"
|
37 |
+
msgstr ""
|
38 |
+
|
39 |
+
#: classes/class-cartflows-ca-loader.php:152
|
40 |
+
msgid "Install WooCommerce"
|
41 |
+
msgstr ""
|
42 |
+
|
43 |
+
#: classes/class-cartflows-ca-settings.php:53
|
44 |
+
msgid "Cart Abandonment Settings"
|
45 |
+
msgstr ""
|
46 |
+
|
47 |
+
#: classes/class-cartflows-ca-settings.php:60
|
48 |
+
msgid "Enable Cart Abandonment Tracking"
|
49 |
+
msgstr ""
|
50 |
+
|
51 |
+
#: classes/class-cartflows-ca-settings.php:64
|
52 |
+
msgid ""
|
53 |
+
"Start capturing abandoned carts. <br/><br/> <span "
|
54 |
+
"class=\"description\"><strong>Note:</strong> Cart will be considered "
|
55 |
+
"abandoned if order is not completed in <strong>15 minutes</strong>.</span>"
|
56 |
+
msgstr ""
|
57 |
+
|
58 |
+
#: classes/class-cartflows-ca-settings.php:76
|
59 |
+
msgid "Email settings"
|
60 |
+
msgstr ""
|
61 |
+
|
62 |
+
#: classes/class-cartflows-ca-settings.php:83
|
63 |
+
msgid "\"From\" Name"
|
64 |
+
msgstr ""
|
65 |
+
|
66 |
+
#: classes/class-cartflows-ca-settings.php:92
|
67 |
+
msgid "\"From\" Address"
|
68 |
+
msgstr ""
|
69 |
+
|
70 |
+
#: classes/class-cartflows-ca-settings.php:101
|
71 |
+
msgid "Send Reply Emails to"
|
72 |
+
msgstr ""
|
73 |
+
|
74 |
+
#: classes/class-cartflows-ca-settings.php:128
|
75 |
+
msgid "Enable Webhook"
|
76 |
+
msgstr ""
|
77 |
+
|
78 |
+
#: classes/class-cartflows-ca-settings.php:132
|
79 |
+
msgid ""
|
80 |
+
"Allows you to trigger webhooks automatically upon cart abandonment and "
|
81 |
+
"recovery."
|
82 |
+
msgstr ""
|
83 |
+
|
84 |
+
#: classes/class-cartflows-ca-settings.php:137
|
85 |
+
msgid "Webhook URL"
|
86 |
+
msgstr ""
|
87 |
+
|
88 |
+
#: classes/class-cartflows-ca-settings.php:156
|
89 |
+
msgid "Coupon Code Settings"
|
90 |
+
msgstr ""
|
91 |
+
|
92 |
+
#: classes/class-cartflows-ca-settings.php:163
|
93 |
+
msgid "Create Coupon Code"
|
94 |
+
msgstr ""
|
95 |
+
|
96 |
+
#: classes/class-cartflows-ca-settings.php:167
|
97 |
+
msgid ""
|
98 |
+
"Auto-create the special coupon for the abandoned cart to send over the "
|
99 |
+
"emails."
|
100 |
+
msgstr ""
|
101 |
+
|
102 |
+
#: classes/class-cartflows-ca-settings.php:172
|
103 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:491
|
104 |
+
msgid "Discount Type"
|
105 |
+
msgstr ""
|
106 |
+
|
107 |
+
#: classes/class-cartflows-ca-settings.php:181
|
108 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:523
|
109 |
+
msgid "Coupon Amount"
|
110 |
+
msgstr ""
|
111 |
+
|
112 |
+
#: classes/class-cartflows-ca-settings.php:190
|
113 |
+
msgid "Coupon Expires After"
|
114 |
+
msgstr ""
|
115 |
+
|
116 |
+
#: classes/class-cartflows-ca-settings.php:225
|
117 |
+
msgid "Webhook Settings"
|
118 |
+
msgstr ""
|
119 |
+
|
120 |
+
#: classes/class-cartflows-ca-settings.php:234
|
121 |
+
msgid "GDPR Settings"
|
122 |
+
msgstr ""
|
123 |
+
|
124 |
+
#: classes/class-cartflows-ca-settings.php:241
|
125 |
+
msgid "Enable GDPR integration"
|
126 |
+
msgstr ""
|
127 |
+
|
128 |
+
#: classes/class-cartflows-ca-settings.php:245
|
129 |
+
msgid ""
|
130 |
+
"Ask confirmation from the user before tracking data. <br/><br/> <span "
|
131 |
+
"class=\"description\"><strong>Note:</strong> By checking this, it will show "
|
132 |
+
"up confirmation text below the email id on checkout page.</span>"
|
133 |
+
msgstr ""
|
134 |
+
|
135 |
+
#: classes/class-cartflows-ca-settings.php:250
|
136 |
+
msgid "GDPR Message"
|
137 |
+
msgstr ""
|
138 |
+
|
139 |
+
#: classes/class-cartflows-ca-settings.php:421
|
140 |
+
msgid "Coupon code should be numeric and has to be greater than or equals to 1."
|
141 |
+
msgstr ""
|
142 |
+
|
143 |
+
#: classes/class-cartflows-ca-settings.php:531
|
144 |
+
msgid "Invalid email \"From\" address field"
|
145 |
+
msgstr ""
|
146 |
+
|
147 |
+
#: classes/class-cartflows-ca-settings.php:549
|
148 |
+
msgid "Invalid email \"Reply\" address field"
|
149 |
+
msgstr ""
|
150 |
+
|
151 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:65
|
152 |
+
msgid "View"
|
153 |
+
msgstr ""
|
154 |
+
|
155 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:66
|
156 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:122
|
157 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:85
|
158 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:119
|
159 |
+
msgid "Delete"
|
160 |
+
msgstr ""
|
161 |
+
|
162 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:70
|
163 |
+
msgid "Unsubscribe"
|
164 |
+
msgstr ""
|
165 |
+
|
166 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:188
|
167 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1510
|
168 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1572
|
169 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:112
|
170 |
+
msgid "Name"
|
171 |
+
msgstr ""
|
172 |
+
|
173 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:189
|
174 |
+
msgid "Email"
|
175 |
+
msgstr ""
|
176 |
+
|
177 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:190
|
178 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1530
|
179 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1594
|
180 |
+
msgid "Cart Total"
|
181 |
+
msgstr ""
|
182 |
+
|
183 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:191
|
184 |
+
msgid "Order Status"
|
185 |
+
msgstr ""
|
186 |
+
|
187 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:192
|
188 |
+
msgid "Time"
|
189 |
+
msgstr ""
|
190 |
+
|
191 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:97
|
192 |
+
msgid "Mail has been sent successfully!"
|
193 |
+
msgstr ""
|
194 |
+
|
195 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:99
|
196 |
+
msgid "Mail sending failed!"
|
197 |
+
msgstr ""
|
198 |
+
|
199 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:132
|
200 |
+
msgid "Every Fifteen Minutes"
|
201 |
+
msgstr ""
|
202 |
+
|
203 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:197
|
204 |
+
msgid "You have successfully unsubscribed from our email list."
|
205 |
+
msgstr ""
|
206 |
+
|
207 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:197
|
208 |
+
msgid "Unsubscribed"
|
209 |
+
msgstr ""
|
210 |
+
|
211 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:345
|
212 |
+
msgid "No Thanks"
|
213 |
+
msgstr ""
|
214 |
+
|
215 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:739
|
216 |
+
msgid "CartFlows says: This order was abandoned & subsequently recovered."
|
217 |
+
msgstr ""
|
218 |
+
|
219 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:851
|
220 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:852
|
221 |
+
msgid "Cart Abandonment"
|
222 |
+
msgstr ""
|
223 |
+
|
224 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:885
|
225 |
+
msgid "Items deleted: %d"
|
226 |
+
msgstr ""
|
227 |
+
|
228 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:902
|
229 |
+
msgid "User unsubscribed successfully!"
|
230 |
+
msgstr ""
|
231 |
+
|
232 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1097
|
233 |
+
msgid "Report"
|
234 |
+
msgstr ""
|
235 |
+
|
236 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1113
|
237 |
+
msgid "Emails"
|
238 |
+
msgstr ""
|
239 |
+
|
240 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1129
|
241 |
+
msgid "Settings"
|
242 |
+
msgstr ""
|
243 |
+
|
244 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1509
|
245 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1571
|
246 |
+
msgid "Item"
|
247 |
+
msgstr ""
|
248 |
+
|
249 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1511
|
250 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1573
|
251 |
+
msgid "Quantity"
|
252 |
+
msgstr ""
|
253 |
+
|
254 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1512
|
255 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1574
|
256 |
+
msgid "Price"
|
257 |
+
msgstr ""
|
258 |
+
|
259 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1513
|
260 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1575
|
261 |
+
msgid "Line Subtotal"
|
262 |
+
msgstr ""
|
263 |
+
|
264 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1517
|
265 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1581
|
266 |
+
msgid "Discount"
|
267 |
+
msgstr ""
|
268 |
+
|
269 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1521
|
270 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1585
|
271 |
+
msgid "Other"
|
272 |
+
msgstr ""
|
273 |
+
|
274 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1526
|
275 |
+
#: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1590
|
276 |
+
msgid "Shipping"
|
277 |
+
msgstr ""
|
278 |
+
|
279 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:73
|
280 |
+
msgid "Edit"
|
281 |
+
msgstr ""
|
282 |
+
|
283 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:97
|
284 |
+
msgid "Clone"
|
285 |
+
msgstr ""
|
286 |
+
|
287 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:183
|
288 |
+
msgid "Template Name"
|
289 |
+
msgstr ""
|
290 |
+
|
291 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:184
|
292 |
+
msgid "Email Subject"
|
293 |
+
msgstr ""
|
294 |
+
|
295 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:185
|
296 |
+
msgid "Trigger After"
|
297 |
+
msgstr ""
|
298 |
+
|
299 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:186
|
300 |
+
msgid "Is Activated?"
|
301 |
+
msgstr ""
|
302 |
+
|
303 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:187
|
304 |
+
msgid "The Email Template has been successfully added."
|
305 |
+
msgstr ""
|
306 |
+
|
307 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:197
|
308 |
+
msgid "The Email Template has been cloned successfully."
|
309 |
+
msgstr ""
|
310 |
+
|
311 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:207
|
312 |
+
msgid "The Email Template has been successfully deleted."
|
313 |
+
msgstr ""
|
314 |
+
|
315 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:216
|
316 |
+
msgid "The Email Template has been successfully updated."
|
317 |
+
msgstr ""
|
318 |
+
|
319 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:226
|
320 |
+
msgid "Default Email Templates has been restored successfully."
|
321 |
+
msgstr ""
|
322 |
+
|
323 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:392
|
324 |
+
msgid "Activate Template now?"
|
325 |
+
msgstr ""
|
326 |
+
|
327 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:412
|
328 |
+
msgid "Template Name:"
|
329 |
+
msgstr ""
|
330 |
+
|
331 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:427
|
332 |
+
msgid "Email Subject:"
|
333 |
+
msgstr ""
|
334 |
+
|
335 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:442
|
336 |
+
msgid "Email Body:"
|
337 |
+
msgstr ""
|
338 |
+
|
339 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:471
|
340 |
+
msgid "Create Coupon"
|
341 |
+
msgstr ""
|
342 |
+
|
343 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:541
|
344 |
+
msgid "Coupon expiry date"
|
345 |
+
msgstr ""
|
346 |
+
|
347 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:578
|
348 |
+
msgid "Send This Email"
|
349 |
+
msgstr ""
|
350 |
+
|
351 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:611
|
352 |
+
msgid "after cart is abandoned."
|
353 |
+
msgstr ""
|
354 |
+
|
355 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:621
|
356 |
+
msgid "Send Test Email To:"
|
357 |
+
msgstr ""
|
358 |
+
|
359 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:935
|
360 |
+
msgid "Create New Template"
|
361 |
+
msgstr ""
|
362 |
+
|
363 |
+
#: modules/cart-abandonment/class-cartflows-ca-email-templates.php:938
|
364 |
+
msgid " Restore Default Templates"
|
365 |
+
msgstr ""
|
366 |
+
|
367 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:36
|
368 |
+
msgid "Email Details:"
|
369 |
+
msgstr ""
|
370 |
+
|
371 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:38
|
372 |
+
msgid " No Email Scheduled."
|
373 |
+
msgstr ""
|
374 |
+
|
375 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:74
|
376 |
+
msgid "The email has unsubscribed and won't be sent further."
|
377 |
+
msgstr ""
|
378 |
+
|
379 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:77
|
380 |
+
msgid "The email has been sent."
|
381 |
+
msgstr ""
|
382 |
+
|
383 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:80
|
384 |
+
msgid "Email is in the queue and will be sent at the scheduled time."
|
385 |
+
msgstr ""
|
386 |
+
|
387 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:108
|
388 |
+
msgid "User Address Details:"
|
389 |
+
msgstr ""
|
390 |
+
|
391 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:111
|
392 |
+
msgid "Billing Address"
|
393 |
+
msgstr ""
|
394 |
+
|
395 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:115
|
396 |
+
msgid "Email address"
|
397 |
+
msgstr ""
|
398 |
+
|
399 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:120
|
400 |
+
msgid "Phone"
|
401 |
+
msgstr ""
|
402 |
+
|
403 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:125
|
404 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:145
|
405 |
+
msgid "Address 1:"
|
406 |
+
msgstr ""
|
407 |
+
|
408 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:128
|
409 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:148
|
410 |
+
msgid "Address 2:"
|
411 |
+
msgstr ""
|
412 |
+
|
413 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:131
|
414 |
+
msgid "Country, City:"
|
415 |
+
msgstr ""
|
416 |
+
|
417 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:134
|
418 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:154
|
419 |
+
msgid "State:"
|
420 |
+
msgstr ""
|
421 |
+
|
422 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:138
|
423 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:160
|
424 |
+
msgid "Postcode:"
|
425 |
+
msgstr ""
|
426 |
+
|
427 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:143
|
428 |
+
msgid "Shipping Address"
|
429 |
+
msgstr ""
|
430 |
+
|
431 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:151
|
432 |
+
msgid "City:"
|
433 |
+
msgstr ""
|
434 |
+
|
435 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:157
|
436 |
+
msgid "Country:"
|
437 |
+
msgstr ""
|
438 |
+
|
439 |
+
#: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:173
|
440 |
+
msgid "User Order Details:"
|
441 |
+
msgstr ""
|
442 |
+
|
443 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:46
|
444 |
+
msgid "Recoverable Orders"
|
445 |
+
msgstr ""
|
446 |
+
|
447 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:50
|
448 |
+
msgid "Total Recoverable Orders."
|
449 |
+
msgstr ""
|
450 |
+
|
451 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:55
|
452 |
+
msgid "Recovered Orders"
|
453 |
+
msgstr ""
|
454 |
+
|
455 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:57
|
456 |
+
msgid "Total Recovered Orders."
|
457 |
+
msgstr ""
|
458 |
+
|
459 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:62
|
460 |
+
msgid "Lost Orders"
|
461 |
+
msgstr ""
|
462 |
+
|
463 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:65
|
464 |
+
msgid "Total Lost Orders."
|
465 |
+
msgstr ""
|
466 |
+
|
467 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:74
|
468 |
+
msgid "Recoverable Revenue"
|
469 |
+
msgstr ""
|
470 |
+
|
471 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:79
|
472 |
+
msgid "Total Recoverable Revenue."
|
473 |
+
msgstr ""
|
474 |
+
|
475 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:84
|
476 |
+
msgid "Recovered Revenue"
|
477 |
+
msgstr ""
|
478 |
+
|
479 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:90
|
480 |
+
msgid "Total Recovered Revenue."
|
481 |
+
msgstr ""
|
482 |
+
|
483 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:95
|
484 |
+
msgid "Recovery Rate"
|
485 |
+
msgstr ""
|
486 |
+
|
487 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:97
|
488 |
+
msgid "Total Percentage Of Recovered Orders After Abandonment."
|
489 |
+
msgstr ""
|
490 |
+
|
491 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php:135
|
492 |
+
msgid "No Orders Found."
|
493 |
+
msgstr ""
|
494 |
+
|
495 |
+
#: modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-tabs.php:10
|
496 |
+
msgid "Woocommerce Cart Abandonment Recovery "
|
497 |
+
msgstr ""
|
498 |
+
|
499 |
+
#. Plugin Name of the plugin/theme
|
500 |
+
msgid "WooCommerce Cart Abandonment Recovery"
|
501 |
+
msgstr ""
|
502 |
+
|
503 |
+
#. Author URI of the plugin/theme
|
504 |
+
msgid "https://cartflows.com/"
|
505 |
+
msgstr ""
|
506 |
+
|
507 |
+
#. Description of the plugin/theme
|
508 |
+
msgid ""
|
509 |
+
"Recover your lost revenue. Capture email address of users on the checkout "
|
510 |
+
"page and send follow up emails if they don't complete the purchase."
|
511 |
+
msgstr ""
|
512 |
+
|
513 |
+
#. Author of the plugin/theme
|
514 |
+
msgid "CartFlows Inc"
|
515 |
msgstr ""
|
modules/cart-abandonment/class-cartflows-ca-cart-abandonment-db.php
CHANGED
@@ -164,71 +164,77 @@ class Cartflows_Ca_Cart_Abandonment_Db {
|
|
164 |
$cart_abandonment_template_db = $wpdb->prefix . CARTFLOWS_CA_EMAIL_TEMPLATE_TABLE;
|
165 |
$cart_abandonment_template_meta_db = $wpdb->prefix . CARTFLOWS_CA_EMAIL_TEMPLATE_META_TABLE;
|
166 |
|
167 |
-
$
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
$template_meta_index = 1;
|
194 |
-
foreach ( $email_templates as $email_template ) {
|
195 |
-
$wpdb->query(
|
196 |
-
$wpdb->prepare(
|
197 |
-
"INSERT INTO $cart_abandonment_template_db (`id`, `template_name`, `email_subject`, `email_body`, `frequency`, `frequency_unit`)
|
198 |
-
VALUES ( %d, %s, %s, %s, %d, %s ) ON DUPLICATE KEY UPDATE id = id",
|
199 |
-
$force_restore ? null : $template_index++,
|
200 |
-
$email_template['template_name'],
|
201 |
-
$email_template['subject'],
|
202 |
-
$email_template['body'],
|
203 |
-
$email_template['frequency'],
|
204 |
-
$email_template['frequency_unit']
|
205 |
-
)
|
206 |
);
|
207 |
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
'coupon_expiry_date' => '',
|
213 |
-
'coupon_expiry_unit' => 'hours',
|
214 |
-
);
|
215 |
-
|
216 |
-
$email_tmpl_id = $wpdb->insert_id;
|
217 |
-
|
218 |
-
foreach ( $meta_data as $meta_key => $meta_value ) {
|
219 |
$wpdb->query(
|
220 |
$wpdb->prepare(
|
221 |
-
"INSERT INTO $
|
222 |
-
|
223 |
-
$force_restore ? null : $
|
224 |
-
$
|
225 |
-
$
|
226 |
-
$
|
|
|
|
|
227 |
)
|
228 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
}
|
|
|
230 |
}
|
231 |
-
|
232 |
}
|
233 |
}
|
234 |
|
164 |
$cart_abandonment_template_db = $wpdb->prefix . CARTFLOWS_CA_EMAIL_TEMPLATE_TABLE;
|
165 |
$cart_abandonment_template_meta_db = $wpdb->prefix . CARTFLOWS_CA_EMAIL_TEMPLATE_META_TABLE;
|
166 |
|
167 |
+
$email_template_count = $wpdb->get_var( "SELECT COUNT(*) FROM $cart_abandonment_template_db" ); // phpcs:ignore
|
168 |
+
|
169 |
+
if ( ( ! $email_template_count ) || $force_restore ) {
|
170 |
+
|
171 |
+
$email_templates = array(
|
172 |
+
array(
|
173 |
+
'template_name' => 'Sample Email Template 1',
|
174 |
+
'subject' => 'Purchase issue?',
|
175 |
+
'body' => "<p>Hi {{customer.firstname}}!</p><p>We\'re having trouble processing your recent purchase. Would you mind completing it?</p><p>Here\'s a link to continue where you left off:</p><p><a href='{{cart.checkout_url}}' target='_blank' rel='noopener'> Continue Your Purchase Now </a></p><p>Kindly,<br />{{admin.firstname}}<br />{{admin.company}}</p><p>{{cart.unsubscribe}}</p>",
|
176 |
+
'frequency' => 30,
|
177 |
+
'frequency_unit' => 'MINUTE',
|
178 |
+
),
|
179 |
+
array(
|
180 |
+
'template_name' => 'Sample Email Template 2',
|
181 |
+
'subject' => 'Need help?',
|
182 |
+
'body' => "<p>Hi {{customer.firstname}}!</p><p>I'm {{admin.firstname}}, and I help handle customer issues at {{admin.company}}.</p><p>I just noticed that you tried to make a purchase, but unfortunately, there was some trouble. Is there anything I can do to help?</p><p>You should be able to complete your checkout in less than a minute:<br /><a href='{{cart.checkout_url}}' target='_blank' rel='noopener'> Click here to continue your purchase </a><p><p>Thanks!<br />{{admin.firstname}}<br />{{admin.company}}</p><p>{{cart.unsubscribe}}</p>",
|
183 |
+
'frequency' => 1,
|
184 |
+
'frequency_unit' => 'DAY',
|
185 |
+
),
|
186 |
+
array(
|
187 |
+
'template_name' => 'Sample Email Template 3',
|
188 |
+
'subject' => 'Exclusive discount for you. Let\'s get things started!',
|
189 |
+
'body' => "<p>Few days back you left {{cart.product.names}} in your cart.</p><p>To help make up your mind, we have added an exclusive 10% discount coupon {{cart.coupon_code}} to your cart.</p><p><a href='{{cart.checkout_url}}' target='_blank' rel='noopener'>Complete Your Purchase Now >></a></p><p>Hurry! This is a onetime offer and will expire in 24 Hours.</p><p>In case you couldn\'t finish your order due to technical difficulties or because you need some help, just reply to this email we will be happy to help.</p><p>Kind Regards,<br />{{admin.firstname}}<br />{{admin.company}}</p><p>{{cart.unsubscribe}}</p>",
|
190 |
+
'frequency' => 3,
|
191 |
+
'frequency_unit' => 'DAY',
|
192 |
+
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
);
|
194 |
|
195 |
+
// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
|
196 |
+
$template_index = 1;
|
197 |
+
$template_meta_index = 1;
|
198 |
+
foreach ( $email_templates as $email_template ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
$wpdb->query(
|
200 |
$wpdb->prepare(
|
201 |
+
"INSERT INTO $cart_abandonment_template_db (`id`, `template_name`, `email_subject`, `email_body`, `frequency`, `frequency_unit`)
|
202 |
+
VALUES ( %d, %s, %s, %s, %d, %s )",
|
203 |
+
$force_restore ? null : $template_index++,
|
204 |
+
$email_template['template_name'],
|
205 |
+
$email_template['subject'],
|
206 |
+
$email_template['body'],
|
207 |
+
$email_template['frequency'],
|
208 |
+
$email_template['frequency_unit']
|
209 |
)
|
210 |
);
|
211 |
+
|
212 |
+
$meta_data = array(
|
213 |
+
'override_global_coupon' => false,
|
214 |
+
'discount_type' => 'percent',
|
215 |
+
'coupon_amount' => 10,
|
216 |
+
'coupon_expiry_date' => '',
|
217 |
+
'coupon_expiry_unit' => 'hours',
|
218 |
+
);
|
219 |
+
|
220 |
+
$email_tmpl_id = $wpdb->insert_id;
|
221 |
+
|
222 |
+
foreach ( $meta_data as $meta_key => $meta_value ) {
|
223 |
+
$wpdb->query(
|
224 |
+
$wpdb->prepare(
|
225 |
+
"INSERT INTO $cart_abandonment_template_meta_db ( `id`, `email_template_id`, `meta_key`, `meta_value` )
|
226 |
+
VALUES ( %d, %d, %s, %s )",
|
227 |
+
$force_restore ? null : $template_meta_index++,
|
228 |
+
$email_tmpl_id,
|
229 |
+
$meta_key,
|
230 |
+
$meta_value
|
231 |
+
)
|
232 |
+
);
|
233 |
+
}
|
234 |
}
|
235 |
+
// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
|
236 |
}
|
237 |
+
|
238 |
}
|
239 |
}
|
240 |
|
modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php
CHANGED
@@ -51,7 +51,18 @@ class Cartflows_Ca_Cart_Abandonment_Table extends WP_List_Table {
|
|
51 |
|
52 |
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
$actions = array(
|
|
|
55 |
'delete' => sprintf( '<a onclick="return confirm(\'Are you sure to delete this order?\');" href="?page=%s&action=delete&id=%s">%s</a>', esc_html( $page ), esc_html( $item['id'] ), __( 'Delete', 'cartflows-ca' ) ),
|
56 |
);
|
57 |
|
@@ -61,26 +72,14 @@ class Cartflows_Ca_Cart_Abandonment_Table extends WP_List_Table {
|
|
61 |
}
|
62 |
|
63 |
return sprintf(
|
64 |
-
'<span class="dashicons dashicons-admin-users"></span> %s %s %s',
|
|
|
65 |
esc_html( $item_details['wcf_first_name'] ),
|
66 |
esc_html( $item_details['wcf_last_name'] ),
|
67 |
$this->row_actions( $actions )
|
68 |
);
|
69 |
}
|
70 |
|
71 |
-
/**
|
72 |
-
* Rendering Email field
|
73 |
-
*
|
74 |
-
* @param object $item - row (key, value array).
|
75 |
-
* @return HTML
|
76 |
-
*/
|
77 |
-
function column_email( $item ) {
|
78 |
-
return sprintf(
|
79 |
-
'<a href="mailto:%1$s" title="">%1$s</a>',
|
80 |
-
esc_html( $item['email'] )
|
81 |
-
);
|
82 |
-
}
|
83 |
-
|
84 |
/**
|
85 |
* Render date column
|
86 |
*
|
51 |
|
52 |
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
53 |
|
54 |
+
$view_url = add_query_arg(
|
55 |
+
array(
|
56 |
+
'page' => WCF_CA_PAGE_NAME,
|
57 |
+
'action' => WCF_ACTION_REPORTS,
|
58 |
+
'sub_action' => WCF_SUB_ACTION_REPORTS_VIEW,
|
59 |
+
'session_id' => sanitize_text_field( $item['session_id'] ),
|
60 |
+
),
|
61 |
+
admin_url( '/admin.php' )
|
62 |
+
);
|
63 |
+
|
64 |
$actions = array(
|
65 |
+
'view' => sprintf( '<a href="%s">%s</a>', esc_url( $view_url ), __( 'View', 'cartflows-ca' ) ),
|
66 |
'delete' => sprintf( '<a onclick="return confirm(\'Are you sure to delete this order?\');" href="?page=%s&action=delete&id=%s">%s</a>', esc_html( $page ), esc_html( $item['id'] ), __( 'Delete', 'cartflows-ca' ) ),
|
67 |
);
|
68 |
|
72 |
}
|
73 |
|
74 |
return sprintf(
|
75 |
+
'<a href="%s"><span class="dashicons dashicons-admin-users"></span> %s %s %s </a>',
|
76 |
+
esc_url( $view_url ),
|
77 |
esc_html( $item_details['wcf_first_name'] ),
|
78 |
esc_html( $item_details['wcf_last_name'] ),
|
79 |
$this->row_actions( $actions )
|
80 |
);
|
81 |
}
|
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
/**
|
84 |
* Render date column
|
85 |
*
|
modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php
CHANGED
@@ -241,6 +241,8 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
241 |
define( 'WCF_ACTION_SETTINGS', 'settings' );
|
242 |
define( 'WCF_ACTION_REPORTS', 'reports' );
|
243 |
|
|
|
|
|
244 |
define( 'WCF_DEFAULT_CUT_OFF_TIME', 15 );
|
245 |
define( 'WCF_DEFAULT_COUPON_AMOUNT', 10 );
|
246 |
|
@@ -932,7 +934,7 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
932 |
|
933 |
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
934 |
|
935 |
-
if ( ! WCF_CA_PAGE_NAME === $page ) {
|
936 |
return;
|
937 |
}
|
938 |
|
@@ -1077,7 +1079,7 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1077 |
?>
|
1078 |
|
1079 |
|
1080 |
-
<
|
1081 |
|
1082 |
<?php
|
1083 |
$url = add_query_arg( array(
|
@@ -1127,7 +1129,7 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1127 |
<?php _e( 'Settings', 'cartflows-ca' ); ?>
|
1128 |
</a>
|
1129 |
|
1130 |
-
</
|
1131 |
<?php
|
1132 |
// phpcs:enable
|
1133 |
}
|
@@ -1210,7 +1212,25 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1210 |
global $woocommerce;
|
1211 |
$conversion_rate = number_format_i18n( $conversion_rate, 2 );
|
1212 |
$currency_symbol = get_woocommerce_currency_symbol();
|
1213 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1214 |
}
|
1215 |
|
1216 |
/**
|
@@ -1324,6 +1344,7 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1324 |
WC()->cart->add_to_cart( $random_product->ID );
|
1325 |
}
|
1326 |
}
|
|
|
1327 |
$email_data->cart_contents = serialize( WC()->cart->get_cart() );
|
1328 |
$email_data->time = current_time( WCF_CA_DATETIME_FORMAT );
|
1329 |
return $email_data;
|
@@ -1356,7 +1377,7 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1356 |
$user_last_name = ucfirst( $other_fields['wcf_last_name'] );
|
1357 |
$user_full_name = trim( $user_first_name . ' ' . $user_last_name );
|
1358 |
|
1359 |
-
$subject_email_preview = stripslashes( $email_data->email_subject );
|
1360 |
$subject_email_preview = convert_smilies( $subject_email_preview );
|
1361 |
$subject_email_preview = str_replace( '{{customer.firstname}}', $user_first_name, $subject_email_preview );
|
1362 |
$body_email_preview = convert_smilies( $email_data->email_body );
|
@@ -1403,7 +1424,7 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1403 |
$headers = 'From: ' . $from_email_name . ' <' . $from_email_preview . '>' . "\r\n";
|
1404 |
$headers .= 'Content-Type: text/html' . "\r\n";
|
1405 |
$headers .= 'Reply-To: ' . $reply_name_preview . ' ' . "\r\n";
|
1406 |
-
$var = $this->get_email_product_block( $email_data->cart_contents );
|
1407 |
|
1408 |
$body_email_preview = str_replace( '{{cart.product.table}}', $var, $body_email_preview );
|
1409 |
$mail_result = wp_mail( $email_data->email, $subject_email_preview, stripslashes( $body_email_preview ), $headers );
|
@@ -1455,41 +1476,126 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1455 |
* Generate the view for email product cart block.
|
1456 |
*
|
1457 |
* @param object $cart_contents user cart contents details.
|
|
|
1458 |
* @return string
|
1459 |
*/
|
1460 |
-
function get_email_product_block( $cart_contents ) {
|
1461 |
|
1462 |
$cart_items = unserialize( $cart_contents );
|
1463 |
$currency_symbol = get_woocommerce_currency_symbol();
|
1464 |
$tr = '';
|
1465 |
$total = 0;
|
|
|
|
|
|
|
|
|
1466 |
foreach ( $cart_items as $cart_item ) {
|
1467 |
|
1468 |
-
$
|
1469 |
-
$
|
1470 |
-
|
1471 |
-
|
1472 |
-
|
1473 |
-
|
1474 |
-
|
1475 |
-
|
|
|
|
|
|
|
1476 |
}
|
1477 |
|
1478 |
-
return '<
|
1479 |
-
|
1480 |
-
|
1481 |
-
|
1482 |
-
|
1483 |
-
|
1484 |
-
|
1485 |
-
|
1486 |
-
|
1487 |
-
|
1488 |
-
|
1489 |
-
|
1490 |
-
|
1491 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1492 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1493 |
}
|
1494 |
|
1495 |
/**
|
@@ -1634,6 +1740,23 @@ class Cartflows_Ca_Cart_Abandonment {
|
|
1634 |
}
|
1635 |
}
|
1636 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1637 |
}
|
1638 |
|
1639 |
Cartflows_Ca_Cart_Abandonment::get_instance();
|
241 |
define( 'WCF_ACTION_SETTINGS', 'settings' );
|
242 |
define( 'WCF_ACTION_REPORTS', 'reports' );
|
243 |
|
244 |
+
define( 'WCF_SUB_ACTION_REPORTS_VIEW', 'view' );
|
245 |
+
|
246 |
define( 'WCF_DEFAULT_CUT_OFF_TIME', 15 );
|
247 |
define( 'WCF_DEFAULT_COUPON_AMOUNT', 10 );
|
248 |
|
934 |
|
935 |
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
936 |
|
937 |
+
if ( ! ( WCF_CA_PAGE_NAME === $page ) ) {
|
938 |
return;
|
939 |
}
|
940 |
|
1079 |
?>
|
1080 |
|
1081 |
|
1082 |
+
<div class="nav-tab-wrapper woo-nav-tab-wrapper">
|
1083 |
|
1084 |
<?php
|
1085 |
$url = add_query_arg( array(
|
1129 |
<?php _e( 'Settings', 'cartflows-ca' ); ?>
|
1130 |
</a>
|
1131 |
|
1132 |
+
</div>
|
1133 |
<?php
|
1134 |
// phpcs:enable
|
1135 |
}
|
1212 |
global $woocommerce;
|
1213 |
$conversion_rate = number_format_i18n( $conversion_rate, 2 );
|
1214 |
$currency_symbol = get_woocommerce_currency_symbol();
|
1215 |
+
require_once CARTFLOWS_CART_ABANDONMENT_TRACKING_DIR . 'includes/admin/cartflows-cart-abandonment-reports.php';
|
1216 |
+
}
|
1217 |
+
|
1218 |
+
|
1219 |
+
/**
|
1220 |
+
* Show report details for specific order.
|
1221 |
+
*/
|
1222 |
+
function wcf_display_report_details() {
|
1223 |
+
|
1224 |
+
$sesson_id = filter_input( INPUT_GET, 'session_id', FILTER_SANITIZE_STRING );
|
1225 |
+
|
1226 |
+
if ( $sesson_id ) {
|
1227 |
+
$details = $this->get_checkout_details( $sesson_id );
|
1228 |
+
$user_details = (object) unserialize( $details->other_fields );
|
1229 |
+
$scheduled_emails = $this->fetch_scheduled_emails( $sesson_id );
|
1230 |
+
|
1231 |
+
require_once CARTFLOWS_CART_ABANDONMENT_TRACKING_DIR . 'includes/admin/cartflows-ca-single-report-details.php';
|
1232 |
+
}
|
1233 |
+
|
1234 |
}
|
1235 |
|
1236 |
/**
|
1344 |
WC()->cart->add_to_cart( $random_product->ID );
|
1345 |
}
|
1346 |
}
|
1347 |
+
$email_data->cart_total = WC()->cart->total + WC()->cart->get_cart_shipping_total();
|
1348 |
$email_data->cart_contents = serialize( WC()->cart->get_cart() );
|
1349 |
$email_data->time = current_time( WCF_CA_DATETIME_FORMAT );
|
1350 |
return $email_data;
|
1377 |
$user_last_name = ucfirst( $other_fields['wcf_last_name'] );
|
1378 |
$user_full_name = trim( $user_first_name . ' ' . $user_last_name );
|
1379 |
|
1380 |
+
$subject_email_preview = stripslashes( html_entity_decode( $email_data->email_subject, ENT_QUOTES ) );
|
1381 |
$subject_email_preview = convert_smilies( $subject_email_preview );
|
1382 |
$subject_email_preview = str_replace( '{{customer.firstname}}', $user_first_name, $subject_email_preview );
|
1383 |
$body_email_preview = convert_smilies( $email_data->email_body );
|
1424 |
$headers = 'From: ' . $from_email_name . ' <' . $from_email_preview . '>' . "\r\n";
|
1425 |
$headers .= 'Content-Type: text/html' . "\r\n";
|
1426 |
$headers .= 'Reply-To: ' . $reply_name_preview . ' ' . "\r\n";
|
1427 |
+
$var = $this->get_email_product_block( $email_data->cart_contents, $email_data->cart_total );
|
1428 |
|
1429 |
$body_email_preview = str_replace( '{{cart.product.table}}', $var, $body_email_preview );
|
1430 |
$mail_result = wp_mail( $email_data->email, $subject_email_preview, stripslashes( $body_email_preview ), $headers );
|
1476 |
* Generate the view for email product cart block.
|
1477 |
*
|
1478 |
* @param object $cart_contents user cart contents details.
|
1479 |
+
* @param float $cart_total user cart total.
|
1480 |
* @return string
|
1481 |
*/
|
1482 |
+
function get_email_product_block( $cart_contents, $cart_total ) {
|
1483 |
|
1484 |
$cart_items = unserialize( $cart_contents );
|
1485 |
$currency_symbol = get_woocommerce_currency_symbol();
|
1486 |
$tr = '';
|
1487 |
$total = 0;
|
1488 |
+
$discount = 0;
|
1489 |
+
$tax = 0;
|
1490 |
+
$style = 'style="color: #636363; border: 1px solid #e5e5e5; "';
|
1491 |
+
|
1492 |
foreach ( $cart_items as $cart_item ) {
|
1493 |
|
1494 |
+
$discount = number_format_i18n( $discount + ( $cart_item['line_subtotal'] - $cart_item['line_total'] ), 2 );
|
1495 |
+
$total = number_format_i18n( $total + $cart_item['line_subtotal'], 2 );
|
1496 |
+
$tax = number_format_i18n( $tax + $cart_item['line_tax'], 2 );
|
1497 |
+
|
1498 |
+
$tr = $tr . '<tr style="color: #636363; border: 1px solid #e5e5e5;" align="center">
|
1499 |
+
<td ' . $style . '><img class="demo_img" width="42" height="42" src=" ' . esc_url( get_the_post_thumbnail_url( $cart_item['product_id'] ) ) . ' "/></td>
|
1500 |
+
<td ' . $style . '>' . $cart_item['data']->get_title() . '</td>
|
1501 |
+
<td ' . $style . '> ' . $cart_item['quantity'] . ' </td>
|
1502 |
+
<td ' . $style . '>' . $currency_symbol . number_format_i18n( $cart_item['line_total'], 2 ) . '</td>
|
1503 |
+
<td ' . $style . ' >' . $currency_symbol . number_format_i18n( $cart_item['line_total'], 2 ) . '</td>
|
1504 |
+
</tr> ';
|
1505 |
}
|
1506 |
|
1507 |
+
return '<table align="left" cellpadding="10" cellspacing="0" style="float: none; border: 1px solid #e5e5e5;">
|
1508 |
+
<tr align="center">
|
1509 |
+
<th ' . $style . '>' . __( 'Item', 'cartflows-ca' ) . '</th>
|
1510 |
+
<th ' . $style . '>' . __( 'Name', 'cartflows-ca' ) . '</th>
|
1511 |
+
<th ' . $style . '>' . __( 'Quantity', 'cartflows-ca' ) . '</th>
|
1512 |
+
<th ' . $style . '>' . __( 'Price', 'cartflows-ca' ) . '</th>
|
1513 |
+
<th ' . $style . '>' . __( 'Line Subtotal', 'cartflows-ca' ) . '</th>
|
1514 |
+
</tr> ' . $tr . '
|
1515 |
+
|
1516 |
+
<tr align="center">
|
1517 |
+
<td colspan="4" ' . $style . '>' . __( 'Discount', 'cartflows-ca' ) . '</td>
|
1518 |
+
<td ' . $style . '>' . $currency_symbol . ( $discount ) . '</td>
|
1519 |
+
</tr>
|
1520 |
+
<tr align="center">
|
1521 |
+
<td colspan="4" ' . $style . '>' . __( 'Other', 'cartflows-ca' ) . '</td>
|
1522 |
+
<td ' . $style . '>' . $currency_symbol . ( $tax ) . '</td>
|
1523 |
+
</tr>
|
1524 |
+
|
1525 |
+
<tr align="center">
|
1526 |
+
<td colspan="4" ' . $style . '>' . __( 'Shipping', 'cartflows-ca' ) . '</td>
|
1527 |
+
<td ' . $style . '>' . $currency_symbol . number_format_i18n( $discount + ( $cart_total - $total ) - $tax, 2 ) . '</td>
|
1528 |
+
</tr>
|
1529 |
+
<tr align="center">
|
1530 |
+
<td colspan="4" ' . $style . '>' . __( 'Cart Total', 'cartflows-ca' ) . '</td>
|
1531 |
+
<td ' . $style . '>' . $currency_symbol . $cart_total . '</td>
|
1532 |
+
</tr>
|
1533 |
+
</table>';
|
1534 |
+
|
1535 |
+
}
|
1536 |
+
|
1537 |
+
/**
|
1538 |
+
* Generate the view for admin product cart block.
|
1539 |
+
*
|
1540 |
+
* @param object $cart_contents user cart contents details.
|
1541 |
+
* @param float $cart_total user cart total.
|
1542 |
+
* @return string
|
1543 |
+
*/
|
1544 |
+
function get_admin_product_block( $cart_contents, $cart_total ) {
|
1545 |
+
|
1546 |
+
$cart_items = unserialize( $cart_contents );
|
1547 |
+
$currency_symbol = get_woocommerce_currency_symbol();
|
1548 |
+
$tr = '';
|
1549 |
+
$total = 0;
|
1550 |
+
$discount = 0;
|
1551 |
+
$tax = 0;
|
1552 |
+
|
1553 |
+
foreach ( $cart_items as $cart_item ) {
|
1554 |
+
|
1555 |
+
$discount = number_format_i18n( $discount + ( $cart_item['line_subtotal'] - $cart_item['line_total'] ), 2 );
|
1556 |
+
$total = number_format_i18n( $total + $cart_item['line_subtotal'], 2 );
|
1557 |
+
$tax = number_format_i18n( $tax + $cart_item['line_tax'], 2 );
|
1558 |
+
|
1559 |
+
$tr = $tr . '<tr align="center">
|
1560 |
+
<td ><img class="demo_img" width="42" height="42" src=" ' . esc_url( get_the_post_thumbnail_url( $cart_item['product_id'] ) ) . ' "/></td>
|
1561 |
+
<td >' . $cart_item['data']->get_title() . '</td>
|
1562 |
+
<td > ' . $cart_item['quantity'] . ' </td>
|
1563 |
+
<td >' . $currency_symbol . number_format_i18n( $cart_item['line_total'], 2 ) . '</td>
|
1564 |
+
<td >' . $currency_symbol . number_format_i18n( $cart_item['line_total'], 2 ) . '</td>
|
1565 |
+
</tr> ';
|
1566 |
+
}
|
1567 |
|
1568 |
+
return '<table align="left" cellspacing="0" class="widefat fixed striped posts">
|
1569 |
+
<thead>
|
1570 |
+
<tr align="center">
|
1571 |
+
<th >' . __( 'Item', 'cartflows-ca' ) . '</th>
|
1572 |
+
<th >' . __( 'Name', 'cartflows-ca' ) . '</th>
|
1573 |
+
<th >' . __( 'Quantity', 'cartflows-ca' ) . '</th>
|
1574 |
+
<th >' . __( 'Price', 'cartflows-ca' ) . '</th>
|
1575 |
+
<th >' . __( 'Line Subtotal', 'cartflows-ca' ) . '</th>
|
1576 |
+
</tr>
|
1577 |
+
</thead>
|
1578 |
+
<tbody>
|
1579 |
+
' . $tr . '
|
1580 |
+
<tr align="center" id="wcf-ca-discount">
|
1581 |
+
<td colspan="4" >' . __( 'Discount', 'cartflows-ca' ) . '</td>
|
1582 |
+
<td>' . $currency_symbol . ( $discount ) . '</td>
|
1583 |
+
</tr>
|
1584 |
+
<tr align="center" id="wcf-ca-other">
|
1585 |
+
<td colspan="4" >' . __( 'Other', 'cartflows-ca' ) . '</td>
|
1586 |
+
<td>' . $currency_symbol . ( $tax ) . '</td>
|
1587 |
+
</tr>
|
1588 |
+
|
1589 |
+
<tr align="center" id="wcf-ca-shipping">
|
1590 |
+
<td colspan="4" >' . __( 'Shipping', 'cartflows-ca' ) . '</td>
|
1591 |
+
<td>' . $currency_symbol . number_format_i18n( $discount + ( $cart_total - $total ) - $tax, 2 ) . '</td>
|
1592 |
+
</tr>
|
1593 |
+
<tr align="center" id="wcf-ca-cart-total">
|
1594 |
+
<td colspan="4" >' . __( 'Cart Total', 'cartflows-ca' ) . '</td>
|
1595 |
+
<td>' . $currency_symbol . $cart_total . '</td>
|
1596 |
+
</tr>
|
1597 |
+
</tbody>
|
1598 |
+
</table>';
|
1599 |
}
|
1600 |
|
1601 |
/**
|
1740 |
}
|
1741 |
}
|
1742 |
|
1743 |
+
/**
|
1744 |
+
* Fetch all the scheduled emails with templates for the specific session.
|
1745 |
+
*
|
1746 |
+
* @param string $session_id session id.
|
1747 |
+
* @return array|object|null
|
1748 |
+
*/
|
1749 |
+
function fetch_scheduled_emails( $session_id ) {
|
1750 |
+
global $wpdb;
|
1751 |
+
$email_history_table = $wpdb->prefix . CARTFLOWS_CA_EMAIL_HISTORY_TABLE;
|
1752 |
+
$email_template_table = $wpdb->prefix . CARTFLOWS_CA_EMAIL_TEMPLATE_TABLE;
|
1753 |
+
|
1754 |
+
$result = $wpdb->get_results(
|
1755 |
+
$wpdb->prepare("SELECT * FROM $email_history_table as eht INNER JOIN $email_template_table as ett ON eht.template_id = ett.id WHERE ca_session_id = %s", sanitize_text_field($session_id)) // phpcs:ignore
|
1756 |
+
);
|
1757 |
+
return $result;
|
1758 |
+
}
|
1759 |
+
|
1760 |
}
|
1761 |
|
1762 |
Cartflows_Ca_Cart_Abandonment::get_instance();
|
modules/cart-abandonment/class-cartflows-ca-email-templates.php
CHANGED
@@ -83,7 +83,7 @@ class Cartflows_Ca_Email_Templates {
|
|
83 |
|
84 |
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
85 |
|
86 |
-
if ( ! WCF_CA_PAGE_NAME === $page ) {
|
87 |
return;
|
88 |
}
|
89 |
|
83 |
|
84 |
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
|
85 |
|
86 |
+
if ( ! ( WCF_CA_PAGE_NAME === $page ) ) {
|
87 |
return;
|
88 |
}
|
89 |
|
modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php
ADDED
@@ -0,0 +1,178 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cartflows view for single cart abandonment report details.
|
4 |
+
*
|
5 |
+
* @package Woocommerce-Cart-Abandonment-Recovery
|
6 |
+
*/
|
7 |
+
|
8 |
+
?>
|
9 |
+
|
10 |
+
|
11 |
+
<div class="wcf-ca-report-btn">
|
12 |
+
<div class="wcf-ca-left-report-field-group">
|
13 |
+
<?php
|
14 |
+
if ( wp_get_referer() ) {
|
15 |
+
$back_link = wp_get_referer();
|
16 |
+
} else {
|
17 |
+
$back_link = add_query_arg(
|
18 |
+
array(
|
19 |
+
'page' => WCF_CA_PAGE_NAME,
|
20 |
+
'action' => WCF_ACTION_REPORTS,
|
21 |
+
),
|
22 |
+
admin_url( '/admin.php' )
|
23 |
+
);
|
24 |
+
}
|
25 |
+
?>
|
26 |
+
<a href="<?php echo $back_link; ?>" class="button button-secondary back-button"><span
|
27 |
+
class="dashicons dashicons-arrow-left"></span> Back to Reports </a>
|
28 |
+
</div>
|
29 |
+
</div>
|
30 |
+
|
31 |
+
<!-- First panel Start -->
|
32 |
+
<div class="wcf-ca-panel">
|
33 |
+
<div class="wcf-ca-column wcf-ca-column-two">
|
34 |
+
<div class="wcf-ca-email-data">
|
35 |
+
|
36 |
+
<h2> <?php _e( 'Email Details:', 'cartflows-ca' ); ?> </h2>
|
37 |
+
<?php if ( empty( $scheduled_emails ) ) : ?>
|
38 |
+
<div style="text-align: center;"><strong> <?php _e( ' No Email Scheduled.', 'cartflows-ca' ); ?></strong>
|
39 |
+
</div>
|
40 |
+
<?php else : ?>
|
41 |
+
<table cellpadding="15" cellspacing="0" class="wcf-table wcf-table-striped fixed posts">
|
42 |
+
<thead>
|
43 |
+
<tr>
|
44 |
+
|
45 |
+
<th class="wcf-ca-report-table-row"> Scheduled Template</th>
|
46 |
+
<th class="wcf-ca-report-table-row"> Email Subject</th>
|
47 |
+
<th class="wcf-ca-report-table-row"> Email Coupon</th>
|
48 |
+
<th class="wcf-ca-report-table-row"> Email Sent</th>
|
49 |
+
<th class="wcf-ca-report-table-row"><span class="dashicons dashicons-clock"></span> Scheduled At
|
50 |
+
</th>
|
51 |
+
|
52 |
+
</tr>
|
53 |
+
</thead>
|
54 |
+
|
55 |
+
<tbody>
|
56 |
+
<?php foreach ( $scheduled_emails as $scheduled_email ) : ?>
|
57 |
+
|
58 |
+
<?php
|
59 |
+
$email_tmpl_url = wp_nonce_url(
|
60 |
+
add_query_arg(
|
61 |
+
array(
|
62 |
+
'page' => WCF_CA_PAGE_NAME,
|
63 |
+
'action' => WCF_ACTION_EMAIL_TEMPLATES,
|
64 |
+
'sub_action' => WCF_SUB_ACTION_EDIT_EMAIL_TEMPLATES,
|
65 |
+
'id' => $scheduled_email->template_id,
|
66 |
+
),
|
67 |
+
admin_url( '/admin.php' )
|
68 |
+
),
|
69 |
+
WCF_EMAIL_TEMPLATES_NONCE
|
70 |
+
);
|
71 |
+
|
72 |
+
if ( $details->unsubscribed && ! $scheduled_email->email_sent ) {
|
73 |
+
$icon = '<span class="dashicons dashicons-dismiss" title="" ></span>';
|
74 |
+
$title = __( 'The email has unsubscribed and won\'t be sent further.', 'cartflows-ca' );
|
75 |
+
} elseif ( $scheduled_email->email_sent ) {
|
76 |
+
$icon = '<span class="dashicons dashicons-yes wp-ui-text-highlight" ></span>';
|
77 |
+
$title = __( 'The email has been sent.', 'cartflows-ca' );
|
78 |
+
} else {
|
79 |
+
$icon = '<span class="dashicons dashicons-no" ></span>';
|
80 |
+
$title = __( 'Email is in the queue and will be sent at the scheduled time.', 'cartflows-ca' );
|
81 |
+
}
|
82 |
+
|
83 |
+
$scheduled_time = date( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), strtotime( $scheduled_email->scheduled_time ) );
|
84 |
+
?>
|
85 |
+
|
86 |
+
<tr class="wcf-ca-report-table-row">
|
87 |
+
<td class="wcf-ca-report-table-row"><a
|
88 |
+
href="<?php echo $email_tmpl_url; ?>"
|
89 |
+
class="wp-ui-text-highlight"> <?php echo( $scheduled_email->template_name ); ?> </a>
|
90 |
+
</td>
|
91 |
+
<td class="wcf-ca-report-table-row"> <?php echo( $scheduled_email->email_subject ); ?> </td>
|
92 |
+
<td class="wcf-ca-report-table-row"> <?php echo( $scheduled_email->coupon_code ? $scheduled_email->coupon_code : '--' ); ?> </td>
|
93 |
+
<td class="wcf-ca-report-table-row wcf-ca-icon-row"> <?php echo $icon; ?>
|
94 |
+
<span class="wcf-ca-tooltip-text"><?php echo $title; ?></span>
|
95 |
+
</td>
|
96 |
+
<td class="wcf-ca-report-table-row"> <?php echo( $scheduled_time ); ?> </td>
|
97 |
+
</tr>
|
98 |
+
<?php endforeach; ?>
|
99 |
+
</tbody>
|
100 |
+
</table>
|
101 |
+
<?php endif; ?>
|
102 |
+
|
103 |
+
</div>
|
104 |
+
</div>
|
105 |
+
|
106 |
+
<div class="wcf-ca-column wcf-ca-column-two">
|
107 |
+
<div class="wcf-ca-user-detail ">
|
108 |
+
<h2> <?php _e( 'User Address Details:', 'cartflows-ca' ); ?> </h2>
|
109 |
+
|
110 |
+
<div class="wcf-ca-user-address wcf-pull-left">
|
111 |
+
<h3> <?php _e( 'Billing Address', 'cartflows-ca' ); ?> </h3>
|
112 |
+
<p><strong> <?php _e( 'Name', 'cartflows-ca' ); ?> </strong>
|
113 |
+
<?php echo $user_details->wcf_first_name . ' ' . $user_details->wcf_last_name; ?> </p>
|
114 |
+
<p>
|
115 |
+
<strong> <?php _e( 'Email address', 'cartflows-ca' ); ?> </strong>
|
116 |
+
<a href="mailto:<?php echo( $details->email ); ?>"><?php echo( $details->email ); ?></a>
|
117 |
+
</p>
|
118 |
+
|
119 |
+
<p>
|
120 |
+
<strong> <?php _e( 'Phone', 'cartflows-ca' ); ?> </strong>
|
121 |
+
<a href="tel:<?php echo( $user_details->wcf_phone_number ); ?>"><?php echo( $user_details->wcf_phone_number ); ?></a>
|
122 |
+
</p>
|
123 |
+
|
124 |
+
<p>
|
125 |
+
<strong> <?php _e( 'Address 1:', 'cartflows-ca' ); ?> </strong> <?php echo $user_details->wcf_billing_address_1; ?>
|
126 |
+
</p>
|
127 |
+
<p>
|
128 |
+
<strong> <?php _e( 'Address 2:', 'cartflows-ca' ); ?> </strong> <?php echo $user_details->wcf_billing_address_2; ?>
|
129 |
+
</p>
|
130 |
+
<p>
|
131 |
+
<strong> <?php _e( 'Country, City:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_location ); ?>
|
132 |
+
</p>
|
133 |
+
<p>
|
134 |
+
<strong> <?php _e( 'State:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_billing_state ); ?>
|
135 |
+
</p>
|
136 |
+
|
137 |
+
<p>
|
138 |
+
<strong> <?php _e( 'Postcode:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_billing_postcode ); ?>
|
139 |
+
</p>
|
140 |
+
</div>
|
141 |
+
|
142 |
+
<div class="wcf-ca-user-address wcf-pull-left">
|
143 |
+
<h3> <?php _e( 'Shipping Address', 'cartflows-ca' ); ?> </h3>
|
144 |
+
<p>
|
145 |
+
<strong> <?php _e( 'Address 1:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_address_1 ); ?>
|
146 |
+
</p>
|
147 |
+
<p>
|
148 |
+
<strong> <?php _e( 'Address 2:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_address_2 ); ?>
|
149 |
+
</p>
|
150 |
+
<p>
|
151 |
+
<strong> <?php _e( 'City:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_city ); ?>
|
152 |
+
</p>
|
153 |
+
<p>
|
154 |
+
<strong> <?php _e( 'State:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_state ); ?>
|
155 |
+
</p>
|
156 |
+
<p>
|
157 |
+
<strong> <?php _e( 'Country:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_country ); ?>
|
158 |
+
</p>
|
159 |
+
<p>
|
160 |
+
<strong> <?php _e( 'Postcode:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_postcode ); ?>
|
161 |
+
</p>
|
162 |
+
</div>
|
163 |
+
|
164 |
+
</div>
|
165 |
+
</div>
|
166 |
+
</div>
|
167 |
+
<!-- First panel closed -->
|
168 |
+
|
169 |
+
<!-- Second panel Start -->
|
170 |
+
<div class="wcf-ca-panel">
|
171 |
+
<div class="wcf-ca-column wcf-ca-column-one">
|
172 |
+
<div class="wcf-ca-user-order">
|
173 |
+
<h2> <?php _e( 'User Order Details:', 'cartflows-ca' ); ?> </h2>
|
174 |
+
<?php echo( $this->get_admin_product_block( $details->cart_contents, $details->cart_total ) ); ?>
|
175 |
+
</div>
|
176 |
+
</div>
|
177 |
+
</div>
|
178 |
+
<!-- Second panel closed -->
|
modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-tabs.php
CHANGED
@@ -13,6 +13,7 @@
|
|
13 |
$action = filter_input( INPUT_GET, 'action', FILTER_SANITIZE_STRING );
|
14 |
$sub_action = filter_input( INPUT_GET, 'sub_action', FILTER_SANITIZE_STRING );
|
15 |
|
|
|
16 |
if ( ! $action ) {
|
17 |
$action = WCF_ACTION_REPORTS;
|
18 |
}
|
@@ -31,7 +32,22 @@
|
|
31 |
<?php endif; ?>
|
32 |
|
33 |
<?php if ( WCF_ACTION_REPORTS === $action ) : ?>
|
34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
<?php endif; ?>
|
36 |
|
37 |
<?php if ( WCF_ACTION_EMAIL_TEMPLATES === $action ) : ?>
|
13 |
$action = filter_input( INPUT_GET, 'action', FILTER_SANITIZE_STRING );
|
14 |
$sub_action = filter_input( INPUT_GET, 'sub_action', FILTER_SANITIZE_STRING );
|
15 |
|
16 |
+
|
17 |
if ( ! $action ) {
|
18 |
$action = WCF_ACTION_REPORTS;
|
19 |
}
|
32 |
<?php endif; ?>
|
33 |
|
34 |
<?php if ( WCF_ACTION_REPORTS === $action ) : ?>
|
35 |
+
|
36 |
+
<?php
|
37 |
+
|
38 |
+
switch ( $sub_action ) {
|
39 |
+
|
40 |
+
case WCF_SUB_ACTION_REPORTS_VIEW:
|
41 |
+
$this->wcf_display_report_details();
|
42 |
+
break;
|
43 |
+
default:
|
44 |
+
$this->wcf_display_reports();
|
45 |
+
break;
|
46 |
+
|
47 |
+
}
|
48 |
+
|
49 |
+
?>
|
50 |
+
|
51 |
<?php endif; ?>
|
52 |
|
53 |
<?php if ( WCF_ACTION_EMAIL_TEMPLATES === $action ) : ?>
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.me/BrainstormForce
|
|
4 |
Tags: woocommerce, cart abandonment, cart recovery
|
5 |
Requires at least: 4.4
|
6 |
Tested up to: 5.2
|
7 |
-
Stable tag: 1.
|
8 |
Requires PHP: 5.6
|
9 |
License: GPLv2 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
@@ -30,6 +30,9 @@ Yes, of course. We have built it in a way that it will work with CartFlows as we
|
|
30 |
|
31 |
== Changelog ==
|
32 |
|
|
|
|
|
|
|
33 |
= Version 1.0.0 - Monday, 27th May 2019 =
|
34 |
* Initial Release
|
35 |
|
4 |
Tags: woocommerce, cart abandonment, cart recovery
|
5 |
Requires at least: 4.4
|
6 |
Tested up to: 5.2
|
7 |
+
Stable tag: 1.1.0
|
8 |
Requires PHP: 5.6
|
9 |
License: GPLv2 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
30 |
|
31 |
== Changelog ==
|
32 |
|
33 |
+
= Version 1.1.0 - Thursday, 30th May 2019 =
|
34 |
+
* Added a view for admin to check email status specific to the particular abandoned user.
|
35 |
+
|
36 |
= Version 1.0.0 - Monday, 27th May 2019 =
|
37 |
* Initial Release
|
38 |
|
woo-cart-abandonment-recovery.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: WooCommerce Cart Abandonment Recovery
|
4 |
* Plugin URI: https://cartflows.com/
|
5 |
* Description: Recover your lost revenue. Capture email address of users on the checkout page and send follow up emails if they don't complete the purchase.
|
6 |
-
* Version: 1.
|
7 |
* Author: CartFlows Inc
|
8 |
* Author URI: https://cartflows.com/
|
9 |
* Text Domain: cartflows-ca
|
3 |
* Plugin Name: WooCommerce Cart Abandonment Recovery
|
4 |
* Plugin URI: https://cartflows.com/
|
5 |
* Description: Recover your lost revenue. Capture email address of users on the checkout page and send follow up emails if they don't complete the purchase.
|
6 |
+
* Version: 1.1.0
|
7 |
* Author: CartFlows Inc
|
8 |
* Author URI: https://cartflows.com/
|
9 |
* Text Domain: cartflows-ca
|