Delightfully_WrappedGiftCard - Version 0.1.15

Version Notes

Enhancements:

0.1.15:
Support for more configuration options: redemption url and gift description.

0.1.13:
Removed exception printouts

0.1.12:
Revised pricing definition via catalog product definition

0.1.11:
Revised Pricing rules via getFinalPrice

0.1.10:
Disable pricing rules

0.1.9:
Re-factor and extended diagnostics

0.1.8:
Removed changes to administrative view of gift cards (causing out-of-memory errors for large databases)

0.1.7:
Fixed: removed more logging messages.

0.1.6:
Fixed: removed some logging messages.

0.1.5:
- Giftwrap price appears on product page

0.1.4:
- admin view of delivery method
Fixed bug:
- delivery option displays as a numerical value instead of description on the Order Review screen

0.1.3:
- Improved analytics
- Settable giftwrap price

Download this release

Release Info

Developer James Barabas
Extension Delightfully_WrappedGiftCard
Version 0.1.15
Comparing to
See all releases


Version 0.1.15

Files changed (23) hide show
  1. app/code/community/Delightfully/WrappedGiftCard/Block/Adminhtml/Giftvoucher.php +8 -0
  2. app/code/community/Delightfully/WrappedGiftCard/Block/Adminhtml/Giftvoucher/Grid.php +20 -0
  3. app/code/community/Delightfully/WrappedGiftCard/Block/Cart/Item.php +12 -0
  4. app/code/community/Delightfully/WrappedGiftCard/Block/Multishipping/Wrappedgiftcard.php +144 -0
  5. app/code/community/Delightfully/WrappedGiftCard/Block/Product/View.php +8 -0
  6. app/code/community/Delightfully/WrappedGiftCard/Block/Wrappedgiftcard.php +138 -0
  7. app/code/community/Delightfully/WrappedGiftCard/Helper/Data.php +200 -0
  8. app/code/community/Delightfully/WrappedGiftCard/Helper/Giftvoucher/Data.php +12 -0
  9. app/code/community/Delightfully/WrappedGiftCard/Model/Giftvoucher.php +68 -0
  10. app/code/community/Delightfully/WrappedGiftCard/Model/Giftvoucher/Observer.php +54 -0
  11. app/code/community/Delightfully/WrappedGiftCard/Model/Giftvoucher/Price.php +105 -0
  12. app/code/community/Delightfully/WrappedGiftCard/Model/Observer.php +70 -0
  13. app/code/community/Delightfully/WrappedGiftCard/Model/WrappedGiftCard.php +9 -0
  14. app/code/community/Delightfully/WrappedGiftCard/etc/config.xml +130 -0
  15. app/code/community/Delightfully/WrappedGiftCard/etc/system.xml +83 -0
  16. app/design/adminhtml/default/default/layout/delightfully/wrappedgiftcard.xml +11 -0
  17. app/design/frontend/base/default/layout/delightfully/wrappedgiftcard.xml +49 -0
  18. app/design/frontend/base/default/template/delightfully/wrappedgiftcard/multishipping/wrappedgiftcard.phtml +132 -0
  19. app/design/frontend/base/default/template/delightfully/wrappedgiftcard/product/view.phtml +188 -0
  20. app/design/frontend/base/default/template/delightfully/wrappedgiftcard/wrappedgiftcard.phtml +148 -0
  21. app/etc/modules/Delightfully_WrappedGiftCard.xml +21 -0
  22. package.xml +64 -0
  23. skin/frontend/base/default/delightfully/wrappedgiftcard/css/wrappedgiftcard.css +0 -0
app/code/community/Delightfully/WrappedGiftCard/Block/Adminhtml/Giftvoucher.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Delightfully_WrappedGiftCard_Block_Adminhtml_Giftvoucher extends Magestore_Giftvoucher_Block_Adminhtml_Giftvoucher {
3
+ public function __construct()
4
+ {
5
+ parent::__construct();
6
+ $this->_blockGroup = 'delightfully_wrappedgiftcard';
7
+ }
8
+ }
app/code/community/Delightfully/WrappedGiftCard/Block/Adminhtml/Giftvoucher/Grid.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Delightfully_WrappedGiftCard_Block_Adminhtml_Giftvoucher_Grid extends Magestore_Giftvoucher_Block_Adminhtml_Giftvoucher_Grid {
5
+ protected function _prepareColumns()
6
+ {
7
+
8
+ $this->addColumn('giftvoucher_comments', array(
9
+ 'header' => Mage::helper('giftvoucher')->__('Comments'),
10
+ 'align' =>'left',
11
+ 'index' =>'giftvoucher_comments',
12
+ 'filter_index' => 'main_table.giftvoucher_comments'
13
+ ));
14
+
15
+ //$this->addExportType('*/*/exportCsv', Mage::helper('giftvoucher')->__('CSV'));
16
+ //$this->addExportType('*/*/exportXml', Mage::helper('giftvoucher')->__('XML'));
17
+
18
+ return parent::_prepareColumns();
19
+ }
20
+ }
app/code/community/Delightfully/WrappedGiftCard/Block/Cart/Item.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Delightfully_WrappedGiftCard_Block_Cart_Item extends Magestore_Giftvoucher_Block_Cart_Item {
3
+
4
+ //shim to show friendly version of product options in cart instead of internal send_friend code
5
+ public function getProductOptions(){
6
+ $options = parent::getProductOptions(); //get default relevant translated option labels & values
7
+
8
+ $dhelper = Mage::helper('delightfully_wrappedgiftcard');
9
+
10
+ return $dhelper->extendOptionsWithDeliveryMethod($options); //edit options to include correct names for delivery options
11
+ }
12
+ }
app/code/community/Delightfully/WrappedGiftCard/Block/Multishipping/Wrappedgiftcard.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Delightfully_WrappedGiftCard_Block_Multishipping_Wrappedgiftcard extends Mage_Checkout_Block_Multishipping_Success {
3
+
4
+ public function getOrder() {
5
+ return Mage::getModel('sales/order')->loadByIncrementId($this->getOrderId());
6
+ }
7
+
8
+ public function getOrderByIncrementId($incrementId) {
9
+ return Mage::getModel('sales/order')->loadByIncrementId($incrementId);
10
+ }
11
+
12
+
13
+ public function getOrderById($id) {
14
+ $orders = Mage::getModel('sales/order')
15
+ ->getCollection()
16
+ ->addAttributeToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_CANCELED))
17
+ ->addAttributeToFilter('increment_id', id)
18
+ ->getFirstItem();
19
+ return $orders;
20
+ }
21
+
22
+ public function getOrderedProduct($ordered_product) {
23
+ return Mage::getModel('catalog/product')->load($ordered_product->getProductId());
24
+ }
25
+
26
+ public function getStoreName() {
27
+ return Mage::getStoreConfig('general/store_information/name');
28
+ }
29
+ public function countWrappedCardsInOrderItems($items) {
30
+ $prescan = 0;
31
+ foreach ( $items as $item ) {
32
+ if($this->isWrappedGiftCard($item)) {
33
+ $prescan = $prescan + $this->countGiftCodes($item);
34
+ }
35
+ }
36
+ return $prescan;
37
+ }
38
+
39
+ public function countGiftCodes($item) {
40
+ if($this->isWrappedEnterpriseGiftCard($item)) {
41
+ return 1;
42
+ }
43
+ if($this->isWrappedMagestoreGiftVoucher($item)) {
44
+ return $this->countMagestoreGiftVoucherCodes($item);
45
+ }
46
+ return 0;
47
+ }
48
+
49
+ public function countMagestoreGiftVoucherCodes($item) {
50
+ $dhelper = Mage::helper('delightfully_wrappedgiftcard');
51
+ return count($dhelper->getVoucherCodesForItem($item));
52
+ }
53
+
54
+ public function isWrappedEnterpriseGiftCard($item) {
55
+ //check if matches by DLYGC SKU
56
+ return preg_match('/DLYGC/',$item->_data['sku']);
57
+ }
58
+
59
+ public function isWrappedMagestoreGiftVoucher($item) {
60
+ //check if matches by type
61
+ $prodtype = $item->_data['product_type'];
62
+ if('giftvoucher' == $prodtype) {
63
+ //check if voucher gift has Delightfully wrapping selected.
64
+ $opts = $item->getProductOptionByCode('info_buyRequest');
65
+ if($opts['send_friend'] == 2) {
66
+ return true;
67
+ }
68
+ }
69
+ return false;
70
+ }
71
+
72
+ public function isWrappedGiftCard($item) {
73
+ if($this->isWrappedEnterpriseGiftCard($item)) {
74
+ return true;
75
+ }
76
+ if($this->isWrappedMagestoreGiftVoucher($item)) {
77
+ return true;
78
+ }
79
+ return false;
80
+ }
81
+
82
+ public function getAPIParamsForItem($item,$transaction,$count,$codenum) {
83
+ if($this->isWrappedEnterpriseGiftCard($item)) {
84
+ return $this->getAPIParamsForEnterpriseGiftCard($item,$transaction,$count,$codenum);
85
+ }
86
+ if($this->isWrappedMagestoreGiftVoucher($item)) {
87
+ return $this->getAPIParamsForMagestoreGiftVoucher($item,$transaction,$count,$codenum);
88
+ }
89
+ return array();
90
+ }
91
+
92
+ public function getAPIParamsForEnterpriseGiftCard($item,$transaction,$count,$codenum) {
93
+
94
+ $dhelper = Mage::helper('delightfully_wrappedgiftcard');
95
+ $params = $dhelper->getBaseAPIParams();
96
+
97
+ $opt = $item->getProductOptions();
98
+ $code = "PENDING";
99
+ $codes = $opt['giftcard_created_codes'];
100
+ if($codes[$codenum]) $code = $codes[$codenum];
101
+
102
+ $params['sender'] = $opt['giftcard_sender_name'];
103
+ $params['recipient'] = $opt['giftcard_recipient_name'];
104
+ $params['from'] = $opt['giftcard_sender_email'];
105
+ $params['to'] = $opt['giftcard_recipient_email'];
106
+ $params['message'] = $opt['giftcard_message'];
107
+ $params['code'] = $code;
108
+ $txn = "".$transaction . "_" . $count . "_" . $code;
109
+ $params['transaction'] = $txn;
110
+ return $params;
111
+ }
112
+
113
+ public function getAPIParamsForMagestoreGiftVoucher($item,$transaction,$count, $codenum) {
114
+
115
+ $dhelper = Mage::helper('delightfully_wrappedgiftcard');
116
+
117
+ $description = Mage::getStoreConfig('delightfully_options/product/gift_description');
118
+
119
+ $params = $dhelper->getBaseAPIParams();
120
+
121
+
122
+ $opt = $item->getProductOptions();
123
+ $code = "PENDING";
124
+ $codes = $dhelper->getVoucherCodesForItem($item);
125
+ $sender = $dhelper->getSenderParamsForItem($item);
126
+
127
+ if($codes[$codenum]) $code = $codes[$codenum];//can be multiple codes in same item
128
+
129
+ $params['sender'] = $sender['sender'];
130
+ $params['recipient'] = $opt['info_buyRequest']['recipient_name'];
131
+ $params['from'] = $sender['from'];
132
+ $params['to'] = $opt['info_buyRequest']['recipient_email'];
133
+ $params['message'] = $opt['info_buyRequest']['message'];
134
+ $params['code'] = $code;
135
+ $txn = "".$transaction . "_" . $count . "_" . $code;
136
+ $params['transaction'] = $txn;
137
+ $paramas['value'] = $sender['value'];
138
+ $params['description'] = $sender['amount'] . " " .$description;
139
+ $params['schedule'] = $opt['info_buyRequest']['day_to_send'];
140
+ return $params;
141
+ }
142
+
143
+ }
144
+
app/code/community/Delightfully/WrappedGiftCard/Block/Product/View.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Delightfully_WrappedGiftCard_Block_Product_View extends Magestore_Giftvoucher_Block_Product_View {
3
+
4
+ public function getGiftAmount($product){
5
+ return parent::getGiftAmount($product);
6
+ }
7
+
8
+ }
app/code/community/Delightfully/WrappedGiftCard/Block/Wrappedgiftcard.php ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Delightfully_WrappedGiftCard_Block_Wrappedgiftcard extends Mage_Checkout_Block_Onepage_Success {
3
+ public function getOrder() {
4
+ return Mage::getModel('sales/order')->loadByIncrementId($this->getOrderId());
5
+ }
6
+
7
+ public function getOrderedProduct($ordered_product) {
8
+ return Mage::getModel('catalog/product')->load($ordered_product->getProductId());
9
+ }
10
+
11
+ public function getStoreName() {
12
+ return Mage::getStoreConfig('general/store_information/name');
13
+ }
14
+
15
+ public function countWrappedCardsInOrderItems($items) {
16
+ $prescan = 0;
17
+ foreach ( $items as $item ) {
18
+ if($this->isWrappedGiftCard($item)) {
19
+ $prescan = $prescan + $this->countGiftCodes($item);
20
+ }
21
+ }
22
+ return $prescan;
23
+ }
24
+
25
+ public function countGiftCodes($item) {
26
+ if($this->isWrappedEnterpriseGiftCard($item)) {
27
+ return 1;
28
+ }
29
+ if($this->isWrappedMagestoreGiftVoucher($item)) {
30
+ return $this->countMagestoreGiftVoucherCodes($item);
31
+ }
32
+ return 0;
33
+ }
34
+
35
+ public function countMagestoreGiftVoucherCodes($item) {
36
+ $dhelper = Mage::helper('delightfully_wrappedgiftcard');
37
+ return count($dhelper->getVoucherCodesForItem($item));
38
+ }
39
+
40
+ public function isWrappedEnterpriseGiftCard($item) {
41
+ //check if matches by DLYGC SKU
42
+ return preg_match('/DLYGC/',$item->_data['sku']);
43
+ }
44
+
45
+ public function isAnyMagestoreGiftVoucher($item) {
46
+ $prodtype = $item->_data['product_type'];
47
+ return ('giftvoucher' == $prodtype);
48
+ }
49
+
50
+ public function isWrappedMagestoreGiftVoucher($item) {
51
+ //check if matches by type
52
+ $prodtype = $item->_data['product_type'];
53
+ if('giftvoucher' == $prodtype) {
54
+ //check if voucher gift has Delightfully wrapping selected.
55
+ $opts = $item->getProductOptionByCode('info_buyRequest');
56
+ if($opts['send_friend'] == 2) {
57
+ return true;
58
+ }
59
+ }
60
+ return false;
61
+ }
62
+
63
+ public function isWrappedGiftCard($item) {
64
+ if($this->isWrappedEnterpriseGiftCard($item)) {
65
+ return true;
66
+ }
67
+ if($this->isWrappedMagestoreGiftVoucher($item)) {
68
+ return true;
69
+ }
70
+ return false;
71
+ }
72
+
73
+ public function getAPIParamsForItem($item,$transaction,$count,$codenum) {
74
+ if($this->isWrappedEnterpriseGiftCard($item)) {
75
+ return $this->getAPIParamsForEnterpriseGiftCard($item,$transaction,$count,$codenum);
76
+ }
77
+ if($this->isWrappedMagestoreGiftVoucher($item)) {
78
+ return $this->getAPIParamsForMagestoreGiftVoucher($item,$transaction,$count,$codenum);
79
+ }
80
+ return array();
81
+ }
82
+
83
+ public function getAPIParamsForEnterpriseGiftCard($item,$transaction,$count,$codenum) {
84
+
85
+
86
+ $dhelper = Mage::helper('delightfully_wrappedgiftcard');
87
+ $params = $dhelper->getBaseAPIParams();
88
+
89
+ $opt = $item->getProductOptions();
90
+ $code = "PENDING";
91
+ $codes = $opt['giftcard_created_codes'];
92
+ if($codes[$codenum]) $code = $codes[$codenum];
93
+
94
+ $params['sender'] = $opt['giftcard_sender_name'];
95
+ $params['recipient'] = $opt['giftcard_recipient_name'];
96
+ $params['from'] = $opt['giftcard_sender_email'];
97
+ $params['to'] = $opt['giftcard_recipient_email'];
98
+ $params['message'] = $opt['giftcard_message'];
99
+ $params['code'] = $code;
100
+
101
+ $txn = "".$transaction . "_" . $count . "_" . $code;
102
+ $params['transaction'] = $txn;
103
+ return $params;
104
+ }
105
+
106
+ public function getAPIParamsForMagestoreGiftVoucher($item,$transaction,$count, $codenum) {
107
+
108
+
109
+ $dhelper = Mage::helper('delightfully_wrappedgiftcard');
110
+
111
+
112
+ $description = Mage::getStoreConfig('delightfully_options/product/gift_description');
113
+
114
+ $params = $dhelper->getBaseAPIParams();
115
+
116
+
117
+ $opt = $item->getProductOptions();
118
+ $code = "PENDING";
119
+ $codes = $dhelper->getVoucherCodesForItem($item);
120
+ $sender = $dhelper->getSenderParamsForItem($item);
121
+
122
+ if($codes[$codenum]) $code = $codes[$codenum];//can be multiple codes in same item
123
+
124
+ $params['sender'] = $sender['sender'];
125
+ $params['recipient'] = $opt['info_buyRequest']['recipient_name'];
126
+ $params['from'] = $sender['from'];
127
+ $params['to'] = $opt['info_buyRequest']['recipient_email'];
128
+ $params['message'] = $opt['info_buyRequest']['message'];
129
+ $params['code'] = $code;
130
+ $txn = "".$transaction . "_" . $count . "_" . $code;
131
+ $params['transaction'] = $txn;
132
+ $paramas['value'] = $sender['value'];
133
+ $params['description'] = $sender['amount'] . " " .$description;
134
+ $params['schedule'] = $opt['info_buyRequest']['day_to_send'];
135
+ return $params;
136
+ }
137
+
138
+ }
app/code/community/Delightfully/WrappedGiftCard/Helper/Data.php ADDED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Delightfully_WrappedGiftCard_Helper_Data extends Mage_Core_Helper_Abstract {
3
+
4
+
5
+ public function extendOptionsWithDeliveryMethod($options) {
6
+
7
+ $optionLabels = Mage::helper('giftvoucher')->getGiftVoucherOptions(); //get all translated label names
8
+
9
+ $found = false;
10
+
11
+ //find the option with translated name matching send_friend internal name
12
+ foreach ($options as $index=>$value) {
13
+ if ($options[$index] && $options[$index]['label'] == $optionLabels['send_friend']) {
14
+ $found = true;
15
+ }
16
+ }
17
+ $extraOptions = array();
18
+ if(!$found) {
19
+ $extraOptions[] = array('label' => $optionLabels['send_friend'],'value' => 0); //show default if no options set
20
+ }
21
+ $options = array_merge($extraOptions,$options);
22
+
23
+ //rewrite option value for send_friend option
24
+ foreach ($options as $index=>$value) {
25
+ if ($options[$index] && $options[$index]['label'] == $optionLabels['send_friend']) {
26
+ $sendval = $options[$index]['value'];
27
+
28
+ if($sendval == 1) {
29
+ $options[$index]['value'] = __('Email to Friend');
30
+ } else if($sendval == 2) {
31
+ $options[$index]['value'] = __('Virtual Gift Wrap (after checkout)');
32
+ } else {
33
+ $options[$index]['value'] = __('Email to Purchaser');
34
+ }
35
+ $found = true;
36
+ }
37
+ }
38
+
39
+ return $options;
40
+ }
41
+
42
+ public function addItemFilter($collection, $itemId){
43
+ if ($collection->hasFlag('add_item_filer') && $collection->getFlag('add_item_filer')) return $collection;
44
+ $collection->setFlag('add_item_filer',true);
45
+
46
+ $collection->getSelect()->joinLeft(
47
+ array('history' => $collection->getTable('giftvoucher/history')),
48
+ 'main_table.giftvoucher_id = history.giftvoucher_id',
49
+ array('order_item_id')
50
+ )->where('history.order_item_id = ?',$itemId)
51
+ ->where('history.action = ?',Magestore_Giftvoucher_Model_Actions::ACTIONS_CREATE);
52
+
53
+ return $collection;
54
+ }
55
+
56
+ //TODO: Remove (dupe)
57
+ public function getVoucherCodes($item) {
58
+
59
+ if ($options = $item->getProductOptionByCode('info_buyRequest'))
60
+ foreach (Mage::helper('giftvoucher')->getGiftVoucherOptions() as $code=>$label)
61
+ if ($options[$code])
62
+ $result[] = array(
63
+ 'label' => $label,
64
+ 'value' => $options[$code],
65
+ 'option_value' => $options[$code],
66
+ );
67
+ $collection = Mage::getModel('giftvoucher/giftvoucher')->getCollection();
68
+
69
+ $giftVouchers = $collection->addItemFilter($item->getId());
70
+
71
+
72
+
73
+ if ($giftVouchers->getSize()){
74
+ $giftVouchersCode = array();
75
+ foreach ($giftVouchers as $giftVoucher){
76
+ $currency = Mage::getModel('directory/currency')->load($giftVoucher->getCurrency());
77
+ $balance = $giftVoucher->getBalance();
78
+ if ($currency) $balance = $currency->format($balance,array(),false);
79
+ $giftVouchersCode[] = $giftVoucher->getGiftCode().' ('.$balance.') ';
80
+ }
81
+ $codes = implode(' ',$giftVouchersCode);
82
+ $result[] = array(
83
+ 'label' => $this->__('Gift Card Code'),
84
+ 'value' => $codes,
85
+ 'option_value' => $codes,
86
+ );
87
+ }
88
+ //error_log(print_r($result,TRUE));
89
+ return $result;
90
+ }
91
+
92
+
93
+ public function getVoucherCodesForItem($item) {
94
+
95
+ if ($options = $item->getProductOptionByCode('info_buyRequest'))
96
+ /*
97
+ foreach (Mage::helper('giftvoucher')->getGiftVoucherOptions() as $code=>$label)
98
+ if (array_key_exists($code,$options))
99
+ $result[] = array(
100
+ 'label' => $label,
101
+ 'value' => $options[$code],
102
+ 'option_value' => $options[$code],
103
+ );
104
+ */
105
+ $itemId = $item->getId();
106
+ if(!$itemId) {
107
+ $itemId = $item->_data['item_id'];
108
+ }
109
+ $collection = Mage::getModel('giftvoucher/giftvoucher')->getCollection();
110
+ $giftVouchers = $collection->addItemFilter($itemId);
111
+ if ($giftVouchers->getSize()){
112
+ $giftVouchersCode = array();
113
+ foreach ($giftVouchers as $giftVoucher){
114
+ $giftVouchersCode[] = $giftVoucher->getGiftCode();
115
+ }
116
+ }
117
+ //error_log(print_r($result,TRUE));
118
+ return $giftVouchersCode;
119
+ }
120
+
121
+ public function getSenderParamsForItem($item) {
122
+
123
+ $params = array();
124
+
125
+
126
+ $giftVouchers = Mage::getModel('giftvoucher/giftvoucher')->getCollection()->addItemFilter($item->getId());
127
+ if ($giftVouchers->getSize()){
128
+ foreach ($giftVouchers as $giftVoucher){
129
+ $params['from'] = $giftVoucher->getCustomerEmail();
130
+ $params['sender'] = $giftVoucher->getCustomerName();
131
+
132
+ $params['amount'] = $giftVoucher->getBalanceFormated();
133
+ $params['value'] = $giftVoucher->getBalance();
134
+
135
+ }
136
+ }
137
+ //error_log(print_r($result,TRUE));
138
+ return $params;
139
+ }
140
+
141
+ public function makeAuthorizeCallWithParams($params) {
142
+
143
+ $protocol = "https";
144
+ $host = "delightfully.com";
145
+
146
+ $method = "GET";
147
+ $authpath = "/api/partner/authorize";
148
+
149
+
150
+ $query = array();
151
+
152
+
153
+ foreach ($params as $param=>$value)
154
+ {
155
+ if($param != 'merchant') {
156
+ //replace tilde in case any urls require literal ~ to function despite RFC 1738
157
+ $param = str_replace('%7E', '~', rawurlencode($param));
158
+ $value = str_replace('%7E', '~', rawurlencode($value));
159
+ $query[] = $param.'='.$value;
160
+ }
161
+ }
162
+ $query = implode('&', $query);
163
+ $request = $protocol.'://'.$host.$authpath.'?'.$query;
164
+ $response = @file_get_contents($request);
165
+ //error_log(print_r($response,TRUE));
166
+ return $response;
167
+ }
168
+
169
+
170
+ public function makeWrapURL($params) {
171
+
172
+ $protocol = "https";
173
+ $host = "delightfully.com";
174
+
175
+ $wrappath = "/partner/wrap";
176
+
177
+ return $protocol.'://'.$host.$wrappath.'?merchant='.rawurlencode($params['merchant']).'&transaction='.rawurlencode($params['transaction']);
178
+ }
179
+
180
+ public function getBaseAPIParams() {
181
+
182
+
183
+
184
+ $authkey = Mage::getStoreConfig('delightfully_options/account/key');
185
+ $merchant = Mage::getStoreConfig('delightfully_options/account/merchant');
186
+ $redeem = Mage::getStoreConfig('delightfully_options/product/redeem_url');
187
+
188
+ //possible auto-generation of redeem url
189
+ //$redeem = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
190
+
191
+ if($redeem) {
192
+ $params['redeem'] = $redeem;
193
+ }
194
+
195
+ $params['key'] = $authkey;
196
+ $params['merchant'] = $merchant;
197
+
198
+ return $params;
199
+ }
200
+ }
app/code/community/Delightfully/WrappedGiftCard/Helper/Giftvoucher/Data.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Delightfully_WrappedGiftCard_Helper_Giftvoucher_Data extends Magestore_Giftvoucher_Helper_Data {
3
+
4
+ //Get the list of labels we want to display data for
5
+ public function getGiftVoucherOptions() {
6
+ $optionLabels = parent::getGiftVoucherOptions();
7
+ $options1['send_friend'] = $this->__('Delivery Method');
8
+
9
+ return array_merge($options1,$optionLabels);
10
+ }
11
+
12
+ }
app/code/community/Delightfully/WrappedGiftCard/Model/Giftvoucher.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Delightfully_WrappedGiftCard_Model_Giftvoucher extends Magestore_Giftvoucher_Model_Giftvoucher {
4
+
5
+ /*obnoxious lengths to get something that should have been saved in gifvoucher model to begin with*/
6
+ public function getDeliveryType() {
7
+ $giftCardId = $this->getId(); //may have not been created yet.
8
+
9
+ //get card history by giftvoucher_id
10
+ $history = Mage::getResourceModel('giftvoucher/history_collection')
11
+ ->addFieldToFilter('giftvoucher_id', $giftCardId)
12
+ ->addFieldToFilter('action', Magestore_Giftvoucher_Model_Actions::ACTIONS_CREATE)
13
+ ->getFirstItem();
14
+
15
+ //get original order item from order_item_id in history entry
16
+ $orderItem = Mage::getModel('sales/order_item')->load($history->getOrderItemId());
17
+
18
+ if (!$history->getOrderIncrementId() || !$history->getOrderItemId()) {
19
+ //error_log("Failed to find delivery type from history");
20
+ return -1;
21
+
22
+ }
23
+ $requestInfo = $orderItem->getProductOptionByCode('info_buyRequest');
24
+ //error_log("Delivery type: " . print_r($requestInfo['send_friend'],TRUE));
25
+ return $requestInfo['send_friend'];
26
+ }
27
+
28
+
29
+ public function sendEmailToRecipient() {
30
+ $dtype = $this->getDeliveryType();
31
+ if($dtype < 2) {
32
+ return parent::sendEmailToRecipient();
33
+ } else {
34
+ //error_log('skipping recipient email for send_friend: '.$dtype);
35
+ return 1;
36
+ }
37
+ }
38
+
39
+ public function sendEmail(){
40
+
41
+ $dtype = $this->getDeliveryType();
42
+
43
+ //Mage::log($dtype,null,'dly.log');
44
+
45
+ if($dtype < 2) {
46
+ return parent::sendEmail();
47
+ } else {
48
+ //dummy send
49
+ /*
50
+ $store = Mage::app()->getStore($this->getStoreId());
51
+ $translate = Mage::getSingleton('core/translate');
52
+ $translate->setTranslateInline(false);
53
+ $mailSent = 0;
54
+
55
+ if ($this->getRecipientEmail()){
56
+ */
57
+ $mailSent += $this->sendEmailToRecipient();
58
+ /*
59
+ }
60
+ */
61
+ $this->setEmailSent($mailSent);
62
+ //$translate->setTranslateInline(true);
63
+ return $this;
64
+
65
+ }
66
+ }
67
+
68
+ }
app/code/community/Delightfully/WrappedGiftCard/Model/Giftvoucher/Observer.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Delightfully_WrappedGiftCard_Model_Giftvoucher_Observer extends Magestore_Giftvoucher_Model_Observer
4
+
5
+ {
6
+ public function orderPlaceBefore($observer) {
7
+ parent::orderPlaceBefore($observer);
8
+ $order = $observer->getEvent()->getOrder();
9
+ //gift vouchers need order items to have been saved before giftvoucher is created in order placement. Multishipping needs this extra save.
10
+ $order->save();
11
+ }
12
+
13
+ public function orderPlaceAfter($observer) {
14
+
15
+ parent::orderPlaceAfter($observer);
16
+
17
+ $order = $observer->getEvent ()->getOrder ();
18
+
19
+ $orderIncrementId = $order->getIncrementId();
20
+ //get card history entries for this order
21
+ $giftHistories = Mage::getResourceModel('giftvoucher/history_collection')
22
+ ->addFieldToFilter('order_increment_id', $orderIncrementId);
23
+
24
+ foreach ( $giftHistories as $gift ) {
25
+ $voucherId = $gift->getGiftvoucherId();
26
+
27
+ $orderItem = Mage::getModel('sales/order_item')->load($gift->getOrderItemId());
28
+
29
+ $buyRequest = $orderItem->getProductOptionByCode('info_buyRequest');
30
+
31
+ $giftVoucher = Mage::getModel('giftvoucher/giftvoucher')->load($voucherId);
32
+
33
+ $methodText = "";
34
+ $method = $buyRequest ['send_friend']; {
35
+ if($method == 2) {
36
+ $methodText = "Via Delightfully";
37
+ } else if ($method == 1) {
38
+ $methodText = "To friend via email";
39
+ } else {
40
+ $methodText = "Send to self";
41
+ }
42
+ }
43
+ $oldComments = $giftVoucher->getData('giftvoucher_comments');
44
+ if($oldComments) {
45
+ $methodText = $oldComments."\n".$methodText;
46
+ }
47
+ $giftVoucher->setData ( 'giftvoucher_comments', $methodText )->save ();
48
+
49
+ $gift->setData('comments', $methodText)->save();
50
+
51
+ }
52
+ }
53
+
54
+ }
app/code/community/Delightfully/WrappedGiftCard/Model/Giftvoucher/Price.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Delightfully_WrappedGiftCard_Model_Giftvoucher_Price extends Magestore_Giftvoucher_Model_Product_Price
3
+ {
4
+ /*
5
+ protected function _applyOptionsPrice($product, $qty, $finalPrice){
6
+ $finalPriceOut = $finalPrice;
7
+ try {
8
+ $finalPriceOut = parent::_applyOptionsPrice($product,$qty,$finalPrice);
9
+ } catch (Exception $e) {
10
+ Mage::log('Unable to get parent options price.', null, 'dly.log');
11
+ Mage::logException($e);
12
+ Mage::log(array_walk(debug_backtrace(),create_function('$a,$b','print "{$a[\'function\']}()(".basename($a[\'file\']).":{$a[\'line\']}); ";')), null, 'dly.log');
13
+ }
14
+ //apply fees (based on Delightfully-specific options)
15
+ $wrappingFee = -1;
16
+
17
+ try {
18
+ $wrappingFee = Mage::getStoreConfig('delightfully_options/product/wrap_price');
19
+ } catch (Exception $e) {
20
+ Mage::logException($e);
21
+ }
22
+ if(!$wrappingFee || $wrappingFee == -1) {
23
+ $wrappingFee = 0.0;
24
+ Mage::log('no wrapping fee setting found', null, 'dly.log');
25
+ Mage::log(array_walk(debug_backtrace(),create_function('$a,$b','print "{$a[\'function\']}()(".basename($a[\'file\']).":{$a[\'line\']}); ";')), null, 'dly.log');
26
+ }
27
+ $emailFee = 0.00;
28
+ $selfFee = 0.00;
29
+
30
+ $sendMethodOption = 0;
31
+
32
+ try {
33
+ $sendMethodOption = $product->getCustomOption('send_friend');
34
+ } catch (Exception $e) {
35
+ Mage::log('no delivery method found', null, 'dly.log');
36
+ Mage::logException($e);
37
+ Mage::log(array_walk(debug_backtrace(),create_function('$a,$b','print "{$a[\'function\']}()(".basename($a[\'file\']).":{$a[\'line\']}); ";')), null, 'dly.log');
38
+ }
39
+
40
+ if ($sendMethodOption){
41
+ $method = $sendMethodOption->getValue();
42
+ if($method == 2) {
43
+ $finalPriceOut = $finalPriceOut + $wrappingFee;
44
+ } else if($method == 1) {
45
+ $finalPriceOut = $finalPriceOut + $emailFee;
46
+ } else if($method == 0) {
47
+ $finalPriceOut = $finalPriceOut + $selfFee;
48
+ }
49
+ }
50
+
51
+ return $finalPriceOut;
52
+ }
53
+ }
54
+ */
55
+ // get final price for catalog rule
56
+ public function getFinalPrice($qty=null, $product) {
57
+
58
+ $finalPriceOut = 0;
59
+ try {
60
+ $finalPriceOut = parent::getFinalPrice($qty, $product);
61
+ } catch (Exception $e) {
62
+ //Mage::log('Unable to get parent options price.', null, 'dly.log');
63
+ //Mage::logException($e);
64
+ //Mage::log(array_walk(debug_backtrace(),create_function('$a,$b','print "{$a[\'function\']}()(".basename($a[\'file\']).":{$a[\'line\']}); ";')), null, 'dly.log');
65
+ }
66
+ //apply fees (based on Delightfully-specific options)
67
+ $wrappingFee = -1;
68
+
69
+ try {
70
+ $wrappingFee = Mage::getStoreConfig('delightfully_options/product/wrap_price');
71
+ } catch (Exception $e) {
72
+ //Mage::logException($e);
73
+ }
74
+ if(!$wrappingFee || $wrappingFee == -1) {
75
+ $wrappingFee = 0.0;
76
+ //Mage::log('no wrapping fee setting found', null, 'dly.log');
77
+ //Mage::log(array_walk(debug_backtrace(),create_function('$a,$b','print "{$a[\'function\']}()(".basename($a[\'file\']).":{$a[\'line\']}); ";')), null, 'dly.log');
78
+ }
79
+ $emailFee = 0.00;
80
+ $selfFee = 0.00;
81
+
82
+ $sendMethodOption = 0;
83
+
84
+ try {
85
+ $sendMethodOption = $product->getCustomOption('send_friend');
86
+ } catch (Exception $e) {
87
+ //Mage::log('no delivery method found', null, 'dly.log');
88
+ //Mage::logException($e);
89
+ //Mage::log(array_walk(debug_backtrace(),create_function('$a,$b','print "{$a[\'function\']}()(".basename($a[\'file\']).":{$a[\'line\']}); ";')), null, 'dly.log');
90
+ }
91
+
92
+ if ($sendMethodOption){
93
+ $method = $sendMethodOption->getValue();
94
+ if($method == 2) {
95
+ $finalPriceOut = $finalPriceOut + $wrappingFee;
96
+ } else if($method == 1) {
97
+ $finalPriceOut = $finalPriceOut + $emailFee;
98
+ } else if($method == 0) {
99
+ $finalPriceOut = $finalPriceOut + $selfFee;
100
+ }
101
+ }
102
+
103
+ return $finalPriceOut;
104
+ }
105
+ }
app/code/community/Delightfully/WrappedGiftCard/Model/Observer.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This stub prevents email from being sent to recipients of a gift card that has an SKU containing DLYGC.
5
+ * Attempt a future-proof against later core changes -- overwrite all emails with $replace_email before call to generateGiftCardAccounts
6
+ * and replace emails after.
7
+ */
8
+
9
+ class Delightfully_WrappedGiftCard_Model_Observer extends Enterprise_GiftCard_Model_Observer
10
+
11
+ {
12
+
13
+
14
+ /**
15
+ * Generate gift card accounts after order save
16
+ *
17
+ * @param Varien_Event_Observer $observer
18
+ * @return Enterprise_GiftCard_Model_Observer
19
+ */
20
+ public function generateGiftCardAccounts(Varien_Event_Observer $observer)
21
+ {
22
+
23
+ $replace_email = "concierge@delightfully.com";
24
+
25
+ //change the destination email before we run code that sends giftcard email
26
+ $emails = array();
27
+
28
+ $order = $observer->getEvent()->getOrder();
29
+ $requiredStatus = Mage::getStoreConfig(Enterprise_GiftCard_Model_Giftcard::XML_PATH_ORDER_ITEM_STATUS, $order->getStore());
30
+
31
+ foreach ($order->getAllItems() as $item) {
32
+ if ($item->getProductType() == Enterprise_GiftCard_Model_Catalog_Product_Type_Giftcard::TYPE_GIFTCARD) {
33
+ if(preg_match('/DLYGC/',$item->getSku())) {
34
+ Mage::log("Modifying email address for gift card notification");
35
+
36
+ $options = $item->getProductOptions();
37
+
38
+ array_unshift($emails,$options['giftcard_recipient_email']);
39
+
40
+ $options['giftcard_recipient_email'] = $replace_email;
41
+
42
+ $item->setProductOptions($options);
43
+
44
+ }
45
+ }
46
+ }
47
+
48
+
49
+ //Now call the superclass to perform default giftcard creation
50
+ parent::generateGiftCardAccounts($observer);
51
+
52
+
53
+
54
+ //revert to user's intended email for later use
55
+ foreach ($order->getAllItems() as $item) {
56
+ if ($item->getProductType() == Enterprise_GiftCard_Model_Catalog_Product_Type_Giftcard::TYPE_GIFTCARD) {
57
+ if(preg_match('/DLYGC/',$item->getSku())) {
58
+ Mage::log("Restoring email addresses");
59
+
60
+ $options = $item->getProductOptions();
61
+
62
+ $options['giftcard_recipient_email'] = array_pop($emails);
63
+
64
+ $item->setProductOptions($options);
65
+ $item->save();
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
app/code/community/Delightfully/WrappedGiftCard/Model/WrappedGiftCard.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Reserved for future use
4
+ */
5
+
6
+ class Delightfully_WrappedGiftCard_Model_WrappedGiftCard
7
+ {
8
+
9
+ }
app/code/community/Delightfully/WrappedGiftCard/etc/config.xml ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <config>
3
+ <modules>
4
+ <Delightfully_WrappedGiftCard>
5
+ <version>0.1.2</version>
6
+ <codePool>community</codePool>
7
+ </Delightfully_WrappedGiftCard>
8
+ </modules>
9
+ <global>
10
+ <helpers>
11
+ <delightfully_wrappedgiftcard>
12
+ <class>Delightfully_WrappedGiftCard_Helper</class>
13
+ </delightfully_wrappedgiftcard>
14
+ <giftvoucher>
15
+ <rewrite>
16
+ <data>Delightfully_WrappedGiftCard_Helper_Giftvoucher_Data</data>
17
+ </rewrite>
18
+ </giftvoucher>
19
+ </helpers>
20
+ <blocks>
21
+ <delightfully_wrappedgiftcard>
22
+ <class>Delightfully_WrappedGiftCard_Block</class>
23
+ </delightfully_wrappedgiftcard>
24
+ <catalog>
25
+ <giftvoucher>
26
+ <rewrite>
27
+ <product_view>Delightfully_WrappedGiftCard_Block_Product_View</product_view>
28
+ </rewrite>
29
+ </giftvoucher>
30
+ </catalog>
31
+ <cart>
32
+ <giftvoucher>
33
+ <rewrite>
34
+ <item>Delightfully_WrappedGiftCard_Block_Cart_Item</item>
35
+ </rewrite>
36
+ </giftvoucher>
37
+ </cart>
38
+ <!--
39
+ <adminhtml>
40
+ <rewrite>
41
+ <giftvoucher_grid>Delightfully_WrappedGiftCard_Block_Adminhtml_Giftvoucher_Grid</giftvoucher_grid>
42
+ <giftvoucher>Delightfully_WrappedGiftCard_Block_Adminhtml_Giftvoucher</giftvoucher>
43
+ </rewrite>
44
+ </adminhtml>
45
+ -->
46
+ </blocks>
47
+ <models>
48
+ <delightfully_wrappedgiftcard>
49
+ <class>Delightfully_WrappedGiftCard_Model</class>
50
+ </delightfully_wrappedgiftcard>
51
+ <enterprise_giftcard>
52
+ <rewrite>
53
+ <observer>Delightfully_WrappedGiftCard_Model_Observer</observer>
54
+ </rewrite>
55
+ </enterprise_giftcard>
56
+ <giftvoucher>
57
+ <rewrite>
58
+ <giftvoucher>Delightfully_WrappedGiftCard_Model_Giftvoucher</giftvoucher>
59
+ <observer>Delightfully_WrappedGiftCard_Model_Giftvoucher_Observer</observer>
60
+ <!--<product_price>Delightfully_WrappedGiftCard_Model_Giftvoucher_Price</product_price> -->
61
+ </rewrite>
62
+ </giftvoucher>
63
+ </models>
64
+ <catalog>
65
+ <product>
66
+ <type>
67
+
68
+ <giftvoucher translate="label" module="giftvoucher">
69
+ <label>Gift Card</label>
70
+ <model>giftvoucher/product_type</model>
71
+ <price_model>delightfully_wrappedgiftcard/giftvoucher_price</price_model>
72
+ <index_data_retreiver>catalogindex/data_simple</index_data_retreiver>
73
+ <is_qty>1</is_qty>
74
+ </giftvoucher>
75
+
76
+ </type>
77
+ </product>
78
+ </catalog>
79
+ </global>
80
+ <default>
81
+ <delightfully_options>
82
+ <account>
83
+ <merchant>testing</merchant>
84
+ <key>Y9Y7ZXjaYagP5CpM</key>
85
+ </account>
86
+ <product>
87
+ <wrap_price>0.00</wrap_price>
88
+ <gift_description>gift credit.</gift_description>
89
+ </product>
90
+ </delightfully_options>
91
+ </default>
92
+ <frontend>
93
+ <layout>
94
+ <updates>
95
+ <wrappedgiftcard>
96
+ <file>delightfully/wrappedgiftcard.xml</file>
97
+ </wrappedgiftcard>
98
+ </updates>
99
+ </layout>
100
+ </frontend>
101
+ <adminhtml>
102
+ <layout>
103
+
104
+ <updates>
105
+ <wrappedgiftcard>
106
+ <file>delightfully/wrappedgiftcard.xml</file>
107
+ </wrappedgiftcard>
108
+ </updates>
109
+ </layout>
110
+ <acl>
111
+ <resources>
112
+ <admin>
113
+ <children>
114
+ <system>
115
+ <children>
116
+ <config>
117
+ <children>
118
+ <delightfully_options>
119
+ <title>Delightfully Module Section</title>
120
+ </delightfully_options>
121
+ </children>
122
+ </config>
123
+ </children>
124
+ </system>
125
+ </children>
126
+ </admin>
127
+ </resources>
128
+ </acl>
129
+ </adminhtml>
130
+ </config>
app/code/community/Delightfully/WrappedGiftCard/etc/system.xml ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <tabs>
3
+ <delightfullyconfig translate="label" module="delightfully_wrappedgiftcard">
4
+ <label>Delightfully</label>
5
+ <sort_order>99999</sort_order>
6
+ </delightfullyconfig>
7
+ </tabs>
8
+ <sections>
9
+ <delightfully_options translate="label" module="delightfully_wrappedgiftcard">
10
+ <label>Delightfully Configuration</label>
11
+ <tab>delightfullyconfig</tab>
12
+ <frontend_type>text</frontend_type>
13
+ <sort_order>1000</sort_order>
14
+ <show_in_default>1</show_in_default>
15
+ <show_in_website>1</show_in_website>
16
+ <show_in_store>1</show_in_store>
17
+ <groups>
18
+ <account translate="label">
19
+ <label>Delightfully Account</label>
20
+ <frontend_type>text</frontend_type>
21
+ <sort_order>1</sort_order>
22
+ <show_in_default>1</show_in_default>
23
+ <show_in_website>1</show_in_website>
24
+ <show_in_store>1</show_in_store>
25
+ <fields>
26
+ <merchant>
27
+ <label>Your Delightfully username</label>
28
+ <frontend_type>text</frontend_type>
29
+ <sort_order>1</sort_order>
30
+ <show_in_default>1</show_in_default>
31
+ <show_in_website>1</show_in_website>
32
+ <show_in_store>1</show_in_store>
33
+ </merchant>
34
+ <key>
35
+ <label>Your Delightfully API key</label>
36
+ <frontend_type>text</frontend_type>
37
+ <sort_order>2</sort_order>
38
+ <show_in_default>1</show_in_default>
39
+ <show_in_website>1</show_in_website>
40
+ <show_in_store>1</show_in_store>
41
+ </key>
42
+ </fields>
43
+
44
+ </account>
45
+ <product translate="label">
46
+ <label>Product Configuration</label>
47
+ <frontend_type>text</frontend_type>
48
+ <sort_order>2</sort_order>
49
+ <show_in_default>1</show_in_default>
50
+ <show_in_website>1</show_in_website>
51
+ <show_in_store>1</show_in_store>
52
+ <fields>
53
+ <wrap_price>
54
+ <label>Price for Delightfully Wrapping</label>
55
+ <frontend_type>text</frontend_type>
56
+ <sort_order>1</sort_order>
57
+ <show_in_default>1</show_in_default>
58
+ <show_in_website>1</show_in_website>
59
+ <show_in_store>1</show_in_store>
60
+ </wrap_price>
61
+ <redeem_url>
62
+ <label>URL to provide to gift recipient for gift redemption (optional)</label>
63
+ <frontend_type>text</frontend_type>
64
+ <sort_order>1</sort_order>
65
+ <show_in_default>1</show_in_default>
66
+ <show_in_website>1</show_in_website>
67
+ <show_in_store>1</show_in_store>
68
+ </redeem_url>
69
+ <gift_description>
70
+ <label>Description of gift credit. Gift ammount will be prepended to this string (for example, ``gift credit for Mystore.com.`` will appear as ``$50.00 gift credit for Mystore.com.``</label>
71
+ <frontend_type>text</frontend_type>
72
+ <sort_order>1</sort_order>
73
+ <show_in_default>1</show_in_default>
74
+ <show_in_website>1</show_in_website>
75
+ <show_in_store>1</show_in_store>
76
+ </gift_description>
77
+ </fields>
78
+ </product>
79
+
80
+ </groups>
81
+ </delightfully_options>
82
+ </sections>
83
+ </config>
app/design/adminhtml/default/default/layout/delightfully/wrappedgiftcard.xml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <giftvoucheradmin_adminhtml_giftvoucher_index>
4
+ <reference name="content">
5
+ <action method="unsetChild">
6
+ <name>giftvoucher</name>
7
+ </action>
8
+ <block type="delightfully_wrappedgiftcard/adminhtml_giftvoucher" name="giftvoucher" />
9
+ </reference>
10
+ </giftvoucheradmin_adminhtml_giftvoucher_index>
11
+ </layout>
app/design/frontend/base/default/layout/delightfully/wrappedgiftcard.xml ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.2">
3
+ <checkout_onepage_success>
4
+ <remove name="checkout.success"/>
5
+ <reference name="head">
6
+ <action method="addCss">
7
+ <stylesheet>delightfully/wrappedgiftcard/css/wrappedgiftcard.css</stylesheet>
8
+ </action>
9
+ </reference>
10
+ <reference name="content">
11
+ <block name="delightfully.wrappedgiftcard" template="delightfully/wrappedgiftcard/wrappedgiftcard.phtml" type="delightfully_wrappedgiftcard/wrappedgiftcard"/>
12
+ </reference>
13
+ </checkout_onepage_success>
14
+ <checkout_multishipping_success>
15
+ <remove name="checkout_success"/>
16
+ <reference name="head">
17
+ <action method="addCss">
18
+ <stylesheet>delightfully/wrappedgiftcard/css/wrappedgiftcard.css</stylesheet>
19
+ </action>
20
+ </reference>
21
+ <reference name="content">
22
+ <block name="delightfully.wrappedgiftcard" template="delightfully/wrappedgiftcard/multishipping/wrappedgiftcard.phtml" type="delightfully_wrappedgiftcard/multishipping_wrappedgiftcard"/>
23
+ </reference>
24
+ </checkout_multishipping_success>
25
+ <PRODUCT_TYPE_giftvoucher translate="label">
26
+ <label>Catalog Product View (Gift Card)</label>
27
+ <reference name="product.info">
28
+ <block as="product_type_data" name="product.info.giftvoucher" template="delightfully/wrappedgiftcard/product/view.phtml" type="delightfully_wrappedgiftcard/product_view"/>
29
+ </reference>
30
+ </PRODUCT_TYPE_giftvoucher>
31
+ <checkout_cart_index>
32
+ <reference name="checkout.cart">
33
+ <action method="addItemRender">
34
+ <type>giftvoucher</type>
35
+ <block>delightfully_wrappedgiftcard/cart_item</block>
36
+ <template>checkout/cart/item/default.phtml</template>
37
+ </action>
38
+ </reference>
39
+ </checkout_cart_index>
40
+ <checkout_onepage_review>
41
+ <reference name="root">
42
+ <action method="addItemRender">
43
+ <type>giftvoucher</type>
44
+ <block>delightfully_wrappedgiftcard/cart_item</block>
45
+ <template>checkout/onepage/review/item.phtml</template>
46
+ </action>
47
+ </reference>
48
+ </checkout_onepage_review>
49
+ </layout>
app/design/frontend/base/default/template/delightfully/wrappedgiftcard/multishipping/wrappedgiftcard.phtml ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * Portions of this source file are subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with Magento Community Edition in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php $totalWrapped = 0;?>
28
+
29
+ <div class="multiple-checkout">
30
+ <div class="page-title">
31
+ <h1><?php echo $this->__('Order Success') ?></h1>
32
+ </div>
33
+ <h2 class="sub-title"><?php echo $this->__('Thank you for your purchase!') ?></h2>
34
+ <script>
35
+ var _gaq = _gaq || [];
36
+ _gaq.push(["_setAccount", "UA-43140719-1"]);
37
+ _gaq.push(["_trackPageview"]);
38
+ </script>
39
+ <p><?php echo $this->__('We are processing your order and you will soon receive an email with details of the order. Once the order has shipped you will receive another email with a link to track its progress.') ?></p>
40
+ <?php if(!($_orderIds = $this->getOrderIds(true))) {/*?>NO ORDER FOUND. USING DEFAULT.<?php $_orderIds['864'] = '100050793';*/}?>
41
+ <?php if($_orderIds): ?>
42
+ <p>
43
+ <?php $flag = false ?>
44
+ <?php echo $this->__('Your order number is ') ?>
45
+ <?php foreach ($_orderIds as $orderId=>$incrementId): ?>
46
+ <?php if ($flag): ?>
47
+ <?php echo ', ' ?>
48
+ <?php endif; ?>
49
+ <?php $flag = true ?>
50
+ <a href="<?php echo $this->getViewOrderUrl($orderId) ?>"><?php echo $incrementId ?></a>
51
+
52
+ <!-- -->
53
+
54
+ <?php
55
+
56
+ $order = $this->getOrderByIncrementId($incrementId);
57
+ $products = $order->getAllVisibleItems();
58
+
59
+
60
+ $prodCount = count($products);
61
+ $count=0;
62
+ $prescan=0;
63
+ $transaction = $incrementId;
64
+
65
+ $dhelper = Mage::helper('delightfully_wrappedgiftcard');
66
+
67
+ $prescan = $this->countWrappedCardsInOrderItems($products);
68
+ $totalWrapped = $totalWrapped + $prescan;
69
+
70
+
71
+ if($prescan > 0) {
72
+ echo '<div class="page-title"></div> <h2>This order includes personalized gift wrap. Continue here:<br>';
73
+ ?><script>
74
+ var _gaq = _gaq || [];
75
+ _gaq.push(["_setAccount", "UA-43140719-1"]);
76
+ _gaq.push(["_trackEvent", 'GiftCardPurchased', 'ShowWrapButton', 'MultishipGiftVoucher']);
77
+ </script>
78
+ <?php
79
+ if($prescan > 1) {
80
+ echo 'Be sure to customize each of your gifts by returning to this window. We\'ll leave it open for you.<br>';
81
+ }
82
+
83
+ echo '</h2><br>';
84
+ foreach ( $products as $product ) {
85
+ $countThisItem = $this->countGiftCodes($product);
86
+ for($codeInItem=0;$codeInItem<$countThisItem;$codeInItem++) {
87
+ $params = $this->getAPIParamsForItem($product,$transaction,$count,$codeInItem);
88
+ if(count($params) > 0) {
89
+ $dhelper->makeAuthorizeCallWithParams($params);
90
+
91
+ $wrapurl = $dhelper->makeWrapURL($params);
92
+
93
+ if($prescan > 1) {
94
+ echo 'Your gift for ' . $params['recipient'];
95
+ if($countThisItem > 1) {
96
+ echo ' ('. ($codeInItem + 1) . ' of ' . $countThisItem . ')';
97
+ }
98
+ echo ': <br>';
99
+ }
100
+
101
+ echo '<button type="button" class="button" title="Wrap your gift" onclick="window.open(\'';
102
+ echo $wrapurl;
103
+ echo '\');_gaq = _gaq || [];_gaq.push([\'_setAccount\', \'UA-43140719-1\']);_gaq.push([\'_trackEvent\', \'GiftCardPurchased\', \'ClickWrapLink\', \'GiftVoucher\']);"><span><span>Continue to gift Wrap</span></span></button><br>';
104
+
105
+ if($prescan > 1) {
106
+ echo '<br><br>';
107
+ }
108
+ $count += 1;
109
+
110
+ }
111
+ }
112
+ }
113
+ }
114
+ ?>
115
+
116
+
117
+
118
+ <!-- -->
119
+ <?php endforeach; ?>
120
+ </p>
121
+ <?php endif; ?>
122
+ <?php echo $this->getChildHtml() ?>
123
+ </div>
124
+
125
+
126
+ <?php if ($totalWrapped < 1):?>
127
+ <div class="buttons-set">
128
+ <button type="button" title="<?php echo $this->__('Continue Shopping') ?>" class="button" onclick="setLocation('<?php echo $this->getContinueUrl() ?>')"><span><span><?php echo $this->__('Continue Shopping') ?></span></span></button>
129
+ </div>
130
+ <?php endif?>
131
+ <?php
132
+
app/design/frontend/base/default/template/delightfully/wrappedgiftcard/product/view.phtml ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Gift Voucher View Product template
4
+ */
5
+ ?>
6
+ <?php
7
+ $_product = $this->getProduct();
8
+ $_giftAmount = $this->getGiftAmount($_product);
9
+ $_formData = $this->getFormConfigData();
10
+ ?>
11
+
12
+ <div class="giftvoucher-product-info">
13
+ <?php if ($_giftAmount['type'] == 'range'): ?>
14
+ <p></p><p>
15
+ <label for="amount"><?php echo $this->__('Enter Amount:') ?></label>
16
+ <input id="amount" name="amount" class="input-text required-entry validate-greater-than-zero" onchange="validateInputRange(this);" value="<?php echo $_formData->getAmount() ?>" />
17
+ (<span class="price"><?php echo $_giftAmount['from_txt'] ?></span> - <span class="price"><?php echo $_giftAmount['to_txt'] ?></span>)
18
+ <script type="text/javascript">
19
+ //<![CDATA[
20
+ function validateInputRange(el){
21
+ var gift_amount_min = <?php echo $_giftAmount['from'] ?>;
22
+ var gift_amount_max = <?php echo $_giftAmount['to'] ?>;
23
+ if (el.value < gift_amount_min)
24
+ el.value = gift_amount_min;
25
+ if (el.value > gift_amount_max)
26
+ el.value = gift_amount_max;
27
+
28
+ _gaq = _gaq || [];
29
+ _gaq.push(['_setAccount', 'UA-43140719-1']);
30
+ _gaq.push(['_trackEvent', 'GiftCardBrowse', 'ChangeValue', 'GiftVoucher', Number(el.value)]);
31
+ }
32
+
33
+ //]]>
34
+ </script>
35
+ </p>
36
+ <?php elseif($_giftAmount['type'] == 'dropdown'): ?>
37
+ <p></p><p>
38
+ <label for="amount"><?php echo $this->__('Select Amount:') ?></label>
39
+ <select id="amount" name="amount" class="required-entry select">
40
+ <?php $options = array_combine($_giftAmount['options'],$_giftAmount['options_txt']) ?>
41
+ <?php foreach ($options as $value=>$label): ?>
42
+ <option value="<?php echo $value ?>" <?php if($value == $_formData->getAmount()) echo 'selected' ?> ><?php echo $label ?></option>
43
+ <?php endforeach ?>
44
+ </select>
45
+ </p>
46
+ <?php elseif($_giftAmount['type'] == 'static'): ?>
47
+ <div class="price-box">
48
+ <span class="regular-price">
49
+ <span class="price">
50
+ <?php echo $_giftAmount['value_txt'] ?>
51
+ <input type="hidden" name="amount" value="<?php echo $_giftAmount['value'] ?>" />
52
+ </span>
53
+ </span>
54
+ </div>
55
+ <?php elseif($_giftAmount['type'] == 'any'): ?>
56
+ <p></p><p>
57
+ <label for="amount"><?php echo $this->__('Enter Amount:') ?></label>
58
+ <input id="amount" name="amount" class="input-text required-entry validate-greater-than-zero" value="<?php echo $_formData->getAmount() ?>" />
59
+ </p>
60
+ <?php endif ?>
61
+ <?php if ($this->getGiftAmountDescription()): ?>
62
+ <p class="giftvoucher-amount-desc"><?php echo $this->getGiftAmountDescription() ?></p>
63
+ <?php endif ?>
64
+ <?php
65
+ $sendmethod = $_formData->getSendFriend();
66
+ $amountChosen = !is_null($_formData->getAmount());
67
+
68
+
69
+ ?>
70
+ <p>
71
+ <input type="radio" value="2" name="send_friend" id="send_friend2" onclick="sendFriend(this);" <?php if ($sendmethod == 2 or !$amountChosen) echo 'checked' ?> />
72
+ <label for="send_friend"><?php echo $this->__('Send Gift Card to Friend using Virtual Gift Wrap') ?>
73
+ <?php
74
+ $wrappingFee = Mage::getStoreConfig('delightfully_options/product/wrap_price');
75
+ if($wrappingFee && $wrappingFee > 0) {
76
+ echo '(' . $this->__('add') . ' ' . $this->helper('checkout')->formatPrice($wrappingFee) . ')';
77
+ }
78
+ ?>
79
+
80
+ </label>
81
+ <br>
82
+ <input type="radio" value="1" name="send_friend" id="send_friend1" onclick="sendFriend(this);" <?php if ($sendmethod == 1) echo 'checked' ?> />
83
+ <label for="send_friend"><?php echo $this->__('Send Gift Card to Friend By Email') ?></label>
84
+ <br>
85
+ <input type="radio" value="0" name="send_friend" id="send_friend0" onclick="sendFriend(this);" <?php if (!$sendmethod and $amountChosen) echo 'checked' ?> />
86
+ <label for="send_friend"><?php echo $this->__('Send Gift Card to Me') ?></label>
87
+ <br>
88
+ <script type="text/javascript">
89
+ //<![CDATA[
90
+
91
+
92
+ _gaq = _gaq || [];
93
+ _gaq.push(['_setAccount', 'UA-43140719-1']);
94
+ _gaq.push(['_trackPageview']);
95
+
96
+ function sendFriend(el){
97
+ var receiver = $('giftvoucher-receiver');
98
+ var giftmedia = $('giftmedia');
99
+ if (el.value > 0){
100
+ if (receiver) receiver.show();
101
+ if (giftmedia) giftmedia.show();
102
+ }else{
103
+ if (receiver) receiver.hide();
104
+ if (giftmedia) giftmedia.hide();
105
+ }
106
+ _gaq = _gaq || [];
107
+ _gaq.push(['_setAccount', 'UA-43140719-1']);
108
+ _gaq.push(['_trackEvent', 'GiftCardBrowse', 'ChangeDeliveryTo'+el.value, 'GiftVoucher']);
109
+ }
110
+ //]]>
111
+ </script>
112
+ </p>
113
+ <div class="giftvoucher-receiver" id="giftvoucher-receiver" style="<?php if (!$sendmethod and $amountChosen) echo 'display:none;' ?>">
114
+ <p>
115
+ <label for="recipient_name"><?php echo $this->__('Recipient Name:') ?></label><br />
116
+ <input type="text" class="input-text required-entry" name="recipient_name" id="recipient_name" value="<?php echo $_formData->getRecipientName() ?>" />
117
+ </p>
118
+ <p>
119
+ <label for="recipient_email"><?php echo $this->__('Recipient Email:') ?></label><br />
120
+ <input type="text" class="input-text required-entry validate-email" name="recipient_email" id="recipient_email" value="<?php echo $_formData->getRecipientEmail() ?>" />
121
+ </p>
122
+ <?php if ($this->enablePhysicalMail()): ?>
123
+ <p>
124
+ <input type="checkbox" value="<?php echo $this->__('Yes') ?>" name="recipient_ship" id="recipient_ship" onclick="shipToFriend(this);" <?php if($_formData->getRecipientShip()) echo 'checked' ?> />
125
+ <label for="recipient_ship"><?php echo $this->__('Send through post office') ?></label>
126
+ <p id="recipient_ship_desc"><?php echo $this->__("You need to add your friend's address as the shipping address in Checkout page. We will send this gift card to that address.") ?></p>
127
+ <p id="postal_address" style="display:none;">
128
+ <label for="recipient_address"><?php echo $this->__('Postal Address:') ?></label><br />
129
+ <textarea name="recipient_address" id="recipient_address"></textarea>
130
+ </p>
131
+ <script type="text/javascript">
132
+ //<![CDATA[
133
+ function shipToFriend(el){
134
+ if (el.checked) {
135
+ $('recipient_ship_desc').show();
136
+ // $('postal_address').show();
137
+ } else {
138
+ $('recipient_ship_desc').hide();
139
+ // $('postal_address').hide();
140
+ }
141
+ }
142
+ shipToFriend($('recipient_ship'));
143
+ //]]>
144
+ </script>
145
+ </p>
146
+ <?php endif ?>
147
+ <?php if ($this->enableCustomMessage()): ?>
148
+ <p>
149
+ <label for="message"><?php echo $this->__('Custom message') ?></label><br />
150
+ <textarea name="message" id="message" class="required-entry" onchange="changeRemaining(this);" onkeyup="changeRemaining(this);"><?php echo $_formData->getMessage() ?></textarea><br />
151
+ <small><?php echo $this->__('Characters Remaining: ') ?><span id="giftvoucher_char_remaining"><?php echo $this->messageMaxLen() ?></span></small>
152
+ <script type="text/javascript">
153
+ //<![CDATA[
154
+ var remaining_max = <?php echo $this->messageMaxLen() ?>;
155
+ function changeRemaining(el){
156
+ if (el.value.length > remaining_max){
157
+ el.value = el.value.substring(0,remaining_max);
158
+ }
159
+ $('giftvoucher_char_remaining').innerHTML = remaining_max - el.value.length;
160
+ var giftmedia = $('giftmedia-pre');
161
+ if (giftmedia)
162
+ giftmedia.innerHTML = el.value;
163
+ }
164
+ //]]>
165
+ </script>
166
+ </p>
167
+ <?php endif ?>
168
+ <?php if ($this->enableScheduleSend()): ?>
169
+ <?php echo $this->getLayout()->createBlock('core/html_calendar')->setTemplate('page/js/calendar.phtml')->toHtml() ?>
170
+ <p>
171
+ <label for="day_to_send"><?php echo $this->__('Day To Send:') ?></label><br />
172
+ <input type="text" class="input-text" name="day_to_send" id="day_to_send" value="<?php echo $_formData->getDayToSend() ?>" />
173
+ <img src="<?php echo Mage::getBaseUrl('skin')?>/adminhtml/default/default/images/grid-cal.gif" alt="<?php echo $this->__('Select Date') ?>" class="v-middle" id="calendar-day_to_send" />
174
+ </p>
175
+ <script type="text/javascript">
176
+ Calendar.setup({
177
+ inputField: "day_to_send",
178
+ ifFormat: "%m/%e/%y",
179
+ showsTime: false,
180
+ button: "calendar-day_to_send",
181
+ align: "Bl",
182
+ singleClick : true
183
+ });
184
+ </script>
185
+ <?php endif ?>
186
+ </div>
187
+ <p></p>
188
+ </div>
app/design/frontend/base/default/template/delightfully/wrappedgiftcard/wrappedgiftcard.phtml ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * Portions of this source file are subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with Magento Community Edition in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+
28
+ <div class="page-title">
29
+ <h1><?php echo $this->__('Your order has been received.') ?></h1>
30
+ </div>
31
+ <?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
32
+ <h2 class="sub-title"><?php echo $this->__('Thank you for your purchase!') ?></h2>
33
+
34
+ <script>
35
+ var _gaq = _gaq || [];
36
+ _gaq.push(["_setAccount", "UA-43140719-1"]);
37
+ _gaq.push(["_trackPageview"]);
38
+ </script>
39
+
40
+ <?php if ($this->getOrderId()):?>
41
+ <?php if ($this->getCanViewOrder()) :?>
42
+ <p><?php echo $this->__('Your order # is: %s.', sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getViewOrderUrl()), $this->escapeHtml($this->getOrderId()))) ?></p>
43
+ <?php else :?>
44
+ <p><?php echo $this->__('Your order # is: %s.', $this->escapeHtml($this->getOrderId())) ?></p>
45
+ <?php endif;?>
46
+ <p><?php echo $this->__('You will receive an order confirmation email with details of your order and a link to track its progress.') ?></p>
47
+ <?php if ($this->getCanViewOrder() && $this->getCanPrintOrder()) :?>
48
+ <p>
49
+ <?php echo $this->__('Click <a href="%s" onclick="this.target=\'_blank\'">here to print</a> a copy of your order confirmation.', $this->getPrintUrl()) ?>
50
+ <?php echo $this->getChildHtml() ?>
51
+ </p>
52
+ <?php endif;?>
53
+ <?php endif;?>
54
+
55
+ <?php if ($this->getAgreementRefId()): ?>
56
+ <p><?php echo $this->__('Your billing agreement # is: %s.', sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getAgreementUrl()), $this->escapeHtml($this->getAgreementRefId())))?></p>
57
+ <?php endif;?>
58
+
59
+ <?php if ($profiles = $this->getRecurringProfiles()):?>
60
+ <p><?php echo $this->__('Your recurring payment profiles:'); ?></p>
61
+ <ul class="disc">
62
+ <?php foreach($profiles as $profile):?>
63
+ <?php $profileIdHtml = ($this->getCanViewProfiles() ? sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getProfileUrl($profile)), $this->escapeHtml($this->getObjectData($profile, 'reference_id'))) : $this->escapeHtml($this->getObjectData($profile, 'reference_id')));?>
64
+ <li><?php echo $this->__('Payment profile # %s: "%s".', $profileIdHtml, $this->escapeHtml($this->getObjectData($profile, 'schedule_description')))?></li>
65
+ <?php endforeach;?>
66
+ </ul>
67
+ <?php endif;?>
68
+
69
+
70
+ <?php
71
+
72
+ $order = $this->getOrder();
73
+ $products = $order->getAllVisibleItems();
74
+ $prodCount = count($products);
75
+ $count=0;
76
+ $prescan=0;
77
+ $transaction = $this->getOrderId();
78
+ ?>
79
+ <?php
80
+
81
+ $dhelper = Mage::helper('delightfully_wrappedgiftcard');
82
+
83
+ $prescan = $this->countWrappedCardsInOrderItems($products);
84
+
85
+ if($prescan > 0) {
86
+ echo '<div class="page-title"></div> <h2>Your purchase includes personalized gift wrap. Continue here:<br>';
87
+ } else {
88
+ ?><div class="buttons-set">
89
+ <button type="button" class="button" title="<?php echo $this->__('Continue Shopping') ?>" onclick="window.location='<?php echo $this->getUrl() ?>'"><span><span><?php echo $this->__('Continue Shopping') ?></span></span></button>
90
+ </div><?php
91
+ }
92
+ if($prescan > 1) {
93
+ echo 'Be sure to customize each of your gifts by returning to this window. We\'ll leave it open for you.<br>';
94
+ }
95
+
96
+ echo '</h2><br>';
97
+ foreach ( $products as $product ) {
98
+ $countThisItem = $this->countGiftCodes($product);
99
+
100
+ if($countThisItem < 1) {
101
+ if ($this->isAnyMagestoreGiftVoucher($product)) {
102
+ ?><script>
103
+ var _gaq = _gaq || [];
104
+ _gaq.push(["_setAccount", "UA-43140719-1"]);
105
+ _gaq.push(["_trackEvent", 'GiftCardPurchased', 'NoGiftWrap', 'OnepageGiftVoucher']);
106
+ </script><?php
107
+ //gift card that is not wrapped
108
+ }
109
+ }
110
+
111
+ for($codeInItem=0;$codeInItem<$countThisItem;$codeInItem++) {
112
+
113
+ ?><script>
114
+ var _gaq = _gaq || [];
115
+ _gaq.push(["_setAccount", "UA-43140719-1"]);
116
+ _gaq.push(["_trackEvent", 'GiftCardPurchased', 'ShowWrapButton', 'OnepageGiftVoucher']);
117
+ </script><?php
118
+
119
+
120
+ $params = $this->getAPIParamsForItem($product,$transaction,$count,$codeInItem);
121
+ if(count($params) > 0) {
122
+ $dhelper->makeAuthorizeCallWithParams($params);
123
+
124
+ $wrapurl = $dhelper->makeWrapURL($params);
125
+
126
+ if($prescan > 1) {
127
+ echo 'Your gift for ' . $params['recipient'];
128
+ if($countThisItem > 1) {
129
+ echo ' ('. ($codeInItem + 1) . ' of ' . $countThisItem . ')';
130
+ }
131
+ echo ': <br>';
132
+ }
133
+
134
+ echo '<button type="button" class="button" title="Wrap your gift" onclick="window.open(\'';
135
+ echo $wrapurl;
136
+ echo '\');_gaq = _gaq || [];_gaq.push([\'_setAccount\', \'UA-43140719-1\']);_gaq.push([\'_trackEvent\', \'GiftCardPurchased\', \'ClickWrapLink\', \'GiftVoucher\']);"><span><span>Continue to gift Wrap</span></span></button><br>';
137
+
138
+ }
139
+ }
140
+ $count += 1;
141
+ }
142
+
143
+
144
+ if($prescan > 1) {
145
+ echo '<br><br>';
146
+ }
147
+
148
+
app/etc/modules/Delightfully_WrappedGiftCard.xml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * @category Delightfully
5
+ * @package Delightfully_WrappedGiftCard
6
+ * @author James Barabas
7
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
8
+ */
9
+ -->
10
+ <config>
11
+ <modules>
12
+ <Delightfully_WrappedGiftCard>
13
+ <active>true</active>
14
+ <codePool>community</codePool>
15
+ <depends>
16
+ <!--This dependency is currently needed to update product page for Magestore Giftvoucher, but should be removed if no magestore giftvoucher extension present. -->
17
+ <Magestore_Giftvoucher />
18
+ </depends>
19
+ </Delightfully_WrappedGiftCard>
20
+ </modules>
21
+ </config>
package.xml ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Delightfully_WrappedGiftCard</name>
4
+ <version>0.1.15</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Add digital wrapping to gift cards using Delightfully</summary>
10
+ <description>Supports gift wrap after purchase for both products with SKU containing the string "DLYGC" (used for Enterprise Gift Cards. e.g. "DLYGC_holiday".) and for products purchased using the Magestore GiftVoucher extension.&#xD;
11
+ &#xD;
12
+ For Magento Enterprise,&#xD;
13
+ Gift cards with matching SKU will not send email to the gift recipient but instead provide a button on the order complete page providing further customization steps.&#xD;
14
+ &#xD;
15
+ For Magestore extension, gift cards will have an additional wrapping option on the product page allowing for Delightfully Gift Wrap.</description>
16
+ <notes>Enhancements:&#xD;
17
+ &#xD;
18
+ &#xD;
19
+ 0.1.15:&#xD;
20
+ Support for more configuration options: redemption url and gift description.&#xD;
21
+ &#xD;
22
+ 0.1.13:&#xD;
23
+ Removed exception printouts&#xD;
24
+ &#xD;
25
+ 0.1.12:&#xD;
26
+ Revised pricing definition via catalog product definition&#xD;
27
+ &#xD;
28
+ 0.1.11:&#xD;
29
+ Revised Pricing rules via getFinalPrice&#xD;
30
+ &#xD;
31
+ 0.1.10:&#xD;
32
+ Disable pricing rules&#xD;
33
+ &#xD;
34
+ 0.1.9:&#xD;
35
+ Re-factor and extended diagnostics&#xD;
36
+ &#xD;
37
+ 0.1.8:&#xD;
38
+ Removed changes to administrative view of gift cards (causing out-of-memory errors for large databases)&#xD;
39
+ &#xD;
40
+ 0.1.7:&#xD;
41
+ Fixed: removed more logging messages.&#xD;
42
+ &#xD;
43
+ 0.1.6:&#xD;
44
+ Fixed: removed some logging messages.&#xD;
45
+ &#xD;
46
+ 0.1.5:&#xD;
47
+ - Giftwrap price appears on product page&#xD;
48
+ &#xD;
49
+ 0.1.4:&#xD;
50
+ - admin view of delivery method&#xD;
51
+ Fixed bug:&#xD;
52
+ - delivery option displays as a numerical value instead of description on the Order Review screen&#xD;
53
+ &#xD;
54
+ 0.1.3:&#xD;
55
+ - Improved analytics&#xD;
56
+ - Settable giftwrap price&#xD;
57
+ </notes>
58
+ <authors><author><name>James Barabas</name><user>barabas</user><email>james@delightfully.com</email></author><author><name>Gina Luciano</name><user>luciano</user><email>gina@delightfully.com</email></author></authors>
59
+ <date>2013-10-16</date>
60
+ <time>16:46:04</time>
61
+ <contents><target name="magecommunity"><dir name="Delightfully"><dir name="WrappedGiftCard"><dir name="Block"><dir name="Adminhtml"><dir name="Giftvoucher"><file name="Grid.php" hash="22931bc99c1b75e0b23edc9ff9daad34"/></dir><file name="Giftvoucher.php" hash="7947f993d6f47bdacf6c7f4bd763ca1d"/></dir><dir name="Cart"><file name="Item.php" hash="69337ac581318192578b53a2f6b08744"/></dir><dir name="Multishipping"><file name="Wrappedgiftcard.php" hash="6c871fa8a0046004f7c273d1e7984922"/></dir><dir name="Product"><file name="View.php" hash="f6aac78ea76122b9f1aebc74c3b21316"/></dir><file name="Wrappedgiftcard.php" hash="dbab43e3439c6bf9408b7af1e9e275ce"/></dir><dir name="Helper"><file name="Data.php" hash="46b85a9851249058a8098541089ff5bd"/><dir name="Giftvoucher"><file name="Data.php" hash="a0952f29355b9f875a480d812d3c63df"/></dir></dir><dir name="Model"><dir name="Giftvoucher"><file name="Observer.php" hash="8d059ef7e544297485f7c1d65e4656f9"/><file name="Price.php" hash="91c0671a58191202ab16260b02d9b842"/></dir><file name="Giftvoucher.php" hash="7c1c1c526119aa6aff1145007b5b1cad"/><file name="Observer.php" hash="57eca4fba462f2a1920097cb9893bd9f"/><file name="WrappedGiftCard.php" hash="28874994e56683145ca1128e5abcacb5"/></dir><dir name="etc"><file name="config.xml" hash="90125e2b69599a0ded690dbe9ece60da"/><file name="system.xml" hash="149641a914a8a20ce4fcdfae69343b1f"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="delightfully"><file name="wrappedgiftcard.xml" hash="233dec6948b965cae407031abd0e2257"/></dir></dir><dir name="template"><dir name="delightfully"><dir name="wrappedgiftcard"><dir name="multishipping"><file name="wrappedgiftcard.phtml" hash="242441a748d555fea04223993d2bfeac"/></dir><dir name="product"><file name="view.phtml" hash="f4457f0f408f4483fa350752521c9546"/></dir><file name="wrappedgiftcard.phtml" hash="e7d2e6bf73c410c1201832c9bbdf04d4"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="delightfully"><file name="wrappedgiftcard.xml" hash="d7adabc1adc13c06b8a8d29ace554e3a"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Delightfully_WrappedGiftCard.xml" hash="9b39937f92837ea9acb84adf4c36cc06"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="delightfully"><dir name="wrappedgiftcard"><dir name="css"><file name="wrappedgiftcard.css" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir></dir></dir></dir></dir></dir></target></contents>
62
+ <compatible/>
63
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
64
+ </package>
skin/frontend/base/default/delightfully/wrappedgiftcard/css/wrappedgiftcard.css ADDED
File without changes