Version Notes
Grouped product fixes.
Permissions updated to allow access to admin pages for specific roles.
Download this release
Release Info
Developer | Magento Core Team |
Extension | EmailDirect_Integration |
Version | 2.0.15 |
Comparing to | |
See all releases |
Code changes from version 2.0.14 to 2.0.15
- app/code/community/EmailDirect/Integration/Helper/Data.php +4 -0
- app/code/community/EmailDirect/Integration/Helper/Order.php +658 -657
- app/code/community/EmailDirect/Integration/Model/Resource/Setup.php +1 -1
- app/code/community/EmailDirect/Integration/controllers/Admin/AbandonedController.php +73 -68
- app/code/community/EmailDirect/Integration/controllers/Admin/DiagnosticController.php +157 -152
- app/code/community/EmailDirect/Integration/controllers/Admin/ExportController.php +69 -64
- app/code/community/EmailDirect/Integration/controllers/Admin/TroubleshootingController.php +5 -0
- app/code/community/EmailDirect/Integration/etc/adminhtml.xml +20 -0
- app/code/community/EmailDirect/Integration/etc/config.xml +1 -1
- package.xml +7 -5
app/code/community/EmailDirect/Integration/Helper/Data.php
CHANGED
@@ -112,6 +112,10 @@ class EmailDirect_Integration_Helper_Data extends Mage_Core_Helper_Abstract
|
|
112 |
|
113 |
protected function getProduct($item)
|
114 |
{
|
|
|
|
|
|
|
|
|
115 |
$product_id = $item->getProductId();
|
116 |
|
117 |
if (!$product_id)
|
112 |
|
113 |
protected function getProduct($item)
|
114 |
{
|
115 |
+
if (get_class($item) == "Varien_Object") {
|
116 |
+
return $item->getProduct();
|
117 |
+
}
|
118 |
+
|
119 |
$product_id = $item->getProductId();
|
120 |
|
121 |
if (!$product_id)
|
app/code/community/EmailDirect/Integration/Helper/Order.php
CHANGED
@@ -2,699 +2,700 @@
|
|
2 |
|
3 |
class EmailDirect_Integration_Helper_Order extends EmailDirect_Integration_Helper_Data
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
|
18 |
-
|
19 |
-
|
20 |
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
|
25 |
-
|
26 |
-
|
27 |
|
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 |
-
|
54 |
-
|
55 |
|
56 |
-
|
57 |
|
58 |
-
|
59 |
|
60 |
-
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
62 |
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
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 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
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 |
-
|
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 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
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 |
-
$this->debug("getRelatedCollection Start");
|
308 |
-
$collection = Mage::getModel('catalog/product_link')
|
309 |
-
->useRelatedLinks()
|
310 |
->getCollection()
|
311 |
->addFieldToFilter('product_id', array('in' => $id_list))
|
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 |
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
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 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
{
|
683 |
-
|
684 |
|
685 |
-
|
686 |
-
|
687 |
|
688 |
$merge_vars = $this->addMergeItem($item, $count, $merge_vars, $prefix);
|
689 |
}
|
690 |
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
|
698 |
-
|
699 |
-
|
700 |
}
|
2 |
|
3 |
class EmailDirect_Integration_Helper_Order extends EmailDirect_Integration_Helper_Data
|
4 |
{
|
5 |
+
protected function getTrackingData($order)
|
6 |
+
{
|
7 |
+
$shipmentCollection = Mage::getResourceModel('sales/order_shipment_collection')
|
8 |
+
->setOrderFilter($order)
|
9 |
+
->load();
|
10 |
+
foreach($shipmentCollection as $_shipment)
|
11 |
+
{
|
12 |
+
foreach($_shipment->getAllTracks() as $tracknum)
|
13 |
+
{
|
14 |
+
return $tracknum->getData();
|
15 |
+
}
|
16 |
+
}
|
17 |
|
18 |
+
return null;
|
19 |
+
}
|
20 |
|
21 |
+
public function getTrackingMergeVars($track, $order)
|
22 |
+
{
|
23 |
+
$this->_logger->log('getTrackingMergeVars Start');
|
24 |
|
25 |
+
$merge_vars = array();
|
26 |
+
$maps = unserialize($this->config('shipping_fields', $order->getStoreId()));
|
27 |
|
28 |
+
if (!$maps)
|
29 |
+
return null;
|
30 |
|
31 |
+
$this->_logger->log($maps, "Maps");
|
32 |
|
33 |
+
$this->_logger->log($track->getData(), "Tracking Data");
|
34 |
|
35 |
+
$this->processMap($merge_vars, $maps, $track);
|
36 |
|
37 |
+
return $merge_vars;
|
38 |
+
}
|
39 |
|
40 |
+
protected function getShippingData($order)
|
41 |
+
{
|
42 |
+
$data = array();
|
43 |
|
44 |
+
$data['shipping_code'] = $order->getData('shipping_method');
|
45 |
+
$data['shipping_description'] = $order->getData('shipping_description');
|
46 |
|
47 |
+
$track_data = $this->getTrackingData($order);
|
48 |
|
49 |
+
if ($track_data != null)
|
50 |
+
{
|
51 |
+
$data['carrier_code'] = $track_data['carrier_code'];
|
52 |
+
$data['title'] = $track_data['title'];
|
53 |
+
$data['number'] = $track_data['number'];
|
54 |
+
}
|
55 |
|
56 |
+
$shipping_data = new Varien_Object();
|
57 |
|
58 |
+
$shipping_data->setData($data);
|
59 |
|
60 |
+
return $shipping_data;
|
61 |
+
}
|
62 |
+
|
63 |
+
protected function getOrderMergeVars(&$merge_vars, $order)
|
64 |
+
{
|
65 |
+
$this->_logger->logAndDebug('getOrderMergeVars (Tracking Data)');
|
66 |
+
$maps = unserialize( $this->config('shipping_fields', $order->getStoreId()) );
|
67 |
|
68 |
+
if ($maps)
|
69 |
+
{
|
70 |
+
$this->_logger->log($maps, "Maps");
|
71 |
+
$shipping_data = $this->getShippingData($order);
|
72 |
+
|
73 |
+
$this->_logger->log($shipping_data,'Shipping Data');
|
74 |
+
|
75 |
+
$this->processMap($merge_vars, $maps, $shipping_data);
|
76 |
+
}
|
77 |
+
else
|
78 |
+
$this->debug('No Mappings Found');
|
79 |
+
|
80 |
+
return $merge_vars;
|
81 |
+
}
|
82 |
+
|
83 |
+
public function getOrderCustomer($order)
|
84 |
+
{
|
85 |
+
$customer = null;
|
86 |
+
|
87 |
+
if ($order->getData('customer_is_guest')) {
|
88 |
+
$this->_logger->log("Guest Customer");
|
89 |
+
|
90 |
+
$customer = new Varien_Object;
|
91 |
+
|
92 |
+
$customer->setData('email',$order->getCustomerEmail());
|
93 |
+
$customer->setData('firstname',$order->getData('customer_firstname'));
|
94 |
+
$customer->setData('lastname',$order->getData('customer_lastname'));
|
95 |
+
$customer->setData('store_id',$order->getStoreId());
|
96 |
+
|
97 |
+
$customer->setBillingAddress($order->getBillingAddress());
|
98 |
+
} else {
|
99 |
+
$customer = Mage::getModel('customer/customer')->load($order->getCustomerId());
|
100 |
+
$address = Mage::getModel('customer/address')->load($customer->getDefaultBilling());
|
101 |
+
$customer->setBillingAddress($address);
|
102 |
+
}
|
103 |
+
|
104 |
+
return $customer;
|
105 |
+
}
|
106 |
+
|
107 |
+
public function processOrderItems($order, &$merge_vars)
|
108 |
+
{
|
109 |
+
$this->debugHeader("processOrderItems Start",1);
|
110 |
+
|
111 |
+
$merge_vars = $this->getOrderMergeVars($merge_vars,$order);
|
112 |
+
|
113 |
+
$this->_logger->logAndDebug("Check Save Lastest");
|
114 |
+
if ($this->config('save_latest_order'))
|
115 |
+
{
|
116 |
+
$this->_logger->logAndDebug("Adding Latest Order Information");
|
117 |
+
$merge_vars['LastOrderNumber'] = $order->getIncrementId();
|
118 |
+
$merge_vars['LastPurchaseDate'] = $order->getData('created_at');
|
119 |
+
$merge_vars['LastPurchaseTotal'] = Mage::helper('core')->currency($order->getData('total_paid'), true, false);
|
120 |
+
|
121 |
+
$merge_vars = $this->getMergeOrderItems($order, $merge_vars);
|
122 |
+
$merge_vars = $this->getRelatedOrderItems($order, $merge_vars);
|
123 |
+
$this->_logger->logAndDebug("Finish Save Latest");
|
124 |
+
}
|
125 |
+
else
|
126 |
+
$this->_logger->logAndDebug("Not setup to send latest order info");
|
127 |
+
|
128 |
+
return $merge_vars;
|
129 |
+
}
|
130 |
+
|
131 |
+
protected function getParentOptions($parent_product,$product_id)
|
132 |
+
{
|
133 |
+
$parent_options = $this->getConfigurableOptions($parent_product,$product_id);
|
134 |
+
|
135 |
+
if (count($parent_options) == 0)
|
136 |
+
return "";
|
137 |
+
|
138 |
+
$options = "";
|
139 |
+
|
140 |
+
foreach ($parent_options as $key => $value)
|
141 |
+
{
|
142 |
+
if ($options == "")
|
143 |
+
$options .= "#";
|
144 |
+
else
|
145 |
+
$options .= "&";
|
146 |
+
|
147 |
+
$options .= "{$key}={$value}";
|
148 |
+
}
|
149 |
+
|
150 |
+
return $options;
|
151 |
+
}
|
152 |
+
|
153 |
+
protected function getGroupedPrice($grouped_product)
|
154 |
+
{
|
155 |
+
// This is used when a grouped product is related. We get the minimum price of associated products
|
156 |
+
// otherwise we have no value to show
|
157 |
+
$min = 0;
|
158 |
+
$products = $grouped_product->getTypeInstance()->getAssociatedProducts();
|
159 |
+
foreach ($products as $product)
|
160 |
+
{
|
161 |
+
if ($min == 0)
|
162 |
+
$min = $product->getPrice();
|
163 |
+
|
164 |
+
$min = min($min, $product->getPrice());
|
165 |
+
}
|
166 |
+
|
167 |
+
return $min;
|
168 |
+
}
|
169 |
+
|
170 |
+
protected function getProductImage($product, $parent_product = null)
|
171 |
+
{
|
172 |
+
try
|
173 |
+
{
|
174 |
+
$image = "";
|
175 |
+
if ($product->getImage() == 'no_selection' || $product->getImage() == "")
|
176 |
+
{
|
177 |
+
if ($parent_product != null && $parent_product->getImage() != "no_selection" && $parent_product->getImage() != "")
|
178 |
+
$image = Mage::getModel('catalog/product_media_config')->getMediaUrl($parent_product->getImage());
|
179 |
+
}
|
180 |
+
else
|
181 |
+
$image = Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getImage());
|
182 |
+
}
|
183 |
+
catch (Exception $e)
|
184 |
+
{
|
185 |
+
Mage::logException($e);
|
186 |
+
$this->_logger->logException($e);
|
187 |
+
}
|
188 |
+
|
189 |
+
return $image;
|
190 |
+
}
|
191 |
+
|
192 |
+
private function addMergeItem($item_data, $pos, $merge_vars, $prefix = "")
|
193 |
+
{
|
194 |
+
$name = "";
|
195 |
+
$parent_name = "";
|
196 |
+
$sku = "";
|
197 |
+
$url = "";
|
198 |
+
$image = "";
|
199 |
+
$cost = "";
|
200 |
+
$description = "";
|
201 |
+
$parent_item = null;
|
202 |
+
$parent_product = null;
|
203 |
+
|
204 |
+
$this->debug("--------------------------");
|
205 |
+
$this->debug("ADDING MERGE ITEM");
|
206 |
+
|
207 |
+
if ($item_data != null)
|
208 |
+
{
|
209 |
+
$product_id = 0;
|
210 |
+
|
211 |
+
if (is_array($item_data))
|
212 |
+
{
|
213 |
+
$item = $item_data['item'];
|
214 |
+
|
215 |
+
if (isset($item_data['parent']))
|
216 |
+
{
|
217 |
+
$parent_item = $item_data['parent'];
|
218 |
+
$this->debug("Parent Item:");
|
219 |
+
$this->debug($parent_item);
|
220 |
+
}
|
221 |
+
}
|
222 |
+
else
|
223 |
+
$item = $item_data;
|
224 |
+
|
225 |
+
$this->debug("Item:");
|
226 |
+
$this->debug($item);
|
227 |
+
|
228 |
+
if (is_string($item))
|
229 |
+
{
|
230 |
+
$product_id = $item;
|
231 |
+
|
232 |
+
$product = Mage::getModel('catalog/product')->load($product_id);
|
233 |
+
|
234 |
+
if ($product == null || !$product->getId())
|
235 |
+
return $merge_vars;
|
236 |
+
}
|
237 |
+
else
|
238 |
+
{
|
239 |
+
$product = $this->getProduct($item);
|
240 |
+
if ($product == null)
|
241 |
+
return $merge_vars; // Can't get product so abort
|
242 |
+
}
|
243 |
+
|
244 |
+
$this->debug("Product:");
|
245 |
+
$this->debug($product);
|
246 |
+
|
247 |
+
if ($parent_item != null)
|
248 |
+
{
|
249 |
+
$parent_product = $this->getProduct($parent_item);
|
250 |
+
if ($parent_product == null) {
|
251 |
+
return $merge_vars; // Can't get product so abort
|
252 |
+
}
|
253 |
+
|
254 |
+
$this->debug("Parent Product:");
|
255 |
+
$this->debug($parent_product);
|
256 |
+
|
257 |
+
$parent_name = $parent_product->getName();
|
258 |
+
$url = $parent_product->getProductUrl();
|
259 |
+
|
260 |
+
if ($parent_product->getTypeId() == 'configurable')
|
261 |
+
$url .= $this->getParentOptions($parent_product,$product_id);
|
262 |
+
} else {
|
263 |
+
$url = $product->getProductUrl();
|
264 |
+
}
|
265 |
+
|
266 |
+
$name = $product->getName();
|
267 |
+
$sku = $product->getSku();
|
268 |
+
|
269 |
+
$image = $this->getProductImage($product, $parent_product);
|
270 |
+
|
271 |
+
if (is_string($item))
|
272 |
+
{
|
273 |
+
$this->debug('String Item (Related)');
|
274 |
+
if ($product->getTypeId() == 'grouped')
|
275 |
+
$cost = $this->getGroupedPrice($product);
|
276 |
+
else
|
277 |
+
$cost = $product->getPrice();
|
278 |
+
}
|
279 |
+
else
|
280 |
+
{
|
281 |
+
if ($parent_item != null && get_class($parent_item) != 'Varien_Object' ) {
|
282 |
+
$cost = $parent_item->getPrice();
|
283 |
+
} else {
|
284 |
+
$cost = $item->getPrice();
|
285 |
+
}
|
286 |
+
}
|
287 |
+
|
288 |
+
$cost = Mage::helper('core')->currency($cost,true,false);
|
289 |
+
$description = $product->getShortDescription();
|
290 |
+
}
|
291 |
+
|
292 |
+
$merge_vars["{$prefix}ProductName{$pos}"] = $name;
|
293 |
+
if ($prefix != 'Related')
|
294 |
+
$merge_vars["{$prefix}ParentName{$pos}"] = $parent_name;
|
295 |
+
|
296 |
+
$merge_vars["{$prefix}SKU{$pos}"] = $sku;
|
297 |
+
$merge_vars["{$prefix}URL{$pos}"] = $url;
|
298 |
+
$merge_vars["{$prefix}Image{$pos}"] = $image;
|
299 |
+
|
300 |
+
$merge_vars["{$prefix}Cost{$pos}"] = $cost;
|
301 |
+
$merge_vars["{$prefix}Description{$pos}"] = $description;
|
302 |
+
|
303 |
+
return $merge_vars;
|
304 |
+
}
|
305 |
+
|
306 |
+
protected function getRelatedCollection($id_list, $max_count, $grouped_id_list = null)
|
307 |
+
{
|
308 |
+
$this->debug("getRelatedCollection Start");
|
309 |
+
$collection = Mage::getModel('catalog/product_link')
|
310 |
+
->useRelatedLinks()
|
|
|
|
|
|
|
|
|
311 |
->getCollection()
|
312 |
->addFieldToFilter('product_id', array('in' => $id_list))
|
313 |
;
|
314 |
|
315 |
+
$this->debug("Collection SQL");
|
316 |
+
$this->debug($collection->getSelect()->__toString());
|
317 |
+
|
318 |
+
// Filter out grouped products from the related list
|
319 |
+
if ($grouped_id_list != null && count($grouped_id_list) > 0)
|
320 |
+
{
|
321 |
+
$this->debug("Merging Grouped ID's to filter");
|
322 |
+
$id_list = array_merge($id_list,$grouped_id_list);
|
323 |
+
|
324 |
+
}
|
325 |
+
|
326 |
+
$this->debug("ID Filters");
|
327 |
+
$this->debug($id_list);
|
328 |
+
|
329 |
+
$product_ids = array();
|
330 |
+
|
331 |
+
// If any of the related products are already in the order we filter them out
|
332 |
+
foreach ($collection as $rp)
|
333 |
+
{
|
334 |
+
$this->debug("");
|
335 |
+
$this->debug("-----------------------------");
|
336 |
+
$this->debug("Related Product");
|
337 |
+
$this->debug($rp->getData());
|
338 |
+
$lp_id = $rp['linked_product_id'];
|
339 |
+
if (!in_array($lp_id,$id_list))
|
340 |
+
{
|
341 |
+
$this->debug("Adding Related Product");
|
342 |
+
$product_ids[] = $lp_id;
|
343 |
+
}
|
344 |
+
else
|
345 |
+
$this->debug("Related product already in order");
|
346 |
+
}
|
347 |
+
|
348 |
+
$this->debug("Product IDs");
|
349 |
+
$this->debug($product_ids);
|
350 |
+
|
351 |
+
$related = Mage::getResourceModel('catalog/product_collection')
|
352 |
+
->addFieldToFilter('entity_id', array('in' => $product_ids))
|
353 |
+
->setPageSize($max_count);
|
354 |
+
|
355 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($related);
|
356 |
+
|
357 |
+
$this->debug("Related SQL");
|
358 |
+
$this->debug($related->getSelect()->__toString());
|
359 |
+
|
360 |
+
$related_list = array();
|
361 |
+
|
362 |
+
if (count($related) > 0)
|
363 |
+
{
|
364 |
+
foreach ($related as $rp)
|
365 |
+
{
|
366 |
+
$related_list[] = $rp;
|
367 |
+
}
|
368 |
+
}
|
369 |
+
|
370 |
+
return $related_list;
|
371 |
+
}
|
372 |
+
|
373 |
+
protected function getRelatedProducts($quote)
|
374 |
+
{
|
375 |
+
$id_list = array();
|
376 |
+
$grouped_id_list = array();
|
377 |
+
$filter_id_list = array();
|
378 |
+
|
379 |
+
foreach ($quote->getAllItems() as $item)
|
380 |
{
|
381 |
+
$this->debug("");
|
382 |
+
$this->debug("----------------------------------------------------------");
|
383 |
+
$type = $item->getProductType();
|
384 |
+
$this->debug("Item ID: {$item->getId()}");
|
385 |
+
$this->debug("Item Sku: {$item->getSku()}");
|
386 |
+
$this->debug("Item Type: {$type}");
|
387 |
+
|
388 |
+
// if it is a grouped product get the parent ID and add it to the list (if not already added)
|
389 |
+
if ($type == 'grouped')
|
390 |
+
{
|
391 |
+
$grouped_product_id = $this->getGroupedProductId($item);
|
392 |
+
|
393 |
+
$this->debug("Grouped Product ID: {$grouped_product_id}");
|
394 |
+
|
395 |
+
if (!in_array($grouped_product_id, $grouped_id_list))
|
396 |
+
$grouped_id_list[] = $grouped_product_id;
|
397 |
+
}
|
398 |
+
|
399 |
+
if ($product = $this->getProduct($item))
|
400 |
+
{
|
401 |
+
$product_id = $product->getId();
|
402 |
+
if (!in_array($product_id, $id_list))
|
403 |
+
$id_list[] = $product_id;
|
404 |
+
}
|
405 |
}
|
406 |
|
407 |
+
$this->debug("ID List");
|
408 |
+
$this->debug($id_list);
|
409 |
+
$this->debug("Grouped ID List");
|
410 |
+
$this->debug($grouped_id_list);
|
411 |
|
412 |
+
$max_count = $this->config('related_fields');
|
413 |
+
|
414 |
+
$this->debug("Max Related: {$max_count}");
|
415 |
+
|
416 |
+
$this->debug("");
|
417 |
+
$this->debug("--------------------------------------------------------------------------");
|
418 |
+
$this->debug("Get Related Collection (Non Grouped)");
|
419 |
+
$this->debug("");
|
420 |
+
|
421 |
+
$related = $this->getRelatedCollection($id_list, $max_count, $grouped_id_list);
|
422 |
+
|
423 |
+
$this->debug("");
|
424 |
+
$this->debug("# of Related Products Found: " . count($related));
|
425 |
+
|
426 |
+
if (count($related) < $max_count && count($grouped_id_list) > 0)
|
427 |
+
{
|
428 |
+
$this->debug("");
|
429 |
+
$this->debug("--------------------------------------------------------------------------");
|
430 |
+
$this->debug("Get Related Collection (Grouped)");
|
431 |
+
$this->debug("");
|
432 |
+
|
433 |
+
// get grouped related
|
434 |
+
$grouped_related = $this->getRelatedCollection($grouped_id_list, $max_count - count($related), $id_list);
|
435 |
+
|
436 |
+
// Merge the collections
|
437 |
+
if (count($grouped_related) > 0)
|
438 |
+
return array_merge($related, $grouped_related);
|
439 |
+
}
|
440 |
|
441 |
+
return $related;
|
442 |
+
}
|
443 |
|
444 |
+
public function getRelatedOrderItems($quote, $merge_vars)
|
445 |
+
{
|
446 |
+
$prefix = "Related";
|
447 |
+
$max_count = $this->config('related_fields');
|
448 |
|
449 |
+
$this->debug('');
|
450 |
+
$this->debug('Getting Related Products');
|
451 |
|
452 |
+
$related_products = $this->getRelatedProducts($quote);
|
453 |
|
454 |
+
$count = 0;
|
455 |
|
456 |
+
foreach ($related_products as $rp)
|
457 |
+
{
|
458 |
+
$count++;
|
459 |
|
460 |
+
if ($count > $max_count)
|
461 |
+
break;
|
462 |
+
|
463 |
+
$merge_vars = $this->addMergeItem($rp->getId(), $count, $merge_vars, $prefix);
|
464 |
+
}
|
465 |
+
|
466 |
+
while ($count < $max_count)
|
467 |
+
{
|
468 |
+
$count++;
|
469 |
+
$merge_vars = $this->addMergeItem(null, $count, $merge_vars, $prefix);
|
470 |
+
}
|
471 |
+
|
472 |
+
return $merge_vars;
|
473 |
+
}
|
474 |
+
|
475 |
+
protected function getGroupedProductId($item)
|
476 |
+
{
|
477 |
+
$this->debug('Get Grouped Product Id');
|
478 |
+
$options = $item->getProductOptions();
|
479 |
+
|
480 |
+
$this->debug('Product Options');
|
481 |
+
$this->debug($options);
|
482 |
+
|
483 |
+
if (isset($options['super_product_config']))
|
484 |
+
{
|
485 |
+
$this->debug('Super config found');
|
486 |
+
if (isset($options['super_product_config']['product_id']))
|
487 |
+
{
|
488 |
+
$this->debug('Product Id Found');
|
489 |
+
$product_id = $options['super_product_config']['product_id'];
|
490 |
+
|
491 |
+
return $product_id;
|
492 |
+
}
|
493 |
+
$this->debug('Product Id Not Found!');
|
494 |
+
}
|
495 |
+
else
|
496 |
+
{
|
497 |
+
$this->debug('Get Option By Code');
|
498 |
+
$option = $item->getOptionByCode('product_type');
|
499 |
+
if ($option)
|
500 |
+
{
|
501 |
+
$this->debug('Option Found');
|
502 |
+
$this->debug($option);
|
503 |
+
return $option->getProductId();
|
504 |
+
}
|
505 |
+
}
|
506 |
+
|
507 |
+
$this->debug('Unable to get Grouped Product ID');
|
508 |
+
|
509 |
+
return false;
|
510 |
+
}
|
511 |
+
|
512 |
+
protected function getGroupedProduct($item)
|
513 |
+
{
|
514 |
+
$this->debug('Get Grouped Product');
|
515 |
+
$product_id = $this->getGroupedProductId($item);
|
516 |
+
|
517 |
+
if ($product_id !== false)
|
518 |
+
{
|
519 |
+
$this->debug('Loading Product');
|
520 |
+
$product = Mage::getModel('catalog/product')->load($product_id);
|
521 |
+
|
522 |
+
if ($product->getId())
|
523 |
+
{
|
524 |
+
$this->debug('Grouped Product Found!');
|
525 |
+
return $product;
|
526 |
+
}
|
527 |
+
}
|
528 |
+
|
529 |
+
$this->debug('Unable to get Grouped Product');
|
530 |
+
|
531 |
+
return false;
|
532 |
+
}
|
533 |
+
|
534 |
+
protected function isItemVisible($item)
|
535 |
+
{
|
536 |
+
$vis_flag = Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE;
|
537 |
+
|
538 |
+
if ($item == null)
|
539 |
+
return true;
|
540 |
+
|
541 |
+
$product = $this->getProduct($item);
|
542 |
+
|
543 |
+
if ($product == null)
|
544 |
+
return true;
|
545 |
+
|
546 |
+
if ($product->getVisibility() != $vis_flag)
|
547 |
+
return true;
|
548 |
+
|
549 |
+
return false;
|
550 |
+
}
|
551 |
+
|
552 |
+
protected function processParentItems($quote)
|
553 |
+
{
|
554 |
+
$this->debug("Processing Parent Items");
|
555 |
+
$parent_items = array();
|
556 |
+
|
557 |
+
foreach ($quote->getAllItems() as $item)
|
558 |
+
{
|
559 |
+
$this->debug("");
|
560 |
+
$this->debug("----------------------------------------------------------");
|
561 |
+
$type = $item->getProductType();
|
562 |
+
//Zend_debug::dump($item->getData());
|
563 |
+
$this->debug("Item ID: {$item->getId()}");
|
564 |
+
$this->debug("Item Sku: {$item->getSku()}");
|
565 |
+
$this->debug("Item Type: {$type}");
|
566 |
+
if ($type == "configurable" || $type == "bundle")
|
567 |
+
{
|
568 |
+
$this->debug('*** Adding as Parent Item ***');
|
569 |
+
$parent_items[$item->getId()] = $item;
|
570 |
+
}
|
571 |
+
|
572 |
+
if ($type == "grouped")
|
573 |
+
{
|
574 |
+
$grouped_product = $this->getGroupedProduct($item);
|
575 |
+
|
576 |
+
if ($grouped_product)
|
577 |
+
{
|
578 |
+
$this->debug('*** Adding Grouped Product to Parent Items ***');
|
579 |
+
$parent_item = new Varien_Object;
|
580 |
+
$parent_item->setProduct($grouped_product);
|
581 |
+
$parent_items[$item->getId()] = $parent_item;
|
582 |
+
}
|
583 |
+
}
|
584 |
+
}
|
585 |
+
|
586 |
+
$this->debug('Parent Items Found: ' . count($parent_items));
|
587 |
+
|
588 |
+
if (count($parent_items) > 0)
|
589 |
+
{
|
590 |
+
$this->debug('Parent Items:');
|
591 |
+
|
592 |
+
foreach($parent_items as $key => $item)
|
593 |
+
{
|
594 |
+
$this->debug('-------------------------');
|
595 |
+
$this->debug("ID: {$key}");
|
596 |
+
if ($item->getId())
|
597 |
+
$this->debug("Parent ID: " . $item->getId());
|
598 |
+
else
|
599 |
+
{
|
600 |
+
$parent_product = $this->getProduct($item);
|
601 |
+
if ($parent_product)
|
602 |
+
$this->debug("Parent ID: " . $parent_product->getId());
|
603 |
+
else
|
604 |
+
$this->debug("Parent ID: Failed to load product");
|
605 |
+
}
|
606 |
+
}
|
607 |
+
}
|
608 |
+
|
609 |
+
return $parent_items;
|
610 |
+
}
|
611 |
+
|
612 |
+
public function getMergeOrderItems($quote, $merge_vars, $prefix = "")
|
613 |
+
{
|
614 |
+
$max_count = $this->config('product_fields');
|
615 |
+
|
616 |
+
$count = 0;
|
617 |
+
|
618 |
+
$item_data = array();
|
619 |
+
|
620 |
+
$parent_items = $this->processParentItems($quote);
|
621 |
+
|
622 |
+
$this->debug('');
|
623 |
+
$this->debug('Processing Order Items');
|
624 |
+
|
625 |
+
foreach ($quote->getAllItems() as $item)
|
626 |
+
{
|
627 |
+
$type = $item->getProductType();
|
628 |
+
|
629 |
+
$this->debug('');
|
630 |
+
$this->debug("----------------------------------------------------------");
|
631 |
+
$this->debug('Item Sku: ' . $item->getSku());
|
632 |
+
$this->debug('Item Type: ' . $type);
|
633 |
+
|
634 |
+
if ($type == "configurable" || $type == "bundle")
|
635 |
+
{
|
636 |
+
$this->debug('Skipping Configurable and Bundle Products (this is a parent product)');
|
637 |
+
continue;
|
638 |
+
}
|
639 |
+
|
640 |
+
$item_id = $item->getId();
|
641 |
+
|
642 |
+
if ($item->getProductType() == 'grouped')
|
643 |
+
{
|
644 |
+
$this->debug('Grouped Product');
|
645 |
+
|
646 |
+
$parent_id = $item->getId();
|
647 |
+
}
|
648 |
+
else
|
649 |
+
{
|
650 |
+
$parent_id = $item->getParentItemId();
|
651 |
+
}
|
652 |
+
|
653 |
+
$this->debug("Parent Id: {$parent_id}");
|
654 |
+
|
655 |
+
if ($parent_id != null && isset($parent_items[$parent_id]))
|
656 |
+
{
|
657 |
+
$this->debug('Item has a Parent');
|
658 |
+
$parent_item = $parent_items[$parent_id];
|
659 |
+
|
660 |
+
$this->debug('Checking Visibility of Item and Parent (only one needs to be visible)');
|
661 |
+
if ($this->isItemVisible($item) || $this->isItemVisible($parent_item))
|
662 |
+
{
|
663 |
+
$this->debug('Adding Item to list');
|
664 |
+
$item_data[$item_id] = array('item' => $item, 'parent' => $parent_item);
|
665 |
+
}
|
666 |
+
else
|
667 |
+
$this->debug('Visibility check failed');
|
668 |
+
}
|
669 |
+
else
|
670 |
+
{
|
671 |
+
$this->debug('Checking Visibility of Item');
|
672 |
+
if ($this->isItemVisible($item))
|
673 |
+
{
|
674 |
+
$this->debug('Adding Item to list');
|
675 |
+
$item_data[$item_id] = array('item' => $item);
|
676 |
+
}
|
677 |
+
else
|
678 |
+
$this->debug('Visibility check failed');
|
679 |
+
}
|
680 |
+
}
|
681 |
+
|
682 |
+
foreach ($item_data as $item)
|
683 |
{
|
684 |
+
$count++;
|
685 |
|
686 |
+
if ($count > $max_count)
|
687 |
+
break;
|
688 |
|
689 |
$merge_vars = $this->addMergeItem($item, $count, $merge_vars, $prefix);
|
690 |
}
|
691 |
|
692 |
+
// Blank out other items
|
693 |
+
while ($count < $max_count)
|
694 |
+
{
|
695 |
+
$count++;
|
696 |
+
$merge_vars = $this->addMergeItem(null, $count, $merge_vars, $prefix);
|
697 |
+
}
|
698 |
|
699 |
+
return $merge_vars;
|
700 |
+
}
|
701 |
}
|
app/code/community/EmailDirect/Integration/Model/Resource/Setup.php
CHANGED
@@ -65,7 +65,7 @@ class EmailDirect_Integration_Model_Resource_Setup extends Mage_Core_Model_Resou
|
|
65 |
if (is_array($description))
|
66 |
$description = '<ul><li>' . implode('</li><li>', $description) . '</li></ul>';
|
67 |
|
68 |
-
$date = date(
|
69 |
Mage::getSingleton('adminnotification/inbox')->parse(array(array(
|
70 |
'severity' => $severity,
|
71 |
'date_added' => $date,
|
65 |
if (is_array($description))
|
66 |
$description = '<ul><li>' . implode('</li><li>', $description) . '</li></ul>';
|
67 |
|
68 |
+
$date = date(EmailDirect_Integration_Helper_Data::DATE_FORMAT);
|
69 |
Mage::getSingleton('adminnotification/inbox')->parse(array(array(
|
70 |
'severity' => $severity,
|
71 |
'date_added' => $date,
|
app/code/community/EmailDirect/Integration/controllers/Admin/AbandonedController.php
CHANGED
@@ -2,89 +2,94 @@
|
|
2 |
|
3 |
class EmailDirect_Integration_Admin_AbandonedController extends Mage_Adminhtml_Controller_Action
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
$this->getLayout()->getBlock('head')->setTitle($this->__('EmailDirect Abandoned Carts'));
|
19 |
-
$this->_setActiveMenu('emaildirect');
|
20 |
-
$this->renderLayout();
|
21 |
-
}
|
22 |
-
|
23 |
-
public function gridAction()
|
24 |
-
{
|
25 |
-
$this->showGrid();
|
26 |
-
}
|
27 |
-
|
28 |
-
private function showGrid()
|
29 |
-
{
|
30 |
-
$this->loadLayout();
|
31 |
-
$this->getResponse()->setBody($this->getLayout()->createBlock('emaildirect/adminhtml_abandoned_grid')->toHtml());
|
32 |
}
|
33 |
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
$this->_redirect('*/*/index');
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
if( $this->getRequest()->isPost() )
|
68 |
$params = $this->getRequest()->getPost();
|
69 |
|
70 |
$id_list = $params['id'];
|
71 |
-
|
72 |
-
if (!is_array($id_list))
|
73 |
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Please select at least one cart to send or resend.'));
|
74 |
-
else
|
75 |
{
|
76 |
-
try
|
77 |
{
|
78 |
-
|
79 |
-
|
80 |
Mage::getSingleton('adminhtml/session')->addSuccess(
|
81 |
Mage::helper('adminhtml')->__('Total of %d carts(s) were sent.', $count));
|
82 |
-
}
|
83 |
-
catch (Exception $e)
|
84 |
{
|
85 |
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
86 |
}
|
87 |
}
|
88 |
$this->_redirect('*/*/index', Mage::helper('emaildirect')->getUrlParams());
|
89 |
-
|
90 |
}
|
2 |
|
3 |
class EmailDirect_Integration_Admin_AbandonedController extends Mage_Adminhtml_Controller_Action
|
4 |
{
|
5 |
+
protected function _isAllowed()
|
6 |
+
{
|
7 |
+
return Mage::getSingleton('admin/session')->isAllowed('emaildirect/emaildirect_abandoned');
|
8 |
+
}
|
9 |
+
|
10 |
+
public function indexAction()
|
11 |
+
{
|
12 |
+
$this->loadLayout();
|
13 |
+
|
14 |
+
$this->getLayout()->getBlock('head')->setTitle($this->__('EmailDirect Abandoned Carts'));
|
15 |
+
$this->_setActiveMenu('emaildirect');
|
16 |
+
$this->renderLayout();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
}
|
18 |
|
19 |
+
public function detailsAction()
|
20 |
+
{
|
21 |
+
$this->loadLayout();
|
22 |
+
|
23 |
+
$this->getLayout()->getBlock('head')->setTitle($this->__('EmailDirect Abandoned Carts'));
|
24 |
+
$this->_setActiveMenu('emaildirect');
|
25 |
+
$this->renderLayout();
|
26 |
+
}
|
27 |
+
|
28 |
+
public function gridAction()
|
29 |
+
{
|
30 |
+
$this->showGrid();
|
31 |
+
}
|
32 |
+
|
33 |
+
private function showGrid()
|
34 |
+
{
|
35 |
+
$this->loadLayout();
|
36 |
+
$this->getResponse()->setBody($this->getLayout()->createBlock('emaildirect/adminhtml_abandoned_grid')->toHtml());
|
37 |
+
}
|
38 |
+
|
39 |
+
public function runAction()
|
40 |
+
{
|
41 |
+
$store_id = $this->getRequest()->getParam('store_id');
|
42 |
+
|
43 |
+
Mage::getSingleton('emaildirect/abandoned_observer')->manualCartsProcessor($store_id);
|
44 |
+
|
45 |
+
$msg = "The Abandoned Cart process has been run";
|
46 |
+
|
47 |
+
if ($store_id) {
|
48 |
+
$msg .= " on store: " . Mage::helper('emaildirect')->getFullStoreNameById($store_id);
|
49 |
+
}
|
50 |
+
|
51 |
+
$this->_getSession()->addSuccess(Mage::helper('adminhtml')->__($msg));
|
52 |
+
$this->_redirect('*/*/index');
|
53 |
+
}
|
54 |
+
|
55 |
+
public function sendAction()
|
56 |
+
{
|
57 |
+
$id = $this->getRequest()->getParam('id');
|
58 |
+
|
59 |
+
if ($id == null) {
|
60 |
+
$this->_getSession()->addError(Mage::helper('adminhtml')->__("No Carts were specified."));
|
61 |
+
} else {
|
62 |
+
$id_list = array($id);
|
63 |
+
Mage::getSingleton('emaildirect/abandoned_observer')->SendAbandonedCarts($id_list);
|
64 |
+
$this->_getSession()->addSuccess(Mage::helper('adminhtml')->__("Abandoned Cart has been sent."));
|
65 |
+
}
|
66 |
$this->_redirect('*/*/index');
|
67 |
+
}
|
68 |
+
|
69 |
+
public function massSendAction()
|
70 |
+
{
|
71 |
+
$params = array();
|
72 |
if( $this->getRequest()->isPost() )
|
73 |
$params = $this->getRequest()->getPost();
|
74 |
|
75 |
$id_list = $params['id'];
|
76 |
+
|
77 |
+
if (!is_array($id_list))
|
78 |
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Please select at least one cart to send or resend.'));
|
79 |
+
else
|
80 |
{
|
81 |
+
try
|
82 |
{
|
83 |
+
$count = Mage::getSingleton('emaildirect/abandoned_observer')->SendAbandonedCarts($id_list);
|
84 |
+
|
85 |
Mage::getSingleton('adminhtml/session')->addSuccess(
|
86 |
Mage::helper('adminhtml')->__('Total of %d carts(s) were sent.', $count));
|
87 |
+
}
|
88 |
+
catch (Exception $e)
|
89 |
{
|
90 |
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
91 |
}
|
92 |
}
|
93 |
$this->_redirect('*/*/index', Mage::helper('emaildirect')->getUrlParams());
|
94 |
+
}
|
95 |
}
|
app/code/community/EmailDirect/Integration/controllers/Admin/DiagnosticController.php
CHANGED
@@ -6,24 +6,29 @@ class EmailDirect_Integration_Admin_DiagnosticController extends Mage_Adminhtml_
|
|
6 |
private $_order = null;
|
7 |
private $_quote = null;
|
8 |
private $_result = array();
|
9 |
-
|
|
|
|
|
|
|
|
|
|
|
10 |
public function downloadAction()
|
11 |
{
|
12 |
$filename = $this->getRequest()->getParam('filename');
|
13 |
-
|
14 |
$output = $this->getRequest()->getParam('output');
|
15 |
-
|
16 |
$this->_prepareDownloadResponse($filename, $output);
|
17 |
}
|
18 |
-
|
19 |
public function ajaxAction()
|
20 |
{
|
21 |
$this->_logger = Mage::helper('emaildirect/troubleshooting');
|
22 |
$this->_logger->turnOnDebug();
|
23 |
-
|
24 |
$method = $this->getRequest()->getParam('method');
|
25 |
$success = false;
|
26 |
-
|
27 |
switch ($method)
|
28 |
{
|
29 |
// Orders
|
@@ -33,22 +38,22 @@ class EmailDirect_Integration_Admin_DiagnosticController extends Mage_Adminhtml_
|
|
33 |
case "order_full_request": $success = $this->fullOrder(); break;
|
34 |
case "order_custom_fields": $success = $this->customFields(); break;
|
35 |
case "tracking_info": $success = $this->trackingInfo(); break;
|
36 |
-
|
37 |
// Abandoned
|
38 |
case "abandoned_url": $success = $this->AbandonedUrl(); break;
|
39 |
case "abandoned_custom_fields": $success = $this->AbandonedCustomFields(); break;
|
40 |
case "abandoned_request": $success = $this->abandonedFull(); break;
|
41 |
case "abandoned_request_full": $success = $this->abandonedFull(false); break;
|
42 |
}
|
43 |
-
|
44 |
$this->_logger->turnOffDebug();
|
45 |
-
|
46 |
if ($success)
|
47 |
$this->setSuccess($this->_output, $this->_logger->getDebugData());
|
48 |
-
|
49 |
$this->getResponse()->setBody(json_encode($this->_result));
|
50 |
}
|
51 |
-
|
52 |
private function getCss()
|
53 |
{
|
54 |
$css = "<style>
|
@@ -58,31 +63,31 @@ class EmailDirect_Integration_Admin_DiagnosticController extends Mage_Adminhtml_
|
|
58 |
.diagnostic_table tr td:first-child { font-weight: bold; }
|
59 |
|
60 |
</style>";
|
61 |
-
|
62 |
return $css;
|
63 |
}
|
64 |
-
|
65 |
private function setSuccess($output, $details)
|
66 |
{
|
67 |
$this->_result['success'] = true;
|
68 |
-
|
69 |
if (is_array($details))
|
70 |
$this->_result['details'] = implode("<br />",$details) . "<br /><br />";
|
71 |
else
|
72 |
$this->_result['details'] = $details;
|
73 |
-
|
74 |
$this->_result['output'] = $this->getCss() . $output;
|
75 |
-
|
76 |
return true;
|
77 |
}
|
78 |
-
|
79 |
private function setFailure($message)
|
80 |
{
|
81 |
$this->_result['success'] = false;
|
82 |
$this->_result['error'] = true;
|
83 |
-
|
84 |
$this->_result['message'] = $message;
|
85 |
-
|
86 |
return false;
|
87 |
}
|
88 |
|
@@ -90,397 +95,397 @@ class EmailDirect_Integration_Admin_DiagnosticController extends Mage_Adminhtml_
|
|
90 |
{
|
91 |
$this->_logger->debug($data);
|
92 |
}
|
93 |
-
|
94 |
private function debugHeader($data, $level = 2)
|
95 |
{
|
96 |
$this->_logger->debugHeader($data, $level);
|
97 |
}
|
98 |
-
|
99 |
private function getOrder()
|
100 |
{
|
101 |
if ($this->_order != null)
|
102 |
return $this->_order;
|
103 |
-
|
104 |
$order_id = $this->getRequest()->getParam('item_id');
|
105 |
-
|
106 |
$this->_order = Mage::getModel('sales/order')->load($order_id);
|
107 |
-
|
108 |
if ($this->_order != null && !$this->_order->getId())
|
109 |
$this->_order = null;
|
110 |
-
else
|
111 |
Mage::app()->setCurrentStore($this->_order->getStoreId());
|
112 |
-
|
113 |
return $this->_order;
|
114 |
}
|
115 |
-
|
116 |
private function getQuote()
|
117 |
{
|
118 |
if ($this->_quote != null)
|
119 |
return $this->_quote;
|
120 |
-
|
121 |
$quote_id = $this->getRequest()->getParam('item_id');
|
122 |
$store_id = $this->getRequest()->getParam('store_id');
|
123 |
-
|
124 |
$store = Mage::getModel('core/store')->load($store_id);
|
125 |
-
|
126 |
$this->_quote = Mage::getModel('sales/quote')->setStore($store)->load($quote_id);
|
127 |
-
|
128 |
if ($this->_quote != null && !$this->_quote->getId())
|
129 |
$this->_quote = null;
|
130 |
-
else
|
131 |
Mage::app()->setCurrentStore($store);
|
132 |
-
|
133 |
return $this->_quote;
|
134 |
}
|
135 |
-
|
136 |
private function decorateArray($array)
|
137 |
{
|
138 |
//Zend_debug::dump($array);
|
139 |
$output = "<table class='diagnostic_table'>";
|
140 |
$output .= "<tr>";
|
141 |
$keys = array_keys($array);
|
142 |
-
|
143 |
foreach ($keys as $key)
|
144 |
{
|
145 |
$output .= "<th>{$key}</th>";
|
146 |
}
|
147 |
-
|
148 |
$output .= "</tr>";
|
149 |
-
|
150 |
foreach ($array as $row)
|
151 |
{
|
152 |
$output .= "<tr>";
|
153 |
-
|
154 |
foreach ($row as $data)
|
155 |
{
|
156 |
$output .= "<td>{$data}</td>";
|
157 |
}
|
158 |
-
|
159 |
$output .= "</tr>";
|
160 |
}
|
161 |
-
|
162 |
$output .= "</table>";
|
163 |
-
|
164 |
return $output;
|
165 |
}
|
166 |
-
|
167 |
private function arrayToTable($array)
|
168 |
{
|
169 |
$output = "<table class='diagnostic_table' cellspacing='0'>";
|
170 |
-
|
171 |
foreach ($array as $key => $value)
|
172 |
{
|
173 |
$output .= "<tr><td>{$key}</td><td>{$value}</td></tr>";
|
174 |
}
|
175 |
-
|
176 |
return $output . "</table>";
|
177 |
}
|
178 |
-
|
179 |
private function getNumberedKeys($array)
|
180 |
{
|
181 |
$keys = array();
|
182 |
-
|
183 |
foreach ($array as $key => $value)
|
184 |
{
|
185 |
if (strpos($key,"1") === false)
|
186 |
return $keys;
|
187 |
-
|
188 |
$keys[] = substr($key,0,strlen($key) - 1);
|
189 |
}
|
190 |
-
|
191 |
return $keys;
|
192 |
}
|
193 |
-
|
194 |
private function numberedItemsDisplay($array)
|
195 |
{
|
196 |
$output = "";
|
197 |
-
|
198 |
$keys = $this->getNumberedKeys($array);
|
199 |
-
|
200 |
$first_key = $keys[0];
|
201 |
-
|
202 |
$count = 1;
|
203 |
-
|
204 |
while (isset($array["{$first_key}{$count}"]))
|
205 |
{
|
206 |
$output .= "<h3>Item # {$count}</h3>";
|
207 |
-
|
208 |
$output .= "<table class='diagnostic_table' cellspacing='0'>";
|
209 |
-
|
210 |
foreach ($keys as $key)
|
211 |
{
|
212 |
$output .= "<tr><td>{$key}</td><td>" . $array["{$key}{$count}"] . "</td></tr>";
|
213 |
}
|
214 |
-
|
215 |
$output .= "</table><br />";
|
216 |
-
|
217 |
$count++;
|
218 |
}
|
219 |
-
|
220 |
-
|
221 |
return $output;
|
222 |
}
|
223 |
-
|
224 |
private function lastOrderItems()
|
225 |
-
{
|
226 |
$order = $this->getOrder();
|
227 |
-
|
228 |
if ($order == null)
|
229 |
return $this->setFailure("Order not found");
|
230 |
-
|
231 |
$this->debugHeader('Last Order Items');
|
232 |
-
|
233 |
$this->debug('Order #' . $order->getIncrementId());
|
234 |
-
|
235 |
$merge_vars = array();
|
236 |
-
|
237 |
$order_helper = Mage::helper('emaildirect/order');
|
238 |
-
|
239 |
$merge_vars = $order_helper->getMergeOrderItems($order, $merge_vars);
|
240 |
-
|
241 |
$this->debug('');
|
242 |
$this->debugHeader('Latest Order Items',1);
|
243 |
$this->debug($merge_vars);
|
244 |
-
|
245 |
$this->debugHeader('Last Order Items Complete!');
|
246 |
-
|
247 |
$this->_output = "<h2>Order Items Diagnostic Results</h2>" . $this->numberedItemsDisplay($merge_vars, 3);
|
248 |
-
|
249 |
return true;
|
250 |
}
|
251 |
|
252 |
private function relatedOrderItems()
|
253 |
-
{
|
254 |
$order = $this->getOrder();
|
255 |
-
|
256 |
if ($order == null)
|
257 |
return $this->setFailure("Order not found");
|
258 |
-
|
259 |
$this->debugHeader('Related Order Items');
|
260 |
-
|
261 |
$this->debug('Order #' . $order->getIncrementId());
|
262 |
$this->debug('');
|
263 |
-
|
264 |
$merge_vars = array();
|
265 |
-
|
266 |
$order_helper = Mage::helper('emaildirect/order');
|
267 |
-
|
268 |
$merge_vars = $order_helper->getRelatedOrderItems($order, $merge_vars);
|
269 |
-
|
270 |
$this->debugHeader('Related Order Items',1);
|
271 |
$this->debug($merge_vars);
|
272 |
-
|
273 |
$this->debugHeader('Related Order Items Complete!');
|
274 |
-
|
275 |
$this->_output = "<h2>Related Items Diagnostic Results</h2>" . $this->numberedItemsDisplay($merge_vars, 3);
|
276 |
-
|
277 |
return true;
|
278 |
}
|
279 |
|
280 |
private function fullOrder($request_only = true)
|
281 |
{
|
282 |
$order = $this->getOrder();
|
283 |
-
|
284 |
if ($order == null)
|
285 |
return $this->setFailure("Order not found");
|
286 |
-
|
287 |
$customer = Mage::helper('emaildirect/order')->getOrderCustomer($order);
|
288 |
-
|
289 |
$merge_vars = Mage::helper('emaildirect/order')->getMergeVars($customer);
|
290 |
-
|
291 |
$merge_vars = Mage::helper('emaildirect/order')->processOrderItems($order, $merge_vars);
|
292 |
-
|
293 |
//$order_xml = Mage::getSingleton('emaildirect/wrapper_orders')->getOrderXml($order);
|
294 |
-
|
295 |
//$this->_logger->debugXml($order_xml);
|
296 |
-
|
297 |
if ($request_only)
|
298 |
$this->_logger->setDebugExecuteMode('request_only');
|
299 |
else
|
300 |
$this->_logger->setDebugExecuteMode('full');
|
301 |
-
|
302 |
Mage::getSingleton('emaildirect/wrapper_orders')->addSubscriberOrder($order->getCustomerEmail(), $order, $merge_vars);
|
303 |
-
|
304 |
$this->_output = "<h2>Full Order Diagnostic Results</h2><h3>Request Xml</h3><pre>" . htmlentities($this->_logger->formatXml($this->_logger->getDebugRequest())) . "</pre>";
|
305 |
-
|
306 |
if (!$request_only)
|
307 |
{
|
308 |
$this->_output .= "<br /><h3>Response Xml</h3><pre>" . htmlentities($this->_logger->formatXml($this->_logger->getDebugResponse())) . "</pre>";
|
309 |
}
|
310 |
-
|
311 |
return true;
|
312 |
}
|
313 |
-
|
314 |
private function customFields()
|
315 |
{
|
316 |
$order = $this->getOrder();
|
317 |
-
|
318 |
if ($order == null)
|
319 |
return $this->setFailure("Order not found");
|
320 |
-
|
321 |
$this->debugHeader('Custom Fields Diagnostic Starting');
|
322 |
-
|
323 |
$customer = Mage::helper('emaildirect/order')->getOrderCustomer($order);
|
324 |
-
|
325 |
$this->debugHeader('Customer Related Merge Vars',1);
|
326 |
-
|
327 |
$customer_vars = Mage::helper('emaildirect/order')->getMergeVars($customer);
|
328 |
-
|
329 |
$merge_vars = Mage::helper('emaildirect/order')->processOrderItems($order, $merge_vars);
|
330 |
-
|
331 |
//$order_xml = Mage::getSingleton('emaildirect/wrapper_orders')->getOrderXml($order);
|
332 |
-
|
333 |
//$this->_logger->debugXml($order_xml);
|
334 |
-
|
335 |
$this->_output = "<h2>Custom Fields Diagnostic Results</h2><h3>Customer Fields</h3>" . $this->arrayToTable($customer_vars);
|
336 |
$this->_output .= "<br /><h3>Order Fields</h3>" . $this->arrayToTable($merge_vars);
|
337 |
-
|
338 |
return true;
|
339 |
}
|
340 |
-
|
341 |
private function abandonedUrl()
|
342 |
{
|
343 |
$quote = $this->getQuote();
|
344 |
-
|
345 |
if ($quote == null)
|
346 |
return $this->setFailure("Quote not found");
|
347 |
-
|
348 |
$this->debugHeader('Abandoned URL');
|
349 |
-
|
350 |
//$customer = Mage::helper('emaildirect/order')->getOrderCustomer($order);
|
351 |
-
|
352 |
//$this->debugHeader('Customer Related Merge Vars',1);
|
353 |
-
|
354 |
$url = Mage::helper('emaildirect/abandoned')->getAbandonedUrl($quote);
|
355 |
-
|
356 |
$this->_output = "<h2>Abandoned Cart Url (Restore Cart)</h2><p>Click on the link to test it (opens in a new window and won't replace customer cart data)</p>URL: <a target='_blank' href='{$url}&test_mode=true'>{$url}</a>";
|
357 |
-
|
358 |
return true;
|
359 |
}
|
360 |
-
|
361 |
private function abandonedCustomFields()
|
362 |
{
|
363 |
$quote = $this->getQuote();
|
364 |
-
|
365 |
if ($quote == null)
|
366 |
return $this->setFailure("Quote not found");
|
367 |
-
|
368 |
$this->debugHeader('Custom Fields Diagnostic Starting');
|
369 |
-
|
370 |
$abandonedDate = $quote->getUpdatedAt();
|
371 |
-
|
372 |
$merge_vars = array();
|
373 |
-
|
374 |
$merge_vars['FirstName'] = $quote->getData('customer_firstname');
|
375 |
$merge_vars['LastName'] = $quote->getData('customer_lastname');
|
376 |
-
|
377 |
$merge_vars['AbandonedDate'] = $abandonedDate;
|
378 |
$merge_vars['AbandonedUrl'] = Mage::helper('emaildirect/abandoned')->getAbandonedUrl($quote);
|
379 |
-
|
380 |
// Setup sequence for this store
|
381 |
Mage::helper('emaildirect/abandoned')->setupSequence();
|
382 |
-
|
383 |
Mage::helper('emaildirect/abandoned')->addSequence($merge_vars);
|
384 |
-
|
385 |
$merge_vars = Mage::helper('emaildirect/order')->getMergeOrderItems($quote, $merge_vars, "AB");
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
if (Mage::helper('emaildirect')->config('save_latest_order'))
|
390 |
{
|
391 |
$this->debug("Processing Last Order");
|
392 |
$order = Mage::helper('emaildirect/abandoned')->getLastOrder($quote);
|
393 |
-
|
394 |
if ($order != null)
|
395 |
$merge_vars = Mage::helper('emaildirect/order')->processOrderItems($order, $merge_vars);
|
396 |
else
|
397 |
$this->debug("Order not found");
|
398 |
//$this->_log("Order not found");
|
399 |
}
|
400 |
-
|
401 |
-
|
402 |
//$order_xml = Mage::getSingleton('emaildirect/wrapper_orders')->getOrderXml($order);
|
403 |
-
|
404 |
//$this->_logger->debugXml($order_xml);
|
405 |
-
|
406 |
$this->_output = "<h2>Custom Fields Diagnostic Results</h2>";
|
407 |
$this->_output .= "<br /><h3>Fields</h3>" . $this->arrayToTable($merge_vars);
|
408 |
-
|
409 |
return true;
|
410 |
}
|
411 |
|
412 |
private function getQuoteEmail($quote)
|
413 |
{
|
414 |
$abandoned_cart = Mage::helper('emaildirect/diagnostic')->getAbandonedCart($quote->getId());
|
415 |
-
|
416 |
return $abandoned_cart->getEmail();
|
417 |
}
|
418 |
|
419 |
private function abandonedFull($request_only = true)
|
420 |
{
|
421 |
$quote = $this->getQuote();
|
422 |
-
|
423 |
if ($quote == null)
|
424 |
return $this->setFailure("Quote not found");
|
425 |
-
|
426 |
$abandonedDate = $quote->getUpdatedAt();
|
427 |
-
|
428 |
$email = $quote->getCustomerEmail();
|
429 |
-
|
430 |
if ($email == null)
|
431 |
$email = $this->getQuoteEmail($quote);
|
432 |
-
|
433 |
$merge_vars = array();
|
434 |
-
|
435 |
$merge_vars['FirstName'] = $quote->getData('customer_firstname');
|
436 |
$merge_vars['LastName'] = $quote->getData('customer_lastname');
|
437 |
-
|
438 |
$merge_vars['AbandonedDate'] = $abandonedDate;
|
439 |
$merge_vars['AbandonedUrl'] = Mage::helper('emaildirect/abandoned')->getAbandonedUrl($quote);
|
440 |
-
|
441 |
// Setup sequence for this store
|
442 |
Mage::helper('emaildirect/abandoned')->setupSequence();
|
443 |
-
|
444 |
Mage::helper('emaildirect/abandoned')->addSequence($merge_vars);
|
445 |
-
|
446 |
$merge_vars = Mage::helper('emaildirect/order')->getMergeOrderItems($quote, $merge_vars, "AB");
|
447 |
-
|
448 |
if (Mage::helper('emaildirect')->config('save_latest_order'))
|
449 |
{
|
450 |
$this->debug("Processing Last Order");
|
451 |
$order = Mage::helper('emaildirect/abandoned')->getLastOrder($quote);
|
452 |
-
|
453 |
if ($order != null)
|
454 |
$merge_vars = Mage::helper('emaildirect/order')->processOrderItems($order, $merge_vars);
|
455 |
else
|
456 |
$this->debug("Order not found");
|
457 |
//$this->_log("Order not found");
|
458 |
}
|
459 |
-
|
460 |
$xml = Mage::getSingleton('emaildirect/wrapper_abandoned')->getOneSubscriber($email,$merge_vars);
|
461 |
-
|
462 |
if ($request_only)
|
463 |
$this->_logger->setDebugExecuteMode('request_only');
|
464 |
else
|
465 |
$this->_logger->setDebugExecuteMode('full');
|
466 |
-
|
467 |
$xml = "<Subscribers>{$xml}</Subscribers>";
|
468 |
-
|
469 |
//Mage::getSingleton('emaildirect/wrapper_orders')->addSubscriberOrder($order->getCustomerEmail(), $order, $merge_vars);
|
470 |
$rc = Mage::getSingleton('emaildirect/wrapper_abandoned')->sendSubscribers($xml);
|
471 |
-
|
472 |
$this->_output = "<h2>Abandoned Cart Xml</h2><h3>Request Xml</h3><pre>" . htmlentities($this->_logger->formatXml($this->_logger->getDebugRequest())) . "</pre>";
|
473 |
-
|
474 |
if (!$request_only)
|
475 |
{
|
476 |
$this->_output .= "<br /><h3>Response Xml</h3><pre>" . htmlentities($this->_logger->formatXml($this->_logger->getDebugResponse())) . "</pre>";
|
477 |
}
|
478 |
return true;
|
479 |
}
|
480 |
-
|
481 |
private function trackingInfo()
|
482 |
{
|
483 |
-
|
484 |
return true;
|
485 |
}
|
486 |
}
|
6 |
private $_order = null;
|
7 |
private $_quote = null;
|
8 |
private $_result = array();
|
9 |
+
|
10 |
+
protected function _isAllowed()
|
11 |
+
{
|
12 |
+
return Mage::getSingleton('admin/session')->isAllowed('emaildirect/emaildirect_diagnostics');
|
13 |
+
}
|
14 |
+
|
15 |
public function downloadAction()
|
16 |
{
|
17 |
$filename = $this->getRequest()->getParam('filename');
|
18 |
+
|
19 |
$output = $this->getRequest()->getParam('output');
|
20 |
+
|
21 |
$this->_prepareDownloadResponse($filename, $output);
|
22 |
}
|
23 |
+
|
24 |
public function ajaxAction()
|
25 |
{
|
26 |
$this->_logger = Mage::helper('emaildirect/troubleshooting');
|
27 |
$this->_logger->turnOnDebug();
|
28 |
+
|
29 |
$method = $this->getRequest()->getParam('method');
|
30 |
$success = false;
|
31 |
+
|
32 |
switch ($method)
|
33 |
{
|
34 |
// Orders
|
38 |
case "order_full_request": $success = $this->fullOrder(); break;
|
39 |
case "order_custom_fields": $success = $this->customFields(); break;
|
40 |
case "tracking_info": $success = $this->trackingInfo(); break;
|
41 |
+
|
42 |
// Abandoned
|
43 |
case "abandoned_url": $success = $this->AbandonedUrl(); break;
|
44 |
case "abandoned_custom_fields": $success = $this->AbandonedCustomFields(); break;
|
45 |
case "abandoned_request": $success = $this->abandonedFull(); break;
|
46 |
case "abandoned_request_full": $success = $this->abandonedFull(false); break;
|
47 |
}
|
48 |
+
|
49 |
$this->_logger->turnOffDebug();
|
50 |
+
|
51 |
if ($success)
|
52 |
$this->setSuccess($this->_output, $this->_logger->getDebugData());
|
53 |
+
|
54 |
$this->getResponse()->setBody(json_encode($this->_result));
|
55 |
}
|
56 |
+
|
57 |
private function getCss()
|
58 |
{
|
59 |
$css = "<style>
|
63 |
.diagnostic_table tr td:first-child { font-weight: bold; }
|
64 |
|
65 |
</style>";
|
66 |
+
|
67 |
return $css;
|
68 |
}
|
69 |
+
|
70 |
private function setSuccess($output, $details)
|
71 |
{
|
72 |
$this->_result['success'] = true;
|
73 |
+
|
74 |
if (is_array($details))
|
75 |
$this->_result['details'] = implode("<br />",$details) . "<br /><br />";
|
76 |
else
|
77 |
$this->_result['details'] = $details;
|
78 |
+
|
79 |
$this->_result['output'] = $this->getCss() . $output;
|
80 |
+
|
81 |
return true;
|
82 |
}
|
83 |
+
|
84 |
private function setFailure($message)
|
85 |
{
|
86 |
$this->_result['success'] = false;
|
87 |
$this->_result['error'] = true;
|
88 |
+
|
89 |
$this->_result['message'] = $message;
|
90 |
+
|
91 |
return false;
|
92 |
}
|
93 |
|
95 |
{
|
96 |
$this->_logger->debug($data);
|
97 |
}
|
98 |
+
|
99 |
private function debugHeader($data, $level = 2)
|
100 |
{
|
101 |
$this->_logger->debugHeader($data, $level);
|
102 |
}
|
103 |
+
|
104 |
private function getOrder()
|
105 |
{
|
106 |
if ($this->_order != null)
|
107 |
return $this->_order;
|
108 |
+
|
109 |
$order_id = $this->getRequest()->getParam('item_id');
|
110 |
+
|
111 |
$this->_order = Mage::getModel('sales/order')->load($order_id);
|
112 |
+
|
113 |
if ($this->_order != null && !$this->_order->getId())
|
114 |
$this->_order = null;
|
115 |
+
else
|
116 |
Mage::app()->setCurrentStore($this->_order->getStoreId());
|
117 |
+
|
118 |
return $this->_order;
|
119 |
}
|
120 |
+
|
121 |
private function getQuote()
|
122 |
{
|
123 |
if ($this->_quote != null)
|
124 |
return $this->_quote;
|
125 |
+
|
126 |
$quote_id = $this->getRequest()->getParam('item_id');
|
127 |
$store_id = $this->getRequest()->getParam('store_id');
|
128 |
+
|
129 |
$store = Mage::getModel('core/store')->load($store_id);
|
130 |
+
|
131 |
$this->_quote = Mage::getModel('sales/quote')->setStore($store)->load($quote_id);
|
132 |
+
|
133 |
if ($this->_quote != null && !$this->_quote->getId())
|
134 |
$this->_quote = null;
|
135 |
+
else
|
136 |
Mage::app()->setCurrentStore($store);
|
137 |
+
|
138 |
return $this->_quote;
|
139 |
}
|
140 |
+
|
141 |
private function decorateArray($array)
|
142 |
{
|
143 |
//Zend_debug::dump($array);
|
144 |
$output = "<table class='diagnostic_table'>";
|
145 |
$output .= "<tr>";
|
146 |
$keys = array_keys($array);
|
147 |
+
|
148 |
foreach ($keys as $key)
|
149 |
{
|
150 |
$output .= "<th>{$key}</th>";
|
151 |
}
|
152 |
+
|
153 |
$output .= "</tr>";
|
154 |
+
|
155 |
foreach ($array as $row)
|
156 |
{
|
157 |
$output .= "<tr>";
|
158 |
+
|
159 |
foreach ($row as $data)
|
160 |
{
|
161 |
$output .= "<td>{$data}</td>";
|
162 |
}
|
163 |
+
|
164 |
$output .= "</tr>";
|
165 |
}
|
166 |
+
|
167 |
$output .= "</table>";
|
168 |
+
|
169 |
return $output;
|
170 |
}
|
171 |
+
|
172 |
private function arrayToTable($array)
|
173 |
{
|
174 |
$output = "<table class='diagnostic_table' cellspacing='0'>";
|
175 |
+
|
176 |
foreach ($array as $key => $value)
|
177 |
{
|
178 |
$output .= "<tr><td>{$key}</td><td>{$value}</td></tr>";
|
179 |
}
|
180 |
+
|
181 |
return $output . "</table>";
|
182 |
}
|
183 |
+
|
184 |
private function getNumberedKeys($array)
|
185 |
{
|
186 |
$keys = array();
|
187 |
+
|
188 |
foreach ($array as $key => $value)
|
189 |
{
|
190 |
if (strpos($key,"1") === false)
|
191 |
return $keys;
|
192 |
+
|
193 |
$keys[] = substr($key,0,strlen($key) - 1);
|
194 |
}
|
195 |
+
|
196 |
return $keys;
|
197 |
}
|
198 |
+
|
199 |
private function numberedItemsDisplay($array)
|
200 |
{
|
201 |
$output = "";
|
202 |
+
|
203 |
$keys = $this->getNumberedKeys($array);
|
204 |
+
|
205 |
$first_key = $keys[0];
|
206 |
+
|
207 |
$count = 1;
|
208 |
+
|
209 |
while (isset($array["{$first_key}{$count}"]))
|
210 |
{
|
211 |
$output .= "<h3>Item # {$count}</h3>";
|
212 |
+
|
213 |
$output .= "<table class='diagnostic_table' cellspacing='0'>";
|
214 |
+
|
215 |
foreach ($keys as $key)
|
216 |
{
|
217 |
$output .= "<tr><td>{$key}</td><td>" . $array["{$key}{$count}"] . "</td></tr>";
|
218 |
}
|
219 |
+
|
220 |
$output .= "</table><br />";
|
221 |
+
|
222 |
$count++;
|
223 |
}
|
224 |
+
|
225 |
+
|
226 |
return $output;
|
227 |
}
|
228 |
+
|
229 |
private function lastOrderItems()
|
230 |
+
{
|
231 |
$order = $this->getOrder();
|
232 |
+
|
233 |
if ($order == null)
|
234 |
return $this->setFailure("Order not found");
|
235 |
+
|
236 |
$this->debugHeader('Last Order Items');
|
237 |
+
|
238 |
$this->debug('Order #' . $order->getIncrementId());
|
239 |
+
|
240 |
$merge_vars = array();
|
241 |
+
|
242 |
$order_helper = Mage::helper('emaildirect/order');
|
243 |
+
|
244 |
$merge_vars = $order_helper->getMergeOrderItems($order, $merge_vars);
|
245 |
+
|
246 |
$this->debug('');
|
247 |
$this->debugHeader('Latest Order Items',1);
|
248 |
$this->debug($merge_vars);
|
249 |
+
|
250 |
$this->debugHeader('Last Order Items Complete!');
|
251 |
+
|
252 |
$this->_output = "<h2>Order Items Diagnostic Results</h2>" . $this->numberedItemsDisplay($merge_vars, 3);
|
253 |
+
|
254 |
return true;
|
255 |
}
|
256 |
|
257 |
private function relatedOrderItems()
|
258 |
+
{
|
259 |
$order = $this->getOrder();
|
260 |
+
|
261 |
if ($order == null)
|
262 |
return $this->setFailure("Order not found");
|
263 |
+
|
264 |
$this->debugHeader('Related Order Items');
|
265 |
+
|
266 |
$this->debug('Order #' . $order->getIncrementId());
|
267 |
$this->debug('');
|
268 |
+
|
269 |
$merge_vars = array();
|
270 |
+
|
271 |
$order_helper = Mage::helper('emaildirect/order');
|
272 |
+
|
273 |
$merge_vars = $order_helper->getRelatedOrderItems($order, $merge_vars);
|
274 |
+
|
275 |
$this->debugHeader('Related Order Items',1);
|
276 |
$this->debug($merge_vars);
|
277 |
+
|
278 |
$this->debugHeader('Related Order Items Complete!');
|
279 |
+
|
280 |
$this->_output = "<h2>Related Items Diagnostic Results</h2>" . $this->numberedItemsDisplay($merge_vars, 3);
|
281 |
+
|
282 |
return true;
|
283 |
}
|
284 |
|
285 |
private function fullOrder($request_only = true)
|
286 |
{
|
287 |
$order = $this->getOrder();
|
288 |
+
|
289 |
if ($order == null)
|
290 |
return $this->setFailure("Order not found");
|
291 |
+
|
292 |
$customer = Mage::helper('emaildirect/order')->getOrderCustomer($order);
|
293 |
+
|
294 |
$merge_vars = Mage::helper('emaildirect/order')->getMergeVars($customer);
|
295 |
+
|
296 |
$merge_vars = Mage::helper('emaildirect/order')->processOrderItems($order, $merge_vars);
|
297 |
+
|
298 |
//$order_xml = Mage::getSingleton('emaildirect/wrapper_orders')->getOrderXml($order);
|
299 |
+
|
300 |
//$this->_logger->debugXml($order_xml);
|
301 |
+
|
302 |
if ($request_only)
|
303 |
$this->_logger->setDebugExecuteMode('request_only');
|
304 |
else
|
305 |
$this->_logger->setDebugExecuteMode('full');
|
306 |
+
|
307 |
Mage::getSingleton('emaildirect/wrapper_orders')->addSubscriberOrder($order->getCustomerEmail(), $order, $merge_vars);
|
308 |
+
|
309 |
$this->_output = "<h2>Full Order Diagnostic Results</h2><h3>Request Xml</h3><pre>" . htmlentities($this->_logger->formatXml($this->_logger->getDebugRequest())) . "</pre>";
|
310 |
+
|
311 |
if (!$request_only)
|
312 |
{
|
313 |
$this->_output .= "<br /><h3>Response Xml</h3><pre>" . htmlentities($this->_logger->formatXml($this->_logger->getDebugResponse())) . "</pre>";
|
314 |
}
|
315 |
+
|
316 |
return true;
|
317 |
}
|
318 |
+
|
319 |
private function customFields()
|
320 |
{
|
321 |
$order = $this->getOrder();
|
322 |
+
|
323 |
if ($order == null)
|
324 |
return $this->setFailure("Order not found");
|
325 |
+
|
326 |
$this->debugHeader('Custom Fields Diagnostic Starting');
|
327 |
+
|
328 |
$customer = Mage::helper('emaildirect/order')->getOrderCustomer($order);
|
329 |
+
|
330 |
$this->debugHeader('Customer Related Merge Vars',1);
|
331 |
+
|
332 |
$customer_vars = Mage::helper('emaildirect/order')->getMergeVars($customer);
|
333 |
+
|
334 |
$merge_vars = Mage::helper('emaildirect/order')->processOrderItems($order, $merge_vars);
|
335 |
+
|
336 |
//$order_xml = Mage::getSingleton('emaildirect/wrapper_orders')->getOrderXml($order);
|
337 |
+
|
338 |
//$this->_logger->debugXml($order_xml);
|
339 |
+
|
340 |
$this->_output = "<h2>Custom Fields Diagnostic Results</h2><h3>Customer Fields</h3>" . $this->arrayToTable($customer_vars);
|
341 |
$this->_output .= "<br /><h3>Order Fields</h3>" . $this->arrayToTable($merge_vars);
|
342 |
+
|
343 |
return true;
|
344 |
}
|
345 |
+
|
346 |
private function abandonedUrl()
|
347 |
{
|
348 |
$quote = $this->getQuote();
|
349 |
+
|
350 |
if ($quote == null)
|
351 |
return $this->setFailure("Quote not found");
|
352 |
+
|
353 |
$this->debugHeader('Abandoned URL');
|
354 |
+
|
355 |
//$customer = Mage::helper('emaildirect/order')->getOrderCustomer($order);
|
356 |
+
|
357 |
//$this->debugHeader('Customer Related Merge Vars',1);
|
358 |
+
|
359 |
$url = Mage::helper('emaildirect/abandoned')->getAbandonedUrl($quote);
|
360 |
+
|
361 |
$this->_output = "<h2>Abandoned Cart Url (Restore Cart)</h2><p>Click on the link to test it (opens in a new window and won't replace customer cart data)</p>URL: <a target='_blank' href='{$url}&test_mode=true'>{$url}</a>";
|
362 |
+
|
363 |
return true;
|
364 |
}
|
365 |
+
|
366 |
private function abandonedCustomFields()
|
367 |
{
|
368 |
$quote = $this->getQuote();
|
369 |
+
|
370 |
if ($quote == null)
|
371 |
return $this->setFailure("Quote not found");
|
372 |
+
|
373 |
$this->debugHeader('Custom Fields Diagnostic Starting');
|
374 |
+
|
375 |
$abandonedDate = $quote->getUpdatedAt();
|
376 |
+
|
377 |
$merge_vars = array();
|
378 |
+
|
379 |
$merge_vars['FirstName'] = $quote->getData('customer_firstname');
|
380 |
$merge_vars['LastName'] = $quote->getData('customer_lastname');
|
381 |
+
|
382 |
$merge_vars['AbandonedDate'] = $abandonedDate;
|
383 |
$merge_vars['AbandonedUrl'] = Mage::helper('emaildirect/abandoned')->getAbandonedUrl($quote);
|
384 |
+
|
385 |
// Setup sequence for this store
|
386 |
Mage::helper('emaildirect/abandoned')->setupSequence();
|
387 |
+
|
388 |
Mage::helper('emaildirect/abandoned')->addSequence($merge_vars);
|
389 |
+
|
390 |
$merge_vars = Mage::helper('emaildirect/order')->getMergeOrderItems($quote, $merge_vars, "AB");
|
391 |
+
|
392 |
+
|
393 |
+
|
394 |
if (Mage::helper('emaildirect')->config('save_latest_order'))
|
395 |
{
|
396 |
$this->debug("Processing Last Order");
|
397 |
$order = Mage::helper('emaildirect/abandoned')->getLastOrder($quote);
|
398 |
+
|
399 |
if ($order != null)
|
400 |
$merge_vars = Mage::helper('emaildirect/order')->processOrderItems($order, $merge_vars);
|
401 |
else
|
402 |
$this->debug("Order not found");
|
403 |
//$this->_log("Order not found");
|
404 |
}
|
405 |
+
|
406 |
+
|
407 |
//$order_xml = Mage::getSingleton('emaildirect/wrapper_orders')->getOrderXml($order);
|
408 |
+
|
409 |
//$this->_logger->debugXml($order_xml);
|
410 |
+
|
411 |
$this->_output = "<h2>Custom Fields Diagnostic Results</h2>";
|
412 |
$this->_output .= "<br /><h3>Fields</h3>" . $this->arrayToTable($merge_vars);
|
413 |
+
|
414 |
return true;
|
415 |
}
|
416 |
|
417 |
private function getQuoteEmail($quote)
|
418 |
{
|
419 |
$abandoned_cart = Mage::helper('emaildirect/diagnostic')->getAbandonedCart($quote->getId());
|
420 |
+
|
421 |
return $abandoned_cart->getEmail();
|
422 |
}
|
423 |
|
424 |
private function abandonedFull($request_only = true)
|
425 |
{
|
426 |
$quote = $this->getQuote();
|
427 |
+
|
428 |
if ($quote == null)
|
429 |
return $this->setFailure("Quote not found");
|
430 |
+
|
431 |
$abandonedDate = $quote->getUpdatedAt();
|
432 |
+
|
433 |
$email = $quote->getCustomerEmail();
|
434 |
+
|
435 |
if ($email == null)
|
436 |
$email = $this->getQuoteEmail($quote);
|
437 |
+
|
438 |
$merge_vars = array();
|
439 |
+
|
440 |
$merge_vars['FirstName'] = $quote->getData('customer_firstname');
|
441 |
$merge_vars['LastName'] = $quote->getData('customer_lastname');
|
442 |
+
|
443 |
$merge_vars['AbandonedDate'] = $abandonedDate;
|
444 |
$merge_vars['AbandonedUrl'] = Mage::helper('emaildirect/abandoned')->getAbandonedUrl($quote);
|
445 |
+
|
446 |
// Setup sequence for this store
|
447 |
Mage::helper('emaildirect/abandoned')->setupSequence();
|
448 |
+
|
449 |
Mage::helper('emaildirect/abandoned')->addSequence($merge_vars);
|
450 |
+
|
451 |
$merge_vars = Mage::helper('emaildirect/order')->getMergeOrderItems($quote, $merge_vars, "AB");
|
452 |
+
|
453 |
if (Mage::helper('emaildirect')->config('save_latest_order'))
|
454 |
{
|
455 |
$this->debug("Processing Last Order");
|
456 |
$order = Mage::helper('emaildirect/abandoned')->getLastOrder($quote);
|
457 |
+
|
458 |
if ($order != null)
|
459 |
$merge_vars = Mage::helper('emaildirect/order')->processOrderItems($order, $merge_vars);
|
460 |
else
|
461 |
$this->debug("Order not found");
|
462 |
//$this->_log("Order not found");
|
463 |
}
|
464 |
+
|
465 |
$xml = Mage::getSingleton('emaildirect/wrapper_abandoned')->getOneSubscriber($email,$merge_vars);
|
466 |
+
|
467 |
if ($request_only)
|
468 |
$this->_logger->setDebugExecuteMode('request_only');
|
469 |
else
|
470 |
$this->_logger->setDebugExecuteMode('full');
|
471 |
+
|
472 |
$xml = "<Subscribers>{$xml}</Subscribers>";
|
473 |
+
|
474 |
//Mage::getSingleton('emaildirect/wrapper_orders')->addSubscriberOrder($order->getCustomerEmail(), $order, $merge_vars);
|
475 |
$rc = Mage::getSingleton('emaildirect/wrapper_abandoned')->sendSubscribers($xml);
|
476 |
+
|
477 |
$this->_output = "<h2>Abandoned Cart Xml</h2><h3>Request Xml</h3><pre>" . htmlentities($this->_logger->formatXml($this->_logger->getDebugRequest())) . "</pre>";
|
478 |
+
|
479 |
if (!$request_only)
|
480 |
{
|
481 |
$this->_output .= "<br /><h3>Response Xml</h3><pre>" . htmlentities($this->_logger->formatXml($this->_logger->getDebugResponse())) . "</pre>";
|
482 |
}
|
483 |
return true;
|
484 |
}
|
485 |
+
|
486 |
private function trackingInfo()
|
487 |
{
|
488 |
+
|
489 |
return true;
|
490 |
}
|
491 |
}
|
app/code/community/EmailDirect/Integration/controllers/Admin/ExportController.php
CHANGED
@@ -3,9 +3,14 @@
|
|
3 |
class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Controller_Action
|
4 |
{
|
5 |
protected $_min_category_level = 2;
|
6 |
-
|
7 |
protected $_export_type = null;
|
8 |
|
|
|
|
|
|
|
|
|
|
|
9 |
public function countAction()
|
10 |
{
|
11 |
$count = "Unknown";
|
@@ -15,46 +20,46 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
15 |
$to = $this->getRequest()->getParam('to');
|
16 |
$include = $this->getRequest()->getParam('include');
|
17 |
$store = Mage::app()->getRequest()->getParam('store');
|
18 |
-
|
19 |
$orders = Mage::helper('emaildirect')->getOrderExportCollection($from, $to, $include, $store);
|
20 |
-
|
21 |
$count = $orders->getSize();
|
22 |
}
|
23 |
catch (Exception $e)
|
24 |
{
|
25 |
Mage::logException($e);
|
26 |
}
|
27 |
-
|
28 |
$this->getResponse()->setBody($count);
|
29 |
}
|
30 |
|
31 |
private function setConfigValue($name)
|
32 |
{
|
33 |
$old_value = Mage::helper('emaildirect')->exportConfig($name);
|
34 |
-
|
35 |
$new_value = $this->getRequest()->getParam($name);
|
36 |
-
|
37 |
if ($new_value != '' && $new_value != $old_value)
|
38 |
{
|
39 |
Mage::getConfig()->saveConfig("emaildirect/export/{$name}", $new_value,"default","default");
|
40 |
return true;
|
41 |
}
|
42 |
-
|
43 |
return false;
|
44 |
}
|
45 |
|
46 |
private function setConfiguration()
|
47 |
{
|
48 |
$config_options = array('include_disabled','include_already_sent');
|
49 |
-
|
50 |
$changed = false;
|
51 |
-
|
52 |
foreach ($config_options as $option)
|
53 |
{
|
54 |
if ($this->setConfigValue($option))
|
55 |
$changed = true;
|
56 |
}
|
57 |
-
|
58 |
if ($changed)
|
59 |
{
|
60 |
Mage::getConfig()->cleanCache();
|
@@ -67,51 +72,51 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
67 |
{
|
68 |
// Update export configuration options if changed before button click
|
69 |
$this->setConfiguration();
|
70 |
-
|
71 |
$this->loadLayout();
|
72 |
$this->renderLayout();
|
73 |
}
|
74 |
-
|
75 |
public function ordersAction()
|
76 |
{
|
77 |
// Update export configuration options if changed before button click
|
78 |
$this->setConfiguration();
|
79 |
-
|
80 |
$this->loadLayout();
|
81 |
$this->renderLayout();
|
82 |
}
|
83 |
-
|
84 |
private function getCategoryPath($category)
|
85 |
{
|
86 |
$name = "";
|
87 |
-
|
88 |
while ($category->parent_id != 0 && $category->level >= $this->_min_category_level)
|
89 |
{
|
90 |
if ($name != "")
|
91 |
$name = $category->getName() . "/{$name}";
|
92 |
else
|
93 |
$name = $category->getName();
|
94 |
-
|
95 |
$category = $category->getParentCategory();
|
96 |
}
|
97 |
-
|
98 |
return $name;
|
99 |
}
|
100 |
-
|
101 |
private function getProductData($id)
|
102 |
{
|
103 |
$product = Mage::getModel('catalog/product')->load($id);
|
104 |
|
105 |
$product_data = array($product->getName(), $product->getSku());
|
106 |
-
|
107 |
$product_categories = $product->getCategoryCollection()->exportToArray();
|
108 |
-
|
109 |
$category_data = array();
|
110 |
-
|
111 |
foreach($product_categories as $cat)
|
112 |
{
|
113 |
$category = Mage::getModel('catalog/category')->load($cat['entity_id']);
|
114 |
-
|
115 |
$category_data[] = $this->getCategoryPath($category);
|
116 |
}
|
117 |
|
@@ -119,56 +124,56 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
119 |
$product_data[] = implode(",",$category_data);
|
120 |
else
|
121 |
$product_data[] = "";
|
122 |
-
|
123 |
return $product_data;
|
124 |
}
|
125 |
-
|
126 |
private function getOrderData($id)
|
127 |
{
|
128 |
$order = Mage::getModel('sales/order')->load($id);
|
129 |
-
|
130 |
//EmailAddress, OrderNumber, ProductName, SKU, Quantity, PurchaseDate, UnitPrice
|
131 |
-
|
132 |
$date = $order->getCreatedAt();
|
133 |
$orderNum = $order->getIncrementId();
|
134 |
$email = $order->getCustomerEmail();
|
135 |
-
|
136 |
$items = $order->getAllItems();
|
137 |
-
|
138 |
$order_data = array();
|
139 |
-
|
140 |
if (is_array($items))
|
141 |
{
|
142 |
foreach($items as $item)
|
143 |
{
|
144 |
-
|
145 |
if ($item->getParentItemId() != null)
|
146 |
continue;
|
147 |
-
|
148 |
$row = array($email,$orderNum);
|
149 |
-
|
150 |
$qty = (int)$item->getQtyOrdered();
|
151 |
$name = $item->getName();
|
152 |
$sku = $item->getSku();
|
153 |
$price = $item->getPrice();
|
154 |
-
|
155 |
$row[] = $name;
|
156 |
$row[] = $sku;
|
157 |
$row[] = $qty;
|
158 |
$row[] = $date;
|
159 |
$row[] = $price;
|
160 |
-
|
161 |
$order_data[] = $row;
|
162 |
}
|
163 |
-
|
164 |
}
|
165 |
return $order_data;
|
166 |
}
|
167 |
-
|
168 |
private function saveRow($fields,$name)
|
169 |
{
|
170 |
$file = Mage::helper('emaildirect')->getExportFileName($name);
|
171 |
-
|
172 |
if (file_exists($file))
|
173 |
{
|
174 |
$fp = fopen($file, 'a');
|
@@ -179,30 +184,30 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
179 |
$header_fields = array('Product Name','SKU','Root Category');
|
180 |
else
|
181 |
$header_fields = array('EmailAddress', 'OrderNumber', 'ProductName', 'SKU', 'Quantity', 'PurchaseDate', 'UnitPrice');
|
182 |
-
|
183 |
$fp = fopen($file, 'w');
|
184 |
fputcsv($fp, $header_fields, ',','"');
|
185 |
}
|
186 |
|
187 |
fputcsv($fp, $fields, ',','"');
|
188 |
-
|
189 |
fclose($fp);
|
190 |
}
|
191 |
-
|
192 |
private function getMinCategoryLevel()
|
193 |
{
|
194 |
$roots = Mage::getModel('catalog/category')->load(1)->getChildren();
|
195 |
-
|
196 |
if (strpos($roots,',') === FALSE)
|
197 |
return 2;
|
198 |
return 1;
|
199 |
}
|
200 |
-
|
201 |
private function getExportType()
|
202 |
{
|
203 |
if ($this->_export_type == null)
|
204 |
$this->_export_type = $this->getRequest()->getParam('export_type', 'product');
|
205 |
-
|
206 |
return $this->_export_type;
|
207 |
}
|
208 |
|
@@ -210,17 +215,17 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
210 |
{
|
211 |
if ($this->getExportType() == 'product')
|
212 |
return $this->batchRunProducts();
|
213 |
-
|
214 |
return $this->batchRunOrders();
|
215 |
}
|
216 |
-
|
217 |
private function batchRunOrders()
|
218 |
{
|
219 |
-
if ($this->getRequest()->isPost())
|
220 |
{
|
221 |
$order_id = $this->getRequest()->getPost('id', 0);
|
222 |
$file_name = $this->getRequest()->getPost('filename', 0);
|
223 |
-
|
224 |
if (is_array($order_id))
|
225 |
{
|
226 |
foreach ($order_id as $id)
|
@@ -232,7 +237,7 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
232 |
$this->saveRow($data_row,"emaildirect_orders_{$file_name}");
|
233 |
}
|
234 |
}
|
235 |
-
|
236 |
$result = array(
|
237 |
'savedRows' => count($order_id),
|
238 |
'errors' => array()
|
@@ -246,7 +251,7 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
246 |
{
|
247 |
$this->saveRow($data_row,"emaildirect_orders_{$file_name}");
|
248 |
}
|
249 |
-
|
250 |
$result = array(
|
251 |
'savedRows' => 1,
|
252 |
'errors' => array()
|
@@ -255,16 +260,16 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
255 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
256 |
}
|
257 |
}
|
258 |
-
|
259 |
private function batchRunProducts()
|
260 |
{
|
261 |
$this->_min_category_level = $this->getMinCategoryLevel();
|
262 |
-
|
263 |
-
if ($this->getRequest()->isPost())
|
264 |
{
|
265 |
$product_id = $this->getRequest()->getPost('id', 0);
|
266 |
$file_name = $this->getRequest()->getPost('filename', 0);
|
267 |
-
|
268 |
if (is_array($product_id))
|
269 |
{
|
270 |
foreach ($product_id as $id)
|
@@ -273,7 +278,7 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
273 |
|
274 |
$this->saveRow($csv_data,"emaildirect_products_{$file_name}");
|
275 |
}
|
276 |
-
|
277 |
$result = array(
|
278 |
'savedRows' => count($product_id),
|
279 |
'errors' => array()
|
@@ -284,7 +289,7 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
284 |
$csv_data = $this->getProductData($product_id);
|
285 |
|
286 |
$this->saveRow($csv_data,"emaildirect_products_{$file_name}");
|
287 |
-
|
288 |
$result = array(
|
289 |
'savedRows' => 1,
|
290 |
'errors' => array()
|
@@ -293,11 +298,11 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
293 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
294 |
}
|
295 |
}
|
296 |
-
|
297 |
public function downloadAction()
|
298 |
{
|
299 |
$file_name = "emaildirect_" . $this->getExportType() . "s_" . $this->getRequest()->getParam('filename');
|
300 |
-
|
301 |
$file = Mage::helper('emaildirect')->getExportFileName($file_name);
|
302 |
|
303 |
$this->_prepareDownloadResponse(Mage::helper('emaildirect')->getExportFileName($file_name,false), file_get_contents($file));
|
@@ -305,7 +310,7 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
305 |
|
306 |
public function batchFinishAction()
|
307 |
{
|
308 |
-
if ($this->getRequest()->isPost())
|
309 |
{
|
310 |
$file_name = $this->getRequest()->getPost('filename', 0);
|
311 |
$store = $this->getRequest()->getPost('store', 0);
|
@@ -316,22 +321,22 @@ class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Cont
|
|
316 |
}
|
317 |
|
318 |
$url = $this->getUrl('*/*/download') . "filename/{$file_name}/export_type/" . $this->getExportType();
|
319 |
-
|
320 |
$result = array(
|
321 |
'download_link' => $url,
|
322 |
);
|
323 |
-
|
324 |
$ed_url = $this->getUrl('ed_integration/export/download') . "filename/{$file_name}/export_type/" . $this->getExportType();
|
325 |
$api = Mage::getSingleton('emaildirect/wrapper_ftp');
|
326 |
$rc = $api->upload($ed_url,"magento_" . $this->getExportType() . "s_{$file_name}.csv");
|
327 |
-
|
328 |
if (isset($rc->ErrorCode))
|
329 |
$result['error'] = "EmailDirect Error: (" . (string) $rc->ErrorCode . "): " . (string)$rc->Message;
|
330 |
-
|
331 |
if ($store != 0)
|
332 |
Mage::app()->setCurrentStore($starting_store);
|
333 |
-
|
334 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
335 |
-
}
|
336 |
}
|
337 |
}
|
3 |
class EmailDirect_Integration_Admin_ExportController extends Mage_Adminhtml_Controller_Action
|
4 |
{
|
5 |
protected $_min_category_level = 2;
|
6 |
+
|
7 |
protected $_export_type = null;
|
8 |
|
9 |
+
protected function _isAllowed()
|
10 |
+
{
|
11 |
+
return Mage::getSingleton('admin/session')->isAllowed('emaildirect/emaildirect_export');
|
12 |
+
}
|
13 |
+
|
14 |
public function countAction()
|
15 |
{
|
16 |
$count = "Unknown";
|
20 |
$to = $this->getRequest()->getParam('to');
|
21 |
$include = $this->getRequest()->getParam('include');
|
22 |
$store = Mage::app()->getRequest()->getParam('store');
|
23 |
+
|
24 |
$orders = Mage::helper('emaildirect')->getOrderExportCollection($from, $to, $include, $store);
|
25 |
+
|
26 |
$count = $orders->getSize();
|
27 |
}
|
28 |
catch (Exception $e)
|
29 |
{
|
30 |
Mage::logException($e);
|
31 |
}
|
32 |
+
|
33 |
$this->getResponse()->setBody($count);
|
34 |
}
|
35 |
|
36 |
private function setConfigValue($name)
|
37 |
{
|
38 |
$old_value = Mage::helper('emaildirect')->exportConfig($name);
|
39 |
+
|
40 |
$new_value = $this->getRequest()->getParam($name);
|
41 |
+
|
42 |
if ($new_value != '' && $new_value != $old_value)
|
43 |
{
|
44 |
Mage::getConfig()->saveConfig("emaildirect/export/{$name}", $new_value,"default","default");
|
45 |
return true;
|
46 |
}
|
47 |
+
|
48 |
return false;
|
49 |
}
|
50 |
|
51 |
private function setConfiguration()
|
52 |
{
|
53 |
$config_options = array('include_disabled','include_already_sent');
|
54 |
+
|
55 |
$changed = false;
|
56 |
+
|
57 |
foreach ($config_options as $option)
|
58 |
{
|
59 |
if ($this->setConfigValue($option))
|
60 |
$changed = true;
|
61 |
}
|
62 |
+
|
63 |
if ($changed)
|
64 |
{
|
65 |
Mage::getConfig()->cleanCache();
|
72 |
{
|
73 |
// Update export configuration options if changed before button click
|
74 |
$this->setConfiguration();
|
75 |
+
|
76 |
$this->loadLayout();
|
77 |
$this->renderLayout();
|
78 |
}
|
79 |
+
|
80 |
public function ordersAction()
|
81 |
{
|
82 |
// Update export configuration options if changed before button click
|
83 |
$this->setConfiguration();
|
84 |
+
|
85 |
$this->loadLayout();
|
86 |
$this->renderLayout();
|
87 |
}
|
88 |
+
|
89 |
private function getCategoryPath($category)
|
90 |
{
|
91 |
$name = "";
|
92 |
+
|
93 |
while ($category->parent_id != 0 && $category->level >= $this->_min_category_level)
|
94 |
{
|
95 |
if ($name != "")
|
96 |
$name = $category->getName() . "/{$name}";
|
97 |
else
|
98 |
$name = $category->getName();
|
99 |
+
|
100 |
$category = $category->getParentCategory();
|
101 |
}
|
102 |
+
|
103 |
return $name;
|
104 |
}
|
105 |
+
|
106 |
private function getProductData($id)
|
107 |
{
|
108 |
$product = Mage::getModel('catalog/product')->load($id);
|
109 |
|
110 |
$product_data = array($product->getName(), $product->getSku());
|
111 |
+
|
112 |
$product_categories = $product->getCategoryCollection()->exportToArray();
|
113 |
+
|
114 |
$category_data = array();
|
115 |
+
|
116 |
foreach($product_categories as $cat)
|
117 |
{
|
118 |
$category = Mage::getModel('catalog/category')->load($cat['entity_id']);
|
119 |
+
|
120 |
$category_data[] = $this->getCategoryPath($category);
|
121 |
}
|
122 |
|
124 |
$product_data[] = implode(",",$category_data);
|
125 |
else
|
126 |
$product_data[] = "";
|
127 |
+
|
128 |
return $product_data;
|
129 |
}
|
130 |
+
|
131 |
private function getOrderData($id)
|
132 |
{
|
133 |
$order = Mage::getModel('sales/order')->load($id);
|
134 |
+
|
135 |
//EmailAddress, OrderNumber, ProductName, SKU, Quantity, PurchaseDate, UnitPrice
|
136 |
+
|
137 |
$date = $order->getCreatedAt();
|
138 |
$orderNum = $order->getIncrementId();
|
139 |
$email = $order->getCustomerEmail();
|
140 |
+
|
141 |
$items = $order->getAllItems();
|
142 |
+
|
143 |
$order_data = array();
|
144 |
+
|
145 |
if (is_array($items))
|
146 |
{
|
147 |
foreach($items as $item)
|
148 |
{
|
149 |
+
|
150 |
if ($item->getParentItemId() != null)
|
151 |
continue;
|
152 |
+
|
153 |
$row = array($email,$orderNum);
|
154 |
+
|
155 |
$qty = (int)$item->getQtyOrdered();
|
156 |
$name = $item->getName();
|
157 |
$sku = $item->getSku();
|
158 |
$price = $item->getPrice();
|
159 |
+
|
160 |
$row[] = $name;
|
161 |
$row[] = $sku;
|
162 |
$row[] = $qty;
|
163 |
$row[] = $date;
|
164 |
$row[] = $price;
|
165 |
+
|
166 |
$order_data[] = $row;
|
167 |
}
|
168 |
+
|
169 |
}
|
170 |
return $order_data;
|
171 |
}
|
172 |
+
|
173 |
private function saveRow($fields,$name)
|
174 |
{
|
175 |
$file = Mage::helper('emaildirect')->getExportFileName($name);
|
176 |
+
|
177 |
if (file_exists($file))
|
178 |
{
|
179 |
$fp = fopen($file, 'a');
|
184 |
$header_fields = array('Product Name','SKU','Root Category');
|
185 |
else
|
186 |
$header_fields = array('EmailAddress', 'OrderNumber', 'ProductName', 'SKU', 'Quantity', 'PurchaseDate', 'UnitPrice');
|
187 |
+
|
188 |
$fp = fopen($file, 'w');
|
189 |
fputcsv($fp, $header_fields, ',','"');
|
190 |
}
|
191 |
|
192 |
fputcsv($fp, $fields, ',','"');
|
193 |
+
|
194 |
fclose($fp);
|
195 |
}
|
196 |
+
|
197 |
private function getMinCategoryLevel()
|
198 |
{
|
199 |
$roots = Mage::getModel('catalog/category')->load(1)->getChildren();
|
200 |
+
|
201 |
if (strpos($roots,',') === FALSE)
|
202 |
return 2;
|
203 |
return 1;
|
204 |
}
|
205 |
+
|
206 |
private function getExportType()
|
207 |
{
|
208 |
if ($this->_export_type == null)
|
209 |
$this->_export_type = $this->getRequest()->getParam('export_type', 'product');
|
210 |
+
|
211 |
return $this->_export_type;
|
212 |
}
|
213 |
|
215 |
{
|
216 |
if ($this->getExportType() == 'product')
|
217 |
return $this->batchRunProducts();
|
218 |
+
|
219 |
return $this->batchRunOrders();
|
220 |
}
|
221 |
+
|
222 |
private function batchRunOrders()
|
223 |
{
|
224 |
+
if ($this->getRequest()->isPost())
|
225 |
{
|
226 |
$order_id = $this->getRequest()->getPost('id', 0);
|
227 |
$file_name = $this->getRequest()->getPost('filename', 0);
|
228 |
+
|
229 |
if (is_array($order_id))
|
230 |
{
|
231 |
foreach ($order_id as $id)
|
237 |
$this->saveRow($data_row,"emaildirect_orders_{$file_name}");
|
238 |
}
|
239 |
}
|
240 |
+
|
241 |
$result = array(
|
242 |
'savedRows' => count($order_id),
|
243 |
'errors' => array()
|
251 |
{
|
252 |
$this->saveRow($data_row,"emaildirect_orders_{$file_name}");
|
253 |
}
|
254 |
+
|
255 |
$result = array(
|
256 |
'savedRows' => 1,
|
257 |
'errors' => array()
|
260 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
261 |
}
|
262 |
}
|
263 |
+
|
264 |
private function batchRunProducts()
|
265 |
{
|
266 |
$this->_min_category_level = $this->getMinCategoryLevel();
|
267 |
+
|
268 |
+
if ($this->getRequest()->isPost())
|
269 |
{
|
270 |
$product_id = $this->getRequest()->getPost('id', 0);
|
271 |
$file_name = $this->getRequest()->getPost('filename', 0);
|
272 |
+
|
273 |
if (is_array($product_id))
|
274 |
{
|
275 |
foreach ($product_id as $id)
|
278 |
|
279 |
$this->saveRow($csv_data,"emaildirect_products_{$file_name}");
|
280 |
}
|
281 |
+
|
282 |
$result = array(
|
283 |
'savedRows' => count($product_id),
|
284 |
'errors' => array()
|
289 |
$csv_data = $this->getProductData($product_id);
|
290 |
|
291 |
$this->saveRow($csv_data,"emaildirect_products_{$file_name}");
|
292 |
+
|
293 |
$result = array(
|
294 |
'savedRows' => 1,
|
295 |
'errors' => array()
|
298 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
299 |
}
|
300 |
}
|
301 |
+
|
302 |
public function downloadAction()
|
303 |
{
|
304 |
$file_name = "emaildirect_" . $this->getExportType() . "s_" . $this->getRequest()->getParam('filename');
|
305 |
+
|
306 |
$file = Mage::helper('emaildirect')->getExportFileName($file_name);
|
307 |
|
308 |
$this->_prepareDownloadResponse(Mage::helper('emaildirect')->getExportFileName($file_name,false), file_get_contents($file));
|
310 |
|
311 |
public function batchFinishAction()
|
312 |
{
|
313 |
+
if ($this->getRequest()->isPost())
|
314 |
{
|
315 |
$file_name = $this->getRequest()->getPost('filename', 0);
|
316 |
$store = $this->getRequest()->getPost('store', 0);
|
321 |
}
|
322 |
|
323 |
$url = $this->getUrl('*/*/download') . "filename/{$file_name}/export_type/" . $this->getExportType();
|
324 |
+
|
325 |
$result = array(
|
326 |
'download_link' => $url,
|
327 |
);
|
328 |
+
|
329 |
$ed_url = $this->getUrl('ed_integration/export/download') . "filename/{$file_name}/export_type/" . $this->getExportType();
|
330 |
$api = Mage::getSingleton('emaildirect/wrapper_ftp');
|
331 |
$rc = $api->upload($ed_url,"magento_" . $this->getExportType() . "s_{$file_name}.csv");
|
332 |
+
|
333 |
if (isset($rc->ErrorCode))
|
334 |
$result['error'] = "EmailDirect Error: (" . (string) $rc->ErrorCode . "): " . (string)$rc->Message;
|
335 |
+
|
336 |
if ($store != 0)
|
337 |
Mage::app()->setCurrentStore($starting_store);
|
338 |
+
|
339 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
340 |
+
}
|
341 |
}
|
342 |
}
|
app/code/community/EmailDirect/Integration/controllers/Admin/TroubleshootingController.php
CHANGED
@@ -5,6 +5,11 @@ class EmailDirect_Integration_Admin_TroubleshootingController extends Mage_Admin
|
|
5 |
private $_output = array();
|
6 |
private $_config = null;
|
7 |
|
|
|
|
|
|
|
|
|
|
|
8 |
public function indexAction()
|
9 |
{
|
10 |
$this->loadLayout();
|
5 |
private $_output = array();
|
6 |
private $_config = null;
|
7 |
|
8 |
+
protected function _isAllowed()
|
9 |
+
{
|
10 |
+
return Mage::getSingleton('admin/session')->isAllowed('emaildirect/emaildirect_troubleshooting');
|
11 |
+
}
|
12 |
+
|
13 |
public function indexAction()
|
14 |
{
|
15 |
$this->loadLayout();
|
app/code/community/EmailDirect/Integration/etc/adminhtml.xml
CHANGED
@@ -27,6 +27,26 @@
|
|
27 |
<resources>
|
28 |
<admin>
|
29 |
<children>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
<system>
|
31 |
<children>
|
32 |
<config>
|
27 |
<resources>
|
28 |
<admin>
|
29 |
<children>
|
30 |
+
<emaildirect>
|
31 |
+
<title>EmailDirect</title>
|
32 |
+
<children>
|
33 |
+
<emaildirect_abandoned module='emaildirect'>
|
34 |
+
<title>Abandoned Carts</title>
|
35 |
+
</emaildirect_abandoned>
|
36 |
+
<emaildirect_troubleshooting module='emaildirect'>
|
37 |
+
<title>Troubleshooting</title>
|
38 |
+
</emaildirect_troubleshooting>
|
39 |
+
<emaildirect_diagnostics>
|
40 |
+
<title>Diagnostics</title>
|
41 |
+
</emaildirect_diagnostics>
|
42 |
+
<emaildirect_export>
|
43 |
+
<title>Export</title>
|
44 |
+
</emaildirect_export>
|
45 |
+
<emaildirect_config>
|
46 |
+
<title>Configuration Link</title>
|
47 |
+
</emaildirect_config>
|
48 |
+
</children>
|
49 |
+
</emaildirect>
|
50 |
<system>
|
51 |
<children>
|
52 |
<config>
|
app/code/community/EmailDirect/Integration/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<EmailDirect_Integration>
|
5 |
-
<version>2.0.
|
6 |
</EmailDirect_Integration>
|
7 |
</modules>
|
8 |
<global>
|
2 |
<config>
|
3 |
<modules>
|
4 |
<EmailDirect_Integration>
|
5 |
+
<version>2.0.15</version>
|
6 |
</EmailDirect_Integration>
|
7 |
</modules>
|
8 |
<global>
|
package.xml
CHANGED
@@ -1,18 +1,20 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>EmailDirect_Integration</name>
|
4 |
-
<version>2.0.
|
5 |
<stability>stable</stability>
|
6 |
<license/>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>EmailDirect integration for magento</summary>
|
10 |
<description>EmailDirect integration for magento</description>
|
11 |
-
<notes>
|
|
|
|
|
12 |
<authors><author><name>Kevin Linden</name><user>auto-converted</user><email>Kevin@EmailDirect.com</email></author></authors>
|
13 |
-
<date>2015-
|
14 |
-
<time>
|
15 |
-
<contents><target name="magecommunity"><dir name="EmailDirect"><dir name="Integration"><dir name="Block"><dir name="Adminhtml"><dir name="Abandoned"><dir name="Details"><dir name="Tab"><dir name="Diagnostics"><file name="Status.php" hash="8706487c8f465a5ce762cd923258bb35"/></dir><file name="Cart.php" hash="09e9331f6c72157f581ad7135b7f147c"/><file name="Diagnostics.php" hash="eba18ce04ccb125ce4aa6ed5e473734a"/></dir><file name="Form.php" hash="dffc6e49eb95db2f83050706eee1fd55"/></dir><file name="Details.php" hash="9f98f4dd9ea741f9f7dd2eb018af0d7d"/><file name="Grid.php" hash="e0a15673636acb7e113fdf6e3bcd8879"/><file name="Status.php" hash="9a740fd8c63148532bbcf07d19f462df"/><file name="Tabs.php" hash="19e184e72777dfc5b0c35b7027a3e1cf"/></dir><dir name="Diagnostics"><dir name="Status"><file name="Abstract.php" hash="4a54d82d748f880fc5bb8263935ddc98"/></dir></dir><dir name="Order"><dir name="View"><dir name="Tab"><dir name="Diagnostics"><file name="Status.php" hash="b4dd8410aa9ce649e603762d5d14f314"/></dir><file name="Diagnostics.php" hash="91bb6af0c9a0e6f41d2575651e8a59ef"/></dir></dir></dir><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="25796ead15053f86d7adcd551b8b49e7"/></dir><dir name="Form"><dir name="Field"><dir name="Export"><file name="Orders.php" hash="5b101fadb6a64044b276eb07b21cf0a5"/><file name="Products.php" hash="32e13d4b7250890bf84aba87f25de03c"/><file name="Range.php" hash="4adac96fa53fa8e1449bae943a8cca80"/></dir><dir name="Signup"><file name="Test.php" hash="3b773dda25c62bc8cb28031931d67f9f"/></dir><file name="Addressmapfields.php" hash="97b75c8340d561e863a3985ad73ce228"/><file name="Api.php" hash="77dabda85973dc72227937397392c411"/><file name="Common.php" hash="6a86cce53f6df6857ea79241fa281939"/><file name="Diagnostics.php" hash="7efe5c8b90db90e9c512842388d3263d"/><file name="Info.php" hash="246de52ea5d2349ecd7f103cbba8cb8f"/><file name="Logging.php" hash="53b0b7d28d2680e479bfa89b6884802d"/><file name="Mapfields.php" hash="16894c5d76df1293e63128e349700e05"/><file name="Note.php" hash="ef99a474bbc3a828c7a618132a80fe66"/><file name="Shippingmapfields.php" hash="589a74260f394a5eae1b57ca89a74a8b"/></dir></dir></dir><dir name="Convert"><dir name="Profile"><dir name="Export"><file name="Orders.php" hash="947af2b0d8e3f7bc47c47b32cd434f18"/><file name="Products.php" hash="3f93e4789dbeb6710cd2742587d61726"/></dir><file name="Export.php" hash="ba879607ac0693e9db6251bbbc1676a1"/></dir></dir></dir><dir name="Troubleshooting"><dir name="View"><dir name="Tab"><file name="Download.php" hash="619916677df7c833e559aae74dae2aa0"/><file name="Help.php" hash="ad4007af59687653f4d6692f2b42b31d"/><file name="Info.php" hash="be5c15da32ef0e042c53d8ac007f8bd6"/><file name="Log.php" hash="a61e66923a287beee5910511b7282a0a"/><file name="Settings.php" hash="f15e57cdc6539c4da84042c98f0ab25c"/><file name="Submit.php" hash="81ae0e0636b66a329cf8f39939788d1d"/></dir><file name="Form.php" hash="e527a3a2335b109c48a69f06c1b0d01f"/></dir><file name="Status.php" hash="d140afcad424ff531bebb412539d6f1c"/><file name="Tabs.php" hash="5d4168cec60212beb87997e6391282e9"/><file name="View.php" hash="47efa0685db07fb73544ad477a0e2c85"/></dir><file name="Abandoned.php" hash="6e51c09f3c9d491f14ee6ecfb7f33f08"/></dir><dir name="Checkout"><file name="Subscribe.php" hash="a49c1e7f612d379e6509658a56f53d7d"/></dir><dir name="Customer"><dir name="Account"><file name="Lists.php" hash="e1b911c77a78995d3b3390363926ae5a"/></dir></dir><dir name="Widget"><dir name="Grid"><dir name="Column"><dir name="Renderer"><dir name="Abandoned"><file name="Minutes.php" hash="e311f6de480fd4b63aee7f46ea412372"/></dir><file name="Action.php" hash="bf2243f50c9c6dafca26a5bcb889f372"/></dir></dir></dir></dir><file name="Capture.php" hash="e44034ad875957a566d3ac89abb408ed"/><file name="Signup.php" hash="c51c2e5cb93978170a65dc4b69d197bf"/></dir><dir name="Controller"><dir name="Front"><file name="Abstract.php" hash="48d93179d5f8a6b416fd82dd8763daf9"/></dir></dir><dir name="Helper"><file name="Abandoned.php" hash="7910bd8db8a030ae22adae9469d91fe7"/><file name="Data.php" hash="9d3e0377de044475d7f6e251c56bd715"/><file name="Diagnostic.php" hash="68867fd906405a6be98e14c1568437b6"/><file name="Fields.php" hash="5fa737c45be172f55fe965975aa6db52"/><file name="Order.php" hash="e4683daf9827a5cb47f17b0104509102"/><file name="Troubleshooting.php" hash="cf422b72b445a86326e73cbc6f506e18"/></dir><dir name="Model"><dir name="Abandoned"><file name="Observer.php" hash="00f8e4f8186a6c800df932b74b147844"/></dir><dir name="Configuration"><file name="Observer.php" hash="9a188656d5f7d73c91bf4221cc6e4aac"/></dir><dir name="Customer"><file name="Observer.php" hash="cef8d32ba304c51b448343555ea6a066"/></dir><dir name="Mysql4"><dir name="Abandoned"><file name="Collection.php" hash="1a9129267942a98ac3830ceaf714c2ab"/></dir><dir name="Order"><file name="Collection.php" hash="43d343562cf7e54f1b36315aa5d1d4a7"/></dir><dir name="Session"><file name="Collection.php" hash="7d6a8283fdbc1207d709e2bbbc78906d"/></dir><file name="Abandoned.php" hash="485b3771906783d383de75ae9761e55c"/><file name="Order.php" hash="8d538a5737095a1ba0ad448c027b3afb"/><file name="Session.php" hash="516eeeb28038416dc885ed7af6a8a8b0"/></dir><dir name="Newsletter"><file name="Observer.php" hash="d3181ac610e920dead78fff5656f65de"/></dir><dir name="Observer"><file name="Abstract.php" hash="1db39dc86bed51af1d2a3b4df50099bd"/></dir><dir name="Order"><file name="Observer.php" hash="17cd32f5111f0e423ac3a5d8dd62b256"/></dir><dir name="Resource"><file name="Setup.php" hash="83ba3645f702694355f14181546db330"/></dir><dir name="System"><dir name="Config"><dir name="Source"><dir name="Export"><file name="Batch.php" hash="96c51fc5c0b947750be4e612e32c83ab"/></dir><dir name="Send"><file name="Field.php" hash="8ecffa8ccce40f3b2db6513b24eb9200"/></dir><dir name="Signup"><file name="Opacity.php" hash="8eabed4c72e7347f0376c3d4cc1023a7"/><file name="Recurrence.php" hash="e11200bbc204b00486c373d8a4e6675e"/></dir><file name="Abandoned.php" hash="9881811b94f38be90bd20a99951a1903"/><file name="Abandonedlist.php" hash="b81d7f2cb03b8482debea5cd6a2bd1c5"/><file name="Additionallist.php" hash="9f109ab04c7ae7832887572b26868e3a"/><file name="Checkoutsubscribe.php" hash="fd90252a1f19649a420dae136ad2a2ba"/><file name="List.php" hash="84c1c8e27f579d5d33992fcb15202748"/><file name="Publication.php" hash="a5bc0192605fc558fe59b37cc0462825"/><file name="Sequence.php" hash="a599f218882d2cfc68dfcf4d58a98a41"/><file name="Source.php" hash="44815cbf4ac6443032df1e7d9c4cadef"/><file name="States.php" hash="a746affc786d8165a98801e68cbf80ab"/><file name="Statuses.php" hash="9844a7a9c3b5c68df45c8f6c518acf16"/><file name="Time.php" hash="8acbb5cb33e66de1e408cf55d17a9398"/></dir></dir></dir><dir name="Wrapper"><file name="Abandoned.php" hash="ef81d36a7276737f2d0aa1a5d783a83b"/><file name="Abstract.php" hash="9e97ce6a12e0d074921bb3a1391f3648"/><file name="Database.php" hash="3cceb467358d13584baff58c043762ec"/><file name="Execute.php" hash="e38737d197b2ccd6700ec87ec1836456"/><file name="Ftp.php" hash="d5335cfb68f99761d6902dd390a3d7a8"/><file name="Lists.php" hash="425d64b9256bbdbafa899c4138e78368"/><file name="Orders.php" hash="fa1c481787b0f994c1c1f704f73d6741"/><file name="Publications.php" hash="1bebd172a8bba669d075f09589785652"/><file name="Sources.php" hash="c6caf0274f7d0c50114324bc47a490c4"/><file name="Subscribers.php" hash="53a2c24db3936b7768ae6a8a8f98f394"/><file name="Wishlist.php" hash="2ceb111bbeaa06c4f13f61281aaa5b5e"/></dir><file name="Abandoned.php" hash="b5e001d0bc059c66ef38130b7d6dcec0"/><file name="Observer.php" hash="37a2d4c63e4ef75d535426a8670764f1"/><file name="Order.php" hash="b21426543cd46f799cd0743525120fb8"/><file name="Session.php" hash="c56ecf779dbfb2dae0030935af31911a"/></dir><dir name="controllers"><dir name="Admin"><file name="AbandonedController.php" hash="7366ad52662d5494e1b0e65988ee1dc7"/><file name="DiagnosticController.php" hash="aa0f4e9bf3c22124c61c3f46729372a9"/><file name="ExportController.php" hash="3ff11560de77d99bccb2cc257d14b8ab"/><file name="TroubleshootingController.php" hash="52847165f3c24c955832455e2c27a7a6"/></dir><dir name="Customer"><file name="AccountController.php" hash="91942750c1c3d20dc31159c1ffbe8200"/></dir><file name="AbandonedController.php" hash="39c9d1a72bca9369a3121ac15f68558e"/><file name="CaptureController.php" hash="89e043bb3864617a062e915d2209dcf4"/><file name="ExportController.php" hash="7ca147debc5c1436b3bf2d9501592f33"/><file name="SignupController.php" hash="fe975d44cc11f1270d34d9d82c7d4be9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="5501d4faf3da5ba1e380017b9608e1e8"/><file name="cache.xml" hash="9f7ad708d6507ec880473689e70ef314"/><file name="config.xml" hash="d7b3fcc04cf6597d1e7258655974b970"/><file name="system.xml" hash="38f8dfb41b5fcc55490daf4d7c6e147c"/></dir><dir name="sql"><dir name="emaildirect_setup"><file name="mysql4-install-2.0.0.php" hash="bdc5e09fe949b36534c50c85fd198e66"/><file name="mysql4-upgrade-1.5.8-2.0.0.php" hash="8f33c7f6dca96cfa8210ec1fe016d95b"/><file name="mysql4-upgrade-2.0.0-2.0.14.php" hash="ead09ac13bb7798b08776dda5948f91d"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="emaildirect"><file name="emaildirect-tab.png" hash="9ddb077b74a7078ac509d79b024631a1"/><file name="emaildirect.css" hash="61d3d7b29b97f75023f2232cae6eb0c1"/><file name="logo.png" hash="2e7e39ced387c798ef27b77dd69f073e"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="emaildirect"><dir name="images"><file name="window_close.png" hash="3af14f053f360bf31f8ba2df73ec7f1e"/></dir><file name="emaildirect.css" hash="c9caf9ea168efa3b0d6f4b881bcf093c"/><file name="integration.js" hash="7980204c0f594b180b9fa336954c9229"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="emaildirect.xml" hash="7767cd483e20d1930c0f1d79fee03b2a"/></dir><dir name="template"><dir name="emaildirect"><dir name="abandoned"><dir name="details"><dir name="tab"><dir name="diagnostics"><file name="status.phtml" hash="24829356b9dba966e53fb1cfe0f192b6"/></dir><file name="cart.phtml" hash="be7ca2b147fc836c2ca547b290ffe841"/></dir><file name="form.phtml" hash="60633d212382770e99d11d24ae919e47"/></dir><file name="details.phtml" hash="9d467b97a2d773aec950bea7061c6730"/><file name="status.phtml" hash="9e7723dc1fe5f8693345db9cc7cda808"/></dir><dir name="order"><dir name="view"><dir name="tab"><dir name="diagnostics"><file name="status.phtml" hash="a3bdecb1ec08903dd1b61dce6992e190"/></dir></dir></dir></dir><dir name="system"><dir name="config"><dir name="fieldset"><file name="hint.phtml" hash="176f3ddb8ea667a64a06967351526f3c"/></dir><dir name="form"><dir name="field"><dir name="export"><file name="date_range.phtml" hash="6a37b1e58456e1dcec734c48deb8c0c1"/><file name="orders.phtml" hash="1dfa19a712b18d2c95c2f4b938f6acef"/><file name="products.phtml" hash="098b7b21b6424c2a4eea26194883a623"/></dir><dir name="signup"><file name="test.phtml" hash="636501cd90c6ab4231bea54efb16b2ff"/></dir><file name="api.phtml" hash="468f33b2a23dbe2828489c1620000c74"/><file name="array.phtml" hash="5415eeff311735624354468c886d39b5"/><file name="diagnostics.phtml" hash="3327dba9e03362077f7562e3045180b7"/><file name="info.phtml" hash="44ab79fdfc5fb5b0cd7e15e79bfd9502"/><file name="logging.phtml" hash="3c7bd2a6f48a84efca1d0f1e75097a8a"/><file name="note.phtml" hash="6625a3771ba10daba5ded5570574716f"/></dir></dir><file name="setup_check.phtml" hash="1814302f58a15fb1629446e074a7e1e0"/></dir><dir name="convert"><dir name="profile"><file name="export.phtml" hash="c829eeccb120ffe4c0b9f0ddf9c7ff9a"/></dir></dir></dir><dir name="troubleshooting"><dir name="view"><dir name="tab"><file name="download.phtml" hash="d5701a0af7a8f308467fa5552d0de6b2"/><file name="help.phtml" hash="ce11f0fb8f19a00d950266840b4ec3ce"/><file name="info.phtml" hash="bd19bb1072ce1d60a4fb7bda660a0ce7"/><file name="log.phtml" hash="724a65165770bc92ed08ea32d20c1fe7"/><file name="settings.phtml" hash="56cea7faf49b815ac8bd66896130c58c"/><file name="submit.phtml" hash="0d7df80ddbd24e499275315d91fbfd58"/></dir><file name="form.phtml" hash="d2338bfe3598e9315ca8f5ac8d9b5516"/></dir><file name="status.phtml" hash="fac61e17efe7bd4cf67a47eb67786496"/><file name="view.phtml" hash="6ddfc8c6efe25d30e63f792b19a95c84"/></dir><file name="diagnostics.phtml" hash="f1f43a89824cad9f39e599df21ac44b4"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="emaildirect.xml" hash="8cb8652ad2505bb6f0c5e80d7be60109"/></dir><dir name="template"><dir name="emaildirect"><dir name="capture"><file name="email.phtml" hash="fa273ff1a48a12eb386f58f3e3e78f66"/></dir><dir name="checkout"><file name="subscribe.phtml" hash="d57eb93aab4e0f1d58f1ec8b9ed24c50"/></dir><dir name="customer"><dir name="account"><dir name="dashboard"><file name="info.phtml" hash="50ebf53c50e5e0419dd86a6d5faa2bf9"/></dir><file name="lists.phtml" hash="101ea6709a4355786917a6845b8d52aa"/></dir></dir><dir name="signup"><file name="form.phtml" hash="3d483079d29b79ad4daf306228120c0f"/></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><file name="newsletter_subscr_success_emaildirect.html" hash="f6afb69d207bbc3f8920e7a72ac9dd07"/><file name="newsletter_unsub_success_emaildirect.html" hash="bd9f97e8f5485180d4420097b5200ef4"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="EmailDirect_Integration.xml" hash="90a441f2d0dff6c247f810274e8a76ab"/></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies/>
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>EmailDirect_Integration</name>
|
4 |
+
<version>2.0.15</version>
|
5 |
<stability>stable</stability>
|
6 |
<license/>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>EmailDirect integration for magento</summary>
|
10 |
<description>EmailDirect integration for magento</description>
|
11 |
+
<notes>Grouped product fixes.
|
12 |
+

|
13 |
+
Permissions updated to allow access to admin pages for specific roles.</notes>
|
14 |
<authors><author><name>Kevin Linden</name><user>auto-converted</user><email>Kevin@EmailDirect.com</email></author></authors>
|
15 |
+
<date>2015-08-03</date>
|
16 |
+
<time>21:17:56</time>
|
17 |
+
<contents><target name="magecommunity"><dir name="EmailDirect"><dir name="Integration"><dir name="Block"><dir name="Adminhtml"><dir name="Abandoned"><dir name="Details"><dir name="Tab"><dir name="Diagnostics"><file name="Status.php" hash="8706487c8f465a5ce762cd923258bb35"/></dir><file name="Cart.php" hash="09e9331f6c72157f581ad7135b7f147c"/><file name="Diagnostics.php" hash="eba18ce04ccb125ce4aa6ed5e473734a"/></dir><file name="Form.php" hash="dffc6e49eb95db2f83050706eee1fd55"/></dir><file name="Details.php" hash="9f98f4dd9ea741f9f7dd2eb018af0d7d"/><file name="Grid.php" hash="e0a15673636acb7e113fdf6e3bcd8879"/><file name="Status.php" hash="9a740fd8c63148532bbcf07d19f462df"/><file name="Tabs.php" hash="19e184e72777dfc5b0c35b7027a3e1cf"/></dir><dir name="Diagnostics"><dir name="Status"><file name="Abstract.php" hash="4a54d82d748f880fc5bb8263935ddc98"/></dir></dir><dir name="Order"><dir name="View"><dir name="Tab"><dir name="Diagnostics"><file name="Status.php" hash="b4dd8410aa9ce649e603762d5d14f314"/></dir><file name="Diagnostics.php" hash="91bb6af0c9a0e6f41d2575651e8a59ef"/></dir></dir></dir><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="25796ead15053f86d7adcd551b8b49e7"/></dir><dir name="Form"><dir name="Field"><dir name="Export"><file name="Orders.php" hash="5b101fadb6a64044b276eb07b21cf0a5"/><file name="Products.php" hash="32e13d4b7250890bf84aba87f25de03c"/><file name="Range.php" hash="4adac96fa53fa8e1449bae943a8cca80"/></dir><dir name="Signup"><file name="Test.php" hash="3b773dda25c62bc8cb28031931d67f9f"/></dir><file name="Addressmapfields.php" hash="97b75c8340d561e863a3985ad73ce228"/><file name="Api.php" hash="77dabda85973dc72227937397392c411"/><file name="Common.php" hash="6a86cce53f6df6857ea79241fa281939"/><file name="Diagnostics.php" hash="7efe5c8b90db90e9c512842388d3263d"/><file name="Info.php" hash="246de52ea5d2349ecd7f103cbba8cb8f"/><file name="Logging.php" hash="53b0b7d28d2680e479bfa89b6884802d"/><file name="Mapfields.php" hash="16894c5d76df1293e63128e349700e05"/><file name="Note.php" hash="ef99a474bbc3a828c7a618132a80fe66"/><file name="Shippingmapfields.php" hash="589a74260f394a5eae1b57ca89a74a8b"/></dir></dir></dir><dir name="Convert"><dir name="Profile"><dir name="Export"><file name="Orders.php" hash="947af2b0d8e3f7bc47c47b32cd434f18"/><file name="Products.php" hash="3f93e4789dbeb6710cd2742587d61726"/></dir><file name="Export.php" hash="ba879607ac0693e9db6251bbbc1676a1"/></dir></dir></dir><dir name="Troubleshooting"><dir name="View"><dir name="Tab"><file name="Download.php" hash="619916677df7c833e559aae74dae2aa0"/><file name="Help.php" hash="ad4007af59687653f4d6692f2b42b31d"/><file name="Info.php" hash="be5c15da32ef0e042c53d8ac007f8bd6"/><file name="Log.php" hash="a61e66923a287beee5910511b7282a0a"/><file name="Settings.php" hash="f15e57cdc6539c4da84042c98f0ab25c"/><file name="Submit.php" hash="81ae0e0636b66a329cf8f39939788d1d"/></dir><file name="Form.php" hash="e527a3a2335b109c48a69f06c1b0d01f"/></dir><file name="Status.php" hash="d140afcad424ff531bebb412539d6f1c"/><file name="Tabs.php" hash="5d4168cec60212beb87997e6391282e9"/><file name="View.php" hash="47efa0685db07fb73544ad477a0e2c85"/></dir><file name="Abandoned.php" hash="6e51c09f3c9d491f14ee6ecfb7f33f08"/></dir><dir name="Checkout"><file name="Subscribe.php" hash="a49c1e7f612d379e6509658a56f53d7d"/></dir><dir name="Customer"><dir name="Account"><file name="Lists.php" hash="e1b911c77a78995d3b3390363926ae5a"/></dir></dir><dir name="Widget"><dir name="Grid"><dir name="Column"><dir name="Renderer"><dir name="Abandoned"><file name="Minutes.php" hash="e311f6de480fd4b63aee7f46ea412372"/></dir><file name="Action.php" hash="bf2243f50c9c6dafca26a5bcb889f372"/></dir></dir></dir></dir><file name="Capture.php" hash="e44034ad875957a566d3ac89abb408ed"/><file name="Signup.php" hash="c51c2e5cb93978170a65dc4b69d197bf"/></dir><dir name="Controller"><dir name="Front"><file name="Abstract.php" hash="48d93179d5f8a6b416fd82dd8763daf9"/></dir></dir><dir name="Helper"><file name="Abandoned.php" hash="7910bd8db8a030ae22adae9469d91fe7"/><file name="Data.php" hash="d85791021c4d296445e545dcc7c3eb85"/><file name="Diagnostic.php" hash="68867fd906405a6be98e14c1568437b6"/><file name="Fields.php" hash="5fa737c45be172f55fe965975aa6db52"/><file name="Order.php" hash="b87142e32a71a73d9d93a4c4f4a7c202"/><file name="Troubleshooting.php" hash="cf422b72b445a86326e73cbc6f506e18"/></dir><dir name="Model"><dir name="Abandoned"><file name="Observer.php" hash="00f8e4f8186a6c800df932b74b147844"/></dir><dir name="Configuration"><file name="Observer.php" hash="9a188656d5f7d73c91bf4221cc6e4aac"/></dir><dir name="Customer"><file name="Observer.php" hash="cef8d32ba304c51b448343555ea6a066"/></dir><dir name="Mysql4"><dir name="Abandoned"><file name="Collection.php" hash="1a9129267942a98ac3830ceaf714c2ab"/></dir><dir name="Order"><file name="Collection.php" hash="43d343562cf7e54f1b36315aa5d1d4a7"/></dir><dir name="Session"><file name="Collection.php" hash="7d6a8283fdbc1207d709e2bbbc78906d"/></dir><file name="Abandoned.php" hash="485b3771906783d383de75ae9761e55c"/><file name="Order.php" hash="8d538a5737095a1ba0ad448c027b3afb"/><file name="Session.php" hash="516eeeb28038416dc885ed7af6a8a8b0"/></dir><dir name="Newsletter"><file name="Observer.php" hash="d3181ac610e920dead78fff5656f65de"/></dir><dir name="Observer"><file name="Abstract.php" hash="1db39dc86bed51af1d2a3b4df50099bd"/></dir><dir name="Order"><file name="Observer.php" hash="17cd32f5111f0e423ac3a5d8dd62b256"/></dir><dir name="Resource"><file name="Setup.php" hash="2b4fc64eaafbd5f41f95f219871275df"/></dir><dir name="System"><dir name="Config"><dir name="Source"><dir name="Export"><file name="Batch.php" hash="96c51fc5c0b947750be4e612e32c83ab"/></dir><dir name="Send"><file name="Field.php" hash="8ecffa8ccce40f3b2db6513b24eb9200"/></dir><dir name="Signup"><file name="Opacity.php" hash="8eabed4c72e7347f0376c3d4cc1023a7"/><file name="Recurrence.php" hash="e11200bbc204b00486c373d8a4e6675e"/></dir><file name="Abandoned.php" hash="9881811b94f38be90bd20a99951a1903"/><file name="Abandonedlist.php" hash="b81d7f2cb03b8482debea5cd6a2bd1c5"/><file name="Additionallist.php" hash="9f109ab04c7ae7832887572b26868e3a"/><file name="Checkoutsubscribe.php" hash="fd90252a1f19649a420dae136ad2a2ba"/><file name="List.php" hash="84c1c8e27f579d5d33992fcb15202748"/><file name="Publication.php" hash="a5bc0192605fc558fe59b37cc0462825"/><file name="Sequence.php" hash="a599f218882d2cfc68dfcf4d58a98a41"/><file name="Source.php" hash="44815cbf4ac6443032df1e7d9c4cadef"/><file name="States.php" hash="a746affc786d8165a98801e68cbf80ab"/><file name="Statuses.php" hash="9844a7a9c3b5c68df45c8f6c518acf16"/><file name="Time.php" hash="8acbb5cb33e66de1e408cf55d17a9398"/></dir></dir></dir><dir name="Wrapper"><file name="Abandoned.php" hash="ef81d36a7276737f2d0aa1a5d783a83b"/><file name="Abstract.php" hash="9e97ce6a12e0d074921bb3a1391f3648"/><file name="Database.php" hash="3cceb467358d13584baff58c043762ec"/><file name="Execute.php" hash="e38737d197b2ccd6700ec87ec1836456"/><file name="Ftp.php" hash="d5335cfb68f99761d6902dd390a3d7a8"/><file name="Lists.php" hash="425d64b9256bbdbafa899c4138e78368"/><file name="Orders.php" hash="fa1c481787b0f994c1c1f704f73d6741"/><file name="Publications.php" hash="1bebd172a8bba669d075f09589785652"/><file name="Sources.php" hash="c6caf0274f7d0c50114324bc47a490c4"/><file name="Subscribers.php" hash="53a2c24db3936b7768ae6a8a8f98f394"/><file name="Wishlist.php" hash="2ceb111bbeaa06c4f13f61281aaa5b5e"/></dir><file name="Abandoned.php" hash="b5e001d0bc059c66ef38130b7d6dcec0"/><file name="Observer.php" hash="37a2d4c63e4ef75d535426a8670764f1"/><file name="Order.php" hash="b21426543cd46f799cd0743525120fb8"/><file name="Session.php" hash="c56ecf779dbfb2dae0030935af31911a"/></dir><dir name="controllers"><dir name="Admin"><file name="AbandonedController.php" hash="a5df99cae9322d66954111aaa8be5661"/><file name="DiagnosticController.php" hash="9dd175698b69c2bf59eee728d72726dd"/><file name="ExportController.php" hash="5bb090e4997e9c45367837c66fb9fd01"/><file name="TroubleshootingController.php" hash="02dffffc761bf1ac82ac18f51c75c976"/></dir><dir name="Customer"><file name="AccountController.php" hash="91942750c1c3d20dc31159c1ffbe8200"/></dir><file name="AbandonedController.php" hash="39c9d1a72bca9369a3121ac15f68558e"/><file name="CaptureController.php" hash="89e043bb3864617a062e915d2209dcf4"/><file name="ExportController.php" hash="7ca147debc5c1436b3bf2d9501592f33"/><file name="SignupController.php" hash="fe975d44cc11f1270d34d9d82c7d4be9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="61d894b12944956c74b41f5f96956c2c"/><file name="cache.xml" hash="9f7ad708d6507ec880473689e70ef314"/><file name="config.xml" hash="c9e957ffead8e022282474d2fb835243"/><file name="system.xml" hash="38f8dfb41b5fcc55490daf4d7c6e147c"/></dir><dir name="sql"><dir name="emaildirect_setup"><file name="mysql4-install-2.0.0.php" hash="bdc5e09fe949b36534c50c85fd198e66"/><file name="mysql4-upgrade-1.5.8-2.0.0.php" hash="8f33c7f6dca96cfa8210ec1fe016d95b"/><file name="mysql4-upgrade-2.0.0-2.0.14.php" hash="ead09ac13bb7798b08776dda5948f91d"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="emaildirect"><file name="emaildirect-tab.png" hash="9ddb077b74a7078ac509d79b024631a1"/><file name="emaildirect.css" hash="61d3d7b29b97f75023f2232cae6eb0c1"/><file name="logo.png" hash="2e7e39ced387c798ef27b77dd69f073e"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="emaildirect"><dir name="images"><file name="window_close.png" hash="3af14f053f360bf31f8ba2df73ec7f1e"/></dir><file name="emaildirect.css" hash="c9caf9ea168efa3b0d6f4b881bcf093c"/><file name="integration.js" hash="7980204c0f594b180b9fa336954c9229"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="emaildirect.xml" hash="7767cd483e20d1930c0f1d79fee03b2a"/></dir><dir name="template"><dir name="emaildirect"><dir name="abandoned"><dir name="details"><dir name="tab"><dir name="diagnostics"><file name="status.phtml" hash="24829356b9dba966e53fb1cfe0f192b6"/></dir><file name="cart.phtml" hash="be7ca2b147fc836c2ca547b290ffe841"/></dir><file name="form.phtml" hash="60633d212382770e99d11d24ae919e47"/></dir><file name="details.phtml" hash="9d467b97a2d773aec950bea7061c6730"/><file name="status.phtml" hash="9e7723dc1fe5f8693345db9cc7cda808"/></dir><dir name="order"><dir name="view"><dir name="tab"><dir name="diagnostics"><file name="status.phtml" hash="a3bdecb1ec08903dd1b61dce6992e190"/></dir></dir></dir></dir><dir name="system"><dir name="config"><dir name="fieldset"><file name="hint.phtml" hash="176f3ddb8ea667a64a06967351526f3c"/></dir><dir name="form"><dir name="field"><dir name="export"><file name="date_range.phtml" hash="6a37b1e58456e1dcec734c48deb8c0c1"/><file name="orders.phtml" hash="1dfa19a712b18d2c95c2f4b938f6acef"/><file name="products.phtml" hash="098b7b21b6424c2a4eea26194883a623"/></dir><dir name="signup"><file name="test.phtml" hash="636501cd90c6ab4231bea54efb16b2ff"/></dir><file name="api.phtml" hash="468f33b2a23dbe2828489c1620000c74"/><file name="array.phtml" hash="5415eeff311735624354468c886d39b5"/><file name="diagnostics.phtml" hash="3327dba9e03362077f7562e3045180b7"/><file name="info.phtml" hash="44ab79fdfc5fb5b0cd7e15e79bfd9502"/><file name="logging.phtml" hash="3c7bd2a6f48a84efca1d0f1e75097a8a"/><file name="note.phtml" hash="6625a3771ba10daba5ded5570574716f"/></dir></dir><file name="setup_check.phtml" hash="1814302f58a15fb1629446e074a7e1e0"/></dir><dir name="convert"><dir name="profile"><file name="export.phtml" hash="c829eeccb120ffe4c0b9f0ddf9c7ff9a"/></dir></dir></dir><dir name="troubleshooting"><dir name="view"><dir name="tab"><file name="download.phtml" hash="d5701a0af7a8f308467fa5552d0de6b2"/><file name="help.phtml" hash="ce11f0fb8f19a00d950266840b4ec3ce"/><file name="info.phtml" hash="bd19bb1072ce1d60a4fb7bda660a0ce7"/><file name="log.phtml" hash="724a65165770bc92ed08ea32d20c1fe7"/><file name="settings.phtml" hash="56cea7faf49b815ac8bd66896130c58c"/><file name="submit.phtml" hash="0d7df80ddbd24e499275315d91fbfd58"/></dir><file name="form.phtml" hash="d2338bfe3598e9315ca8f5ac8d9b5516"/></dir><file name="status.phtml" hash="fac61e17efe7bd4cf67a47eb67786496"/><file name="view.phtml" hash="6ddfc8c6efe25d30e63f792b19a95c84"/></dir><file name="diagnostics.phtml" hash="f1f43a89824cad9f39e599df21ac44b4"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="emaildirect.xml" hash="8cb8652ad2505bb6f0c5e80d7be60109"/></dir><dir name="template"><dir name="emaildirect"><dir name="capture"><file name="email.phtml" hash="fa273ff1a48a12eb386f58f3e3e78f66"/></dir><dir name="checkout"><file name="subscribe.phtml" hash="d57eb93aab4e0f1d58f1ec8b9ed24c50"/></dir><dir name="customer"><dir name="account"><dir name="dashboard"><file name="info.phtml" hash="50ebf53c50e5e0419dd86a6d5faa2bf9"/></dir><file name="lists.phtml" hash="101ea6709a4355786917a6845b8d52aa"/></dir></dir><dir name="signup"><file name="form.phtml" hash="3d483079d29b79ad4daf306228120c0f"/></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><file name="newsletter_subscr_success_emaildirect.html" hash="f6afb69d207bbc3f8920e7a72ac9dd07"/><file name="newsletter_unsub_success_emaildirect.html" hash="bd9f97e8f5485180d4420097b5200ef4"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="EmailDirect_Integration.xml" hash="90a441f2d0dff6c247f810274e8a76ab"/></dir></target></contents>
|
18 |
<compatible/>
|
19 |
<dependencies/>
|
20 |
</package>
|